Je veux un simple TextView
pour se comporter comme simple_list_item_1
dans un ListView
fait. 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 à l'exception de la couleur du texte qui (normalement) ne change pas en état focalisé. Comment le changer en textAppearanceLargeInverse
?
android
textview
android-selector
Yanchenko
la source
la source
Réponses:
J'ai réussi à faire plusieurs tests jusqu'à ce que l'un d'eux fonctionne, 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>
la source
android:textColor="@color/button_dark_text"
res/color
dossier?Et le sélecteur est la réponse ici aussi.
Recherchez bright_text_dark_focused.xml dans les sources, ajoutez à votre projet sous le répertoire res / color, puis faites référence à TextView comme
android:textColor="@color/bright_text_dark_focused"
la source
ListFragment
, et j'ai fini avec un tas d'erreurs . Qu'est-ce que je fais mal?Voici mon implémentation, qui se comporte exactement comme un élément de 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>
la source
Afin de le faire fonctionner sur la sélection dans une vue de liste, utilisez le code suivant:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="#fff"/> <item android:state_activated="true" android:color="#fff"/> <item android:color="#000" /> </selector>
Apparemment, la clé est l'
state_activated="true"
état.la source
Voici l'exemple du sélecteur. Si vous utilisez eclipse, cela ne suggère rien lorsque vous cliquez sur ctrl et espace à la fois: / vous devez le saisir.
<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 référence;
http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList
la source
J'ai toujours utilisé la solution ci-dessus sans chercher plus après cela. ;-)
Cependant, aujourd'hui je suis tombé sur quelque chose et j'ai pensé le partager. :)
Cette fonctionnalité est en effet disponible à partir de l'API 1 et s'appelle ColorStateList , où nous pouvons fournir une couleur à différents états de Widgets (comme nous le savons déjà).
Il est également très bien documenté, ici.
la source
En
res/color
place un fichier "text_selector.xml":<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/blue" android:state_focused="true" /> <item android:color="@color/blue" android:state_selected="true" /> <item android:color="@color/green" /> </selector>
Ensuite,
TextView
utilisez-le:<TextView android:id="@+id/value_1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Text" android:textColor="@color/text_selector" android:textSize="15sp" />
Et dans le code, vous devrez définir un écouteur de clic.
private var isPressed = false private fun TextView.setListener() { this.setOnClickListener { v -> run { if (isPressed) { v.isSelected = false v.clearFocus() } else { v.isSelected = true v.requestFocus() } isPressed = !isPressed } } } override fun onResume() { super.onResume() textView.setListener() } override fun onPause() { textView.setOnClickListener(null) super.onPause() }
Désolé s'il y a des erreurs, j'ai changé un code avant de publier et je n'ai pas vérifié.
la source
Si vous utilisez TextViews dans les onglets, cette définition de sélecteur a fonctionné pour moi (j'ai essayé celle de Klaus Balduino mais ce n'est pas le cas):
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Active tab --> <item android:state_selected="true" android:state_focused="false" android:state_pressed="false" android:color="#000000" /> <!-- Inactive tab --> <item android:state_selected="false" android:state_focused="false" android:state_pressed="false" android:color="#FFFFFF" /> </selector>
la source
Avez-vous essayé
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 modifications souhaitées, qu'elles soient ciblées ou non. Vous pouvez également utiliser le ViewTreeObserver pour écouter les changements de focus global.
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 cela vous aidera ou vous donnera des idées.
la source