2010-09-29 26 views
1

L'activité de préférence se gonfle en invoquantAndroid: Comment faire pour supprimer l'icône flèche vers le bas à côté de l'entrée EditTextPreference?

addPreferencesFromResource (R.xml.preferences);

et voici le preferences.xml:

<PreferenceCategory android:title="@string/pref_categ_update_label"> 
    <ListPreference android:title="@string/pref_label" 
     android:key="update_interval" 
     android:entries="@array/update_names" android:entryValues="@array/update_values" /> 


</PreferenceCategory> 


<PreferenceCategory android:title="@string/pref_categ_evernote_label"> 

    <EditTextPreference android:title="@string/pref_dialog_edit_username" 
     android:key="prefUsername" 
     android:positiveButtonText="@string/save_pref" 
     android:negativeButtonText="@string/cancel_pref" /> 

    <EditTextPreference android:title="@string/pref_dialog_edit_password" 
     android:key="prefPassword" 
     android:positiveButtonText="@string/save_pref" 
     android:negativeButtonText="@string/cancel_pref"    
     android:password="true" /> 

</PreferenceCategory> 

tout semble correct, mais les entrées EditTextPreference (2 et 3) ont des icônes de flèche vers le bas à côté d'eux , tout comme ListPreference (1). Pourquoi est-ce le cas et comment puis-je supprimer ces icônes car elles ne semblent pas pertinentes?

La capture d'écran est ici: http://i.stack.imgur.com/BZUr7.png

Répondre

0

Les flèches sont là pour vous faire savoir que cliquer sur cette préférence va vous emmener ailleurs. Dans le cas du ListPreference il indique qu'il va à un autre "écran" dans le cas du EditTextPreference il a indiqué qu'il va apparaître une boîte de dialogue. Si vous ne l'aimez pas, vous pouvez créer un nouveau style et l'utiliser à la place.

+0

Merci beaucoup. Je pensais que ces flèches étaient des bogues de mise en page) – aiboman

+0

Et quelle est la mise en œuvre minimale pour y parvenir? (Je veux la même fonctionnalité et ne veux pas écrire myslef entière de préférence) – Hurda

0

Je ne suis pas sûr à 100% si cela est sûr et bon moyen, mais vous pouvez supprimer l'icône si vous étendez la classe EditTextPreference comme ça:

Par overiding la méthode getView() vous pouvez modifier ce qui est dessiné en la liste. J'utilise la vue originale et la recherche pour toutes les images (récursivement) et en changeant leur visibility à GONE.

public class EditTextPreferenceNoImage extends EditTextPreference { 
public EditTextPreferenceNoImage(Context context, AttributeSet attrs, 
     int defStyle) { 
    super(context, attrs, defStyle); 
} 

public EditTextPreferenceNoImage(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public EditTextPreferenceNoImage(Context context) { 
    super(context); 
} 

@Override 
public View getView(View convertView, ViewGroup parent) { 
    View view = super.getView(convertView, parent); 
    changeImagesVisibility(view, View.GONE); 
    return view; 
} 

private void changeImagesVisibility(View view, int visibility) { 
    log.debug("child:" + view.getClass()); 
    if (view instanceof ViewGroup) { 
     ViewGroup ll = (ViewGroup) view; 
     for (int i = 0; i < ll.getChildCount(); i++) { 
      changeImagesVisibilitz(ll.getChildAt(i), visibility); 
     } 
    } else if (view instanceof ImageView) { 
     log.debug("visiblitz : " + (visibility == View.VISIBLE)); 
     ImageView image = (ImageView) view; 
     image.setVisibility(visibility); 
    } 

}} 
+0

je pense que disableImages est modifier changeImagesVisibilitz? Alors je édite votre poste – pengwang

+0

Vous avez raison, j'ai simplifié ce code de mon vrai et oublie de changer cet appel de méthode – Hurda

0

Si quelqu'un est d'avoir cette même question, j'ai trouvé une solution super simple pour se débarrasser de la flèche sur des éléments de préférence (techniquement, il se débarrasse de tout ce qui apparaîtrait là - flèche case d'image, etc.). Dans votre fichier preferences.xml, définissez la valeur de Widget Layout sur "@null".

4

Si vous ne voulez pas les flèches dans les préférences puis utilisez -

**android:widgetLayout="@null"** 

Et si vous voulez donner une image personnalisée de préférence du côté droit de la main puis utilisez -

**android:widgetLayout="@layout/pref_custom_image"** 

où, pref_custom_image .xml ressemblera -

<?xml version="1.0" encoding="utf-8"?> 
<ImageView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/ic_launcher" 
/>