2011-09-01 118 views
1

我目前有一個自定義的Dialog類,它擴展了DialogPreference(當然這是PreferenceScreen的一部分)。在DialogPreference中隱藏默認按鈕

此對話框有自定義按鈕,可處理保存和取消。因此,我想擺脫標準的「正面」和「負面」按鈕。

嘗試使用AlertDialog getButton方法,但沒有成功。

回答

2
在XML

使用以下代替DialogPreference:

<Preference 
    android:title="This acts as a button" 
    android:key="button" 
    android:summary="This can act like a button to create it's own dialog"/> 

然後在java:

Preference button = (Preference)findPreference("button"); 
button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 

      @Override 
      public boolean onPreferenceClick(Preference arg0) { 
       showDialog(MY_DIALOG); // let's say MY_DIALOG is 'final int MY_DIALOG = 1;' in the class body 
       return false; 
      } 
     }); 

然後添加到您的類主體:

@Override 
    protected Dialog onCreateDialog(int id) { 

    switch (id) {  

    case SHOW_APP_STRING: 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View mylayout = inflater.inflate(R.layout.mylayout, null); 


    final AlertDialog myDialog = new AlertDialog.Builder(this) 
    .setView(mylayout) 
    .show(); 
     //The buttons are below the dialog so you can close the dialog within your button listeners 
     Button save = (Button)myLayout.findViewById(R.id.save); 
     Button cancel = (Button)myLayout.findViewById(R.id.cancel); 
     //set onClickListeners for both of your buttons 

     return myDialog; 
    } 

} 

我不知道這是否是最好的方法,但這是我如何做的,它的工作原理。

+0

非常感謝推動我進入正確的方向。有了你的幫助,我可以達到我想要的。 – zng

+0

該解決方案不必要的複雜。只需將兩個按鈕的文本設置爲空,它們就會消失。 setPositiveButtonText(NULL); setNegativeButtonText(null); 在構造函數中。 –

11

如果你想創建一個自定義DialogPreference你必須創建自己的類和擴展DialogPreference。要隱藏按鈕使用setPositiveButtonText(null);setNegativeButtonText(null);在構造函數

package ...; 

import android.content.Context; 
import android.preference.DialogPreference; 
import android.util.AttributeSet; 

public class MyDialogPreference extends DialogPreference { 

    public MyDialogPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setPositiveButtonText(null); 
     setNegativeButtonText(null); 
    } 
} 
+5

您可以使用'null'而不是空字符串。 – 2012-05-05 12:31:10

+1

也可以將它們放入onPrepareDialogBu​​ilder(AlertDialog.Builder構建器)而不是構造函數。 – Prizoff

+0

看起來不錯,但不起作用T_T –