2016-10-03 50 views
1

我有一個對話框片段,我想將ok/cancel按鈕放在對話框的底部。我嘗試過,但我唯一得到的是編輯文本上的按鈕(即在DialogFragment中)。 Thisi是我的對話框: enter image description here將確定/取消按鈕添加到DialogFragment

,這是我的對話框代碼:

public class dialogNewFile extends DialogFragment { 
private EditText textNewFile; 

public dialogNewFile(){} 

public static dialogNewFile newIstance(String title){ 
    dialogNewFile frag=new dialogNewFile(); 
    Bundle args=new Bundle(); 
    args.putString("title",title); 
    frag.setArguments(args); 
    return frag; 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedIstanceState){ 
    return inflater.inflate(R.layout.fragment_newfile,container); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedIstanceState){ 
    super.onViewCreated(view, savedIstanceState); 
    textNewFile=(EditText) view.findViewById(R.id.edit_text_newfile); 
    String title=getArguments().getString("title","Enter name"); 
    getDialog().setTitle(title); 
    textNewFile.requestFocus(); 
    getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
} 

@Override 
public void onResume() { 
    Window window = getDialog().getWindow(); 
    Point size = new Point(); 
    // Store dimensions of the screen in `size` 
    Display display = window.getWindowManager().getDefaultDisplay(); 
    display.getSize(size); 
    // Set the width of the dialog proportional to 75% of the screen width 
    window.setLayout((int) (size.x * 0.75), (int) (size.x * 0.50)); 
    window.setGravity(Gravity.CENTER); 
    // Call super onResume after sizing 
    super.onResume(); 

} 

這是對話片段的佈局:

<?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="match_parent" 
android:layout_gravity="center" 
android:id="@+id/dialogNewFile"> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="35dp" 
    android:hint="@string/hint_new_file" 
    android:inputType="text" 
    android:id="@+id/edit_text_newfile"/> 

</LinearLayout> 
+0

向我們展示xml佈局文件。 – AAnkit

+0

爲什麼不使用AlertDialog並調用如下代碼:new AlertDialog.Builder()。setPositiveButton(「Ok」,listener).setNegativeButton(「Cancel」,...)您還可以添加一個自定義視圖.setView –

回答

3

您應覆蓋onCreateDialog和使用AlertDialog.Builder設置正面和負面按鈕如下所示:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    String title = getArguments().getString("title"); 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setTitle(title); 
    builder.setMessage("Are you sure?"); 

    // Edited: Overriding onCreateView is not necessary in your case 
    LayoutInflater inflater = LayoutInflater.from(getContext()); 
    View newFileView = inflater.inflate(R.layout.fragment_newfile, null); 
    builder.setView(newFileView); 

    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // on success 
     } 
    }); 
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 

    return builder.create(); 
} 
+0

Thanks ,那樣我就可以得到這些按鈕,但是我的佈局現在被覆蓋了,如下所示:http://imgur.com/3KRfbuD –

+0

使用layoutInflater使用構建器來擴展布局。 – kolunar

+0

在我的例子中,我贏得了這個改變:LayoutInflater inflater = getActivity()。getLayoutInflater(); –

0

如果你想使用自定義對話框視圖中,使用alertdialog.setView方法

 AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     View myview = alertDialog.getLayoutInflater().inflate(R.layout.custom_dialog_layout, null); 
     final AlertDialog alertDialog = builder.create(); 
     builder.setView(myview); 
     alertDialog .show(); 

對於點擊事件。

Button positiveButton = myview.findViewById(R.id.btnPositive); 
positiveButton.setOnclickListener(new OnClickListener .....