198 votes

Android sélecteur et la couleur du texte

Je veux un simple TextView à se comporter de la façon dont simple_list_item_1 en ListView . Voici le XML:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:layout_width="fill_parent"
    android:gravity="center" android:focusable="true"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:background="@android:drawable/list_selector_background" />

Tout fonctionne sauf pour la couleur du texte (évidemment) ne change pas le focus de l'état. Comment puis-je la faire changer d' textAppearanceLargeInverse?

421voto

Klaus Balduino Points 1711

Je l'ai eu en faisant plusieurs essais jusqu'à ce que l'on a travaillé, donc: res/color/button_dark_text.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:color="#000000" /> <!-- pressed -->
     <item android:state_focused="true"
           android:color="#000000" /> <!-- focused -->
     <item android:color="#FFFFFF" /> <!-- default -->
 </selector>

res/layout/view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
    <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="EXIT"
       android:textColor="@color/button_dark_text" />
</LinearLayout>

81voto

yanchenko Points 24142

Et le sélecteur est la réponse ici.

Recherche pour bright_text_dark_focused.xml dans les sources, l'ajouter à votre projet sous res/color puis reportez-vous à partir du TextView comme

android:textColor="@color/bright_text_dark_focused"

32voto

kreker Points 1447

Voici ma mise en œuvre, qui se comporte exactement comme un élément dans la liste (au moins sur 2,3)

res/layout/list_video_footer.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/list_video_footer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:drawable/list_selector_background"
        android:clickable="true"
        android:gravity="center"
        android:minHeight="98px"
        android:text="@string/more"
        android:textColor="@color/bright_text_dark_focused"
        android:textSize="18dp"
        android:textStyle="bold" />

</FrameLayout>

res/color/bright_text_dark_focused.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:color="#444"/>
    <item android:state_focused="true" android:color="#444"/>
    <item android:state_pressed="true" android:color="#444"/>
    <item android:color="#ccc"/>

</selector>

4voto

Günay Gültekin Points 425

Voici l'exemple de sélecteur. Si vous utilisez eclipse , il ne suggère pas quelque chose lorsque vous cliquez sur la touche ctrl et espace à la fois :/ vous devez le taper.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_default_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/btn_default_selected"
    android:state_focused="true"
    android:state_enabled="true"
    android:state_window_focused="true"  />
<item android:drawable="@drawable/btn_default_normal" />

Vous pouvez regarder pour la référence;

http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

0voto

lilbyrdie Points 819

Avez-vous essayé d' setOnFocusChangeListener? Dans le gestionnaire, vous pouvez modifier l'apparence du texte.

Par exemple:

TextView text = (TextView)findViewById(R.id.text);
text.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            ((TextView)v).setXXXX();
        } else {
            ((TextView)v).setXXXX();
        }
    }
});

Vous pouvez ensuite appliquer les changements que vous voulez, quand il est porté ou non. Vous pouvez également utiliser le ViewTreeObserver pour écouter Global du changement de focus.

Par exemple:

View all = findViewById(R.id.id_of_top_level_view_on_layout);
ViewTreeObserver vto = all.getViewTreeObserver();
vto.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
    public void onGlobalFocusChanged(
        View oldFocus, View newFocus) {
        // xxxx
    }
});

J'espère que cette aide ou vous donne des idées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X