2010-08-10 11 views
9

No estoy seguro de que esto sea posible, tal vez alguien me puede aclarar. Tengo una vista EditText en una aplicación de Android que tiene texto blanco sobre fondo azul. Cuando se selecciona el texto (mediante una pulsación larga y el cuadro de diálogo de edición), me gustaría que el resaltado sea blanco y cambie el color del texto para que sea negro. Aunque parezca molesto, no parece haber una manera de establecer el color del texto en resaltado. Puede establecer el color de resaltado usando textColorHighlight, pero no el color del texto, por lo que establecer un resaltado blanco con texto blanco da como resultado un gran bloque blanco.Cambiar el color del texto resaltado en Android

Parece que debe ser algo trivial que puede hacer declarativamente en el xml, pero aunque he probado muchas combinaciones de estilos y colores, no he podido cambiar el color.

Comprobando otras aplicaciones estándar parece que el color del texto nunca parece cambiar, así que estoy pensando que esto es algo que no se hace fácilmente. Prefiero no tener que subclasificar el EditText si es posible solo para algo tan simple. ¿Me estoy perdiendo de algo? ¿Se puede hacer esto en la vista xml?

Respuesta

1
+0

He intentado todas y un estilo style = "@ estilo/myDisplayAppearance" donde todo lo anterior se especifica como artículos. Tristemente, no tuve suerte con ninguno de ellos. – sgargan

+0

Como dije, ¿has probado android: textColor = "? Android: attr/textColorPrimaryInverse"? – fedj

+0

Sí Intenté lo anterior, simplemente cambia el color de texto predeterminado a textColorPrimaryInverse, que en mi caso es negro. Realmente estoy tratando de que sea blanco sea predeterminado y negro solo en resaltado. ¿Cuándo, si alguna vez, se aplican los colores inversos? gracias por su ayuda por cierto. – sgargan

1

Tal como se contempla por this SO correos, usted debe utilizar un selector para cambiar los colores del texto, así:

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Pressed State --> 
    <item android:state_pressed="true" 
     android:color="#FFFFFF" /> 

    <!-- Focused State --> 
    <item android:state_focused="true" 
     android:color="#FFFFFF" /> 

    <!-- Default State --> 
    <item android:color="#000000" /> 
</selector> 

y después fijar su textColor propiedad a @ estirable/selector_name

0
Object mSelectionForegroundColorSpan; 
@Override 
protected void onSelectionChanged(int selStart, int selEnd) { 
    super.onSelectionChanged(selStart, selEnd); 
    if(mSelectionForegroundColorSpan == null){ 
     mSelectionForegroundColorSpan = new ForegroundColorSpan(Color.GREEN); 
    }else{ 
     getText().removeSpan(mSelectionForegroundColorSpan); 
    } 
    if(selStart > selEnd){ 
     int swap = selStart; 
     selStart = selEnd; 
     selEnd = swap; 
    } 
    getText().setSpan(mSelectionForegroundColorSpan, selStart, selEnd, Spanned.SPAN_INTERMEDIATE); 
} 

reemplazar el método de TextViewonSelectionChanged, obtener el texto y establecer a Try ForegroundColorSpan

enter image description here

1

: <item name="android:textColorHighlight">your_color</item>

en el estilo que usted como su tema. Por ej.

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <item name="colorPrimary">your_color1</item> 
    <item name="colorPrimaryDark">your_color2</item> 
    <item name="colorAccent">your_color3</item> 
    <item name="android:textColor">your_color4/item> 
    <item name="android:textColorHighlight">your_color</item> 
</style> 

luego use este estilo como el tema para su actividad en el archivo de manifiesto. Para EG

<activity 
    android:name=".youractivity" 
    android:label="" 
    android:theme="@style/AppTheme.NoActionBar"  
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 
Cuestiones relacionadas