0

我有这个dialogfragment,我有两个问题。如何使dialogFragment的宽度匹配父对象?

1.如何让宽度匹配父母(请最干净和最好的解决方案)。

2.在对话框片段中我有一个editText。当对话框片段打开时,如何让它弹出一个软键盘?

希望你们能帮忙!

这里是我的对话片段java代码:

@Nullable 
    @Override 
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     rootView = inflater.inflate(R.layout.activity_13g_add_comment, container, false);//The container is the rootView. 

     myCognito = new MyCognito(getActivity().getApplicationContext(),getActivity().getBaseContext()); 

     cardClient = myCognito.getCardClient(); 

     bindActivity(); 

     return rootView; 
    } 

    private void bindActivity() 
    { 
     doneButton = (ImageButton) rootView.findViewById(R.id.add_comment_doneButton); 
     doneButton.setVisibility(View.GONE); 

     imageView = (ImageView) rootView.findViewById(R.id.add_comment_IV); 

     RemoveGlideCacheAsyncTask removeGlideCacheAsyncTask = new RemoveGlideCacheAsyncTask(getActivity().getBaseContext(),Global_Class.getInstance().getValue().user.getUsername()); 
     removeGlideCacheAsyncTask.execute(); 


     editText = (EditText) rootView.findViewById(R.id.add_comment_ET); 

     editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) 
      { 
       enableSubmitButton(); 
      } 

      @Override 
      public void afterTextChanged(Editable s) 
      { 

      } 
     }); 

     imageView = (ImageView) rootView.findViewById(R.id.add_comment_IV); 

     doneButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 

      } 
     }); 
    } 

    private void enableSubmitButton() 
    { 
     boolean isReady = editText.getText().toString().length() > 0; 
     if(isReady) 
     { 
      doneButton.setVisibility(View.VISIBLE); 
     } 
     else 
     { 
      doneButton.setVisibility(View.GONE); 
     } 
    } 

这里是XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_margin="10dp"> 
     <de.hdodenhof.circleimageview.CircleImageView 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:id="@+id/add_comment_IV"/> 
     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:hint="Add a comment" 
      android:layout_gravity="center" 
      android:layout_weight="1" 
      android:textColor="@color/black" 
      android:id="@+id/add_comment_ET" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="5dp" 
      android:background="@android:color/transparent" 
      android:maxLength="140"/> 
     <ImageButton 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:background="@color/green_main" 
      android:id="@+id/add_comment_doneButton"/> 
    </LinearLayout> 
</LinearLayout> 

回答

0

使用appcompactDialog和应用如下主题:

<style name="dialogFullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"> 

    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:windowCloseOnTouchOutside">false</item> 
    <item name="android:windowFullscreen">true</item> 

    <item name="android:windowNoTitle">true</item> 

</style> 

下面是Java代码示例:

AppCompatDialog dialogVideoView = new AppCompatDialog(context,R.style.dialogFullScreen); 
dialogVideoView.setContentView(R.layout.custom_dialog_video_surface); 
dialogVideoView.show(); 
0

对于自定义对话框,您可以使用:

Dialog dialog_guest = new Dialog(MainActivity.this); 

dialog_guest.requestWindowFeature(Window.FEATURE_NO_TITLE); 

dialog_guest.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 

dialog_guest.setContentView(R.layout.yourxml); 

dialog_guest.setCanceledOnTouchOutside(false); 
     dialog_guest.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

dialog_guest.show(); 

此外,我认为你的键盘会自动打开。如果没有,那么使用:

InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
     inputMethodManager.toggleSoftInputFromWindow(yourEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0); 
     yourEditText.requestFocus(); 
4

打开DialogFragment如下

SampleDialogFragment sampleDialogFragment = new SampleDialogFragment(); 
SampleDialogFragment.setStyle(DialogFragment.STYLE_NO_FRAME, 0); 
SampleDialogFragment.show(getActivity().getSupportFragmentManager(), "sometag"); 

然后在DailogFragment覆盖onStart()方法如下

@Override 
public void onStart() { 
    super.onStart(); 
    getDialog().getWindow() 
     .setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); 
} 

然后显示softkeyboard试试这个

((InputMethodManager) sampleedittext.getContext() 
     .getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(
     sampleedittext, InputMethodManager.SHOW_IMPLICIT); 

或者你可以 创建Dialog

<style name="CustomDialog" parent="AppTheme" > 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowCloseOnTouchOutside">true</item> 
</style> 

自定义样式,然后使用该样式对话框片段

@Override public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(DialogFragment.STYLE_NORMAL, R.style.CustomDialog); 
} 

@Override public void onStart() { 
    super.onStart(); 
    getDialog().getWindow() 
    .setLayout(WindowManager.LayoutParams.MATCH_PARENT, 
     WindowManager.LayoutParams.MATCH_PARENT); 
} 

SampleDialogFragment sampleDialogFragment = new SampleDialogFragment(); 
SampleDialogFragment.show(getActivity().getSupportFragmentManager(), "sometag"); 
+0

如果我做'SampleDialogFragment.setStyle(DialogFragment.STYLE_NO_FRAME,0); '那么,我的对话框片段的背景变得透明。 – TheQ

+0

您可以将'backgroundcolor'设置为对话框的根视图或尝试编辑的答案 – arjun

0

关于第一个问题,你可以在style.xml

<item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">true</item> 
添加到您的 dialog style

而另一方面,你必须让你的EditText requestFocus和显示键盘,这里是代码:

edit.requestFocus(); 
InputMethodManager imm = (InputMethodManager) edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED); 

希望它有帮助。