2016-07-08 15 views
0

MyCustomDialogFragment總是包裝它的內容並且不會像Alertdialog一樣保留最小寬度。如何將寬度設置爲標準Android對話框的響應?DialogFragment總是包裝我的內容,並且不會將最小寬度保留爲alertdialog

這就是我所說顯示對話框的功能:

 private void displayDialogEdit(String title, String edit, 
MyCustomEditDialog.MyCustomEditDialogListener listener, boolean onlyNumbers){ 
      MyCustomEditDialog dialog = MyCustomEditDialog.newInstance(title, edit, onlyNumbers); 
      dialog.setInterface(listener); 
      dialog.show(getSupportFragmentManager(), "edit"); 
     } 

這是MyCustomDialogFragment。

public class MyCustomEditDialog extends DialogFragment { 

    private MyCustomEditDialog.MyCustomEditDialogListener mInterface; 

    public static MyCustomEditDialog newInstance(String title, String editText, boolean onlyNumbers){ 
     MyCustomEditDialog dialog = new MyCustomEditDialog(); 
     Bundle args = new Bundle(); 
     args.putString("title", title); 
     args.putString("edit", editText); 
     args.putBoolean("numbers", onlyNumbers); 
     dialog.setArguments(args); 
     return dialog; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_edit_dialog, container); 

     getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

//  Bundle args = getArguments(); 
// 
//  boolean numbers = args.getBoolean("numbers"); 
// 
//  TextView txt = (TextView)v.findViewById(R.id.title); 
//  txt.setText(args.getString("title")); 
// 
//  final EditText edit = (EditText) v.findViewById(R.id.editText); 
//  edit.setText(args.getString("edit")); 
// 
//  if (numbers) edit.setInputType(InputType.TYPE_CLASS_NUMBER); 
// 
//  Button btn = (Button)v.findViewById(R.id.save); 
// 
//  btn.setOnClickListener(new View.OnClickListener() { 
//   @Override public void onClick(View view) { 
//    if (mInterface!=null) mInterface.customDialogOnClick(edit.getText().toString()); 
//   } 
//  }); 
// 
//  setCancelable(true); 

     return v; 
    } 

    public void setInterface(MyCustomEditDialog.MyCustomEditDialogListener listener){ 
     this.mInterface = listener; 
    } 


    public interface MyCustomEditDialogListener { 
     void customDialogOnClick(String result); 
    } 

} 

這是我的自定義對話框

<?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"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingStart="@dimen/activity_horizontal_margin" 
     android:paddingEnd="@dimen/activity_horizontal_margin" 
     android:gravity="center_horizontal" 
     android:paddingTop="10dp" 
     android:paddingBottom="10dp" 
     android:textColor="@color/blue_dark" 
     android:textStyle="bold" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:layout_marginBottom="10dp" 
     android:id="@+id/title" 
     android:layout_gravity="center_horizontal" /> 

    <EditText 
     android:layout_marginStart="@dimen/activity_horizontal_margin" 
     android:layout_marginEnd="@dimen/activity_horizontal_margin" 
     android:layout_marginBottom="10dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/editText" 
     android:inputType="text" 
     /> 

    <Button 
     style="@style/btnBasic.blue" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/save" 
     android:id="@+id/save" /> 

</LinearLayout> 

樣品結果的佈局:

dialog small

+0

的可能的複製[如何使DialogFragment寬度來填充\ _Parent](http://stackoverflow.com/questions/23990726/how-to-make-dialogfragment- width-to-fill-parent) –

+0

我不希望填滿屏幕只是作爲alertdialog大小作出響應,最好的辦法可能是將dialogfragment更改爲alertdialog並使用自定義視圖 – Jason

回答

1

嘗試這些方法

  • 組佈局的寬度和高度的代碼由

    alertDialog.getWindow().setLayout(600, 400); 
    
  • 組上你的主要主題對話框

    android:theme="@android:style/Theme.Dialog" 
    

    主題

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:dialogTheme">@style/dialog_light</item> 
    
    
    
    </style> 
    
    
    <style name="dialog_light" parent="@android:style/Theme.Dialog"> 
    <item name="@android:windowBackground">@color/whitegrey</item> 
    <item name="@android:textColor">@color/black</item> 
    </style> 
    
  • 集主題在代碼中也是這樣的

    new AlertDialog.Builder(
    new ContextThemeWrapper(context, android.R.style.Theme_Dialog)) 
    
1

找到一個簡單的解決方案,以保持與標準上fragmentDialog一個alertDialog的。

改寫從片段的onCreate方法與此:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Material_Light_Dialog_Alert); 
} 
0

我碰到這個問題,今天來了,我發現了一個簡單的解決方案:你可以從DialogFragment覆蓋getTheme()方法並返回從中R.style.Theme_AppCompat_Light_Dialog_Alert(或任何其他主題你想要的,我使用AppCompat之一,所以這將在老版本的Android)。

實施例的代碼科特林:

class ExampleDialog : DialogFragment() { 

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { 
     return inflater.inflate(R.layout.example_dialog, container, false) 
    } 

    override fun getTheme(): Int { 
     return R.style.Theme_AppCompat_Light_Dialog_Alert 
    } 

} 
相關問題