2011-09-01 4 views
1

J'ai actuellement une classe Dialog personnalisée qui étend DialogPreference (qui fait bien sûr partie d'un PreferenceScreen).Masquer les boutons par défaut dans DialogPreference

Cette boîte de dialogue comporte des boutons personnalisés dont les poignées sont sauvegardées et annulées. Donc, je voudrais me débarrasser des boutons "positif" et "négatif" standard.

Essayé en utilisant la méthode getButton de AlertDialog mais sans succès.

Répondre

2

dans votre xml utilisez ce qui suit au lieu de 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"/> 

Puis, dans la 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; 
      } 
     }); 

Ensuite, ajoutez à votre corps de classe:

@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; 
    } 

} 

Je suis Je ne sais pas si c'est la meilleure méthode, mais c'est comme ça que je le fais et ça marche.

+0

Merci beaucoup pour me pousser dans la bonne direction. Avec votre aide, je pourrais réaliser ce que je voulais. – zng

+0

Cette solution est inutilement complexe. Réglez simplement le texte des deux boutons sur null et ils disparaîtront. setPositiveButtonText (null); setNegativeButtonText (null); Dans le constructeur. –

11

Si vous souhaitez créer un DialogPreference personnalisé, vous devez créer votre propre classe et étendre DialogPreference. Pour masquer les boutons utilisent setPositiveButtonText(null); et setNegativeButtonText(null); dans le constructeur

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

Vous pouvez utiliser 'null' au lieu de la chaîne vide. –

+1

Il est également possible de les placer dans onPrepareDialogBuilder (générateur AlertDialog.Builder) au lieu du constructeur. – Prizoff

+0

On dirait une bonne idée mais ça ne marche pas T_T –

Questions connexes