2009-10-26 18 views
8

Tengo un problema con el fondo EditarTexto como estoProblema con EditarTexto fondo (androide)

<EditText 
    android:id="@+id/edit" 
    android:layout_width="fill_parent" 
    android:layout_height="35sp"                  
    android:singleLine="true" 

    android:layout_marginLeft="5px" 
    android:layout_marginRight="5px" 
    android:layout_marginTop="5px" 
    android:textAppearance="?android:attr/textAppearanceSmall"  
     /> 

alt text http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext.jpg

Después de tratar de establecer el fondo, se ven peor

<EditText 
    android:id="@+id/edit" 
    android:layout_width="fill_parent" 
    android:layout_height="35sp"                  
    android:singleLine="true" 

    android:layout_marginLeft="5px" 
    android:layout_marginRight="5px" 
    android:layout_marginTop="5px" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:background="#ffffff"  
     /> 

alt text http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext2.jpg

¿Qué sucede con el fondo EditText? ¿Cómo hacer que EditText mantenga el estilo predeterminado?

+0

no es androide: textAppearance = "@ android: attr/textAppearanceSmall" – Bostone

+0

en realidad - la sintaxis de texto es correcto, véase mi respuesta a continuación – Bostone

Respuesta

4

Si configurar su fondo EditarTexto a un color que va a suprimir de manera efectiva fondo por defecto de Android, que es probably a Nine Patch pero definitivamente no sólo un color simple. Como resultado, obtendrá una forma más simple de EditText, un cuadro cuadrado. Aquí está un poco obsoleto list of built-in drawables para darle una idea

2

Como creo que debería cambiar el color de fondo, no el fondo. Porque está usando forma personalizada xml.

  • Dibujable para usar como fondo. Puede ser una referencia a un recurso dibujable completo (como una imagen PNG, 9 parches, descripción de lista de estados XML, etc.) o un color sólido como #ff000000 (negro).

  • Puede ser una referencia a otro recurso, en el formulario @[+][package:]type:name o a un atributo de tema en el formulario ?[package:][type:]nam e.

  • puede ser un valor de color, en la forma de #rgb, #argb, #rrggbb, o #aarrggbb.

+0

la sintaxis que está usando para el color de fondo es válida – Bostone

+0

bien Abou Sintaxis t, creo que anula la forma predeterminada de fondo xml con sombras, etc., y la configura en color sólido. – Shtirlic

16

Aquí es 2 Solución para cambiar el fondo de EditarTexto tengo investigar antes, espero que le puede ayudar a:

Edición: Cuando se establece Antecedentes de EDITTEXT que se vea tan terrible

Analysys: EditText utilizó la imagen de nueve vías para el fondo. Su utiliza un selector para cambiar base de la imagen de fondo sobre el estado actual de EditarTexto (Habilitar/Focus/Press, por defecto)

Hay dos soluciones a solver este problema, cada solución tiene tanto ventajas como desventajas:

solución 1: Crear personalizada mismo EditarTexto (siga esta solución hemos cambiar libremente vista de EditarTexto

Advantage:. su render libremente vista EditarTexto siga su pu rpose, No es necesario crear una imagen de Ninepath como implemento actual de Android EditText. (Su proveedor debe IF en su EditText para cambiar el fondo sin problemas en base al estado de EditText (Enable/Focus ...).) reutilizado capaces y más personalizada en caso de que quiera cambiar el color de fondo o añadir más color

Desventaja: se necesita mucho esfuerzo para crear y probar su costumbre EditarTexto. (elegir solución al 2 por lo que no tienen demostración implementar la solución 1, si uno sigue esta solución no dude en compartir con nosotros su código de demostración gratuita)

Solución 2: selector utiliza como Android implementar

xml ❶Create llamada archivo edittext_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/edittext_selector"> 
    <!-- Image display in background in select state -->  
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/your_ninepath_image"> 
    </item> 

     <!-- Image display in background in select state -->  
    <item 
     android:state_enabled="true" 
     android:state_focused="true" 
     android:drawable="@drawable/your_ninepath_image"> 
    </item> 

    <!-- Default state --> 
    <item android:state_enabled="true" 
     android:drawable="@drawable/your_ninepath_image"> 
    </item> 
</selector> 
selector de conjunto xml

❷On EditarTexto:

<EditText 
    ... 
    android:background="@layout/**edittext_selector**" 
    ... 
</EditText> 

Nota:

● En este código de demostración yo era eliminar un comportamiento de estado de vista, consulte androide aplicar para el comportamiento detalle (enfoque/desenfocar, activar/desactivar, prensa, seleccionada ...)

● Cuide el artículo en su selector. El orden de diferencia del elemento en el archivo selector xml tendrá fondo de diferencia.

Advantage: simple, basta con crear selector y el selector en el fondo, en caso de que desee más color, acaba de establecer más selectora a continuación, establecer por código.

Desventaja: esfuerzo tomar para crear ninepath imagen de selector, en caso de que desee cambiar de color o añadir más color debe crear más imagen y selector. Por lo tanto, es menos robusto que Solution1

Este es mi fondo de búsqueda de manejador de la imagen, por lo que puede ser correcto o incorrecto, si tiene una mejor solución o explicar, no dude en compartir con nosotros.

I was implement follow solution 2 y funcionó.

4

Si desea editar el color del fondo de Android sobre la marcha sin necesidad de cambiar la imagen de fondo por completo, pruebe lo siguiente: (probablemente no es la mejor solución, pero funciona):

YourEditText.getBackground().setColorFilter(getResources().getColor(R.color.your_color), PorterDuff.Mode.MULTIPLY); 
11

Mi solución es una sola línea de código:

<your-widget-component-that-has-a-background-color>.getBackground().setColorFilter(Color.<your-desired-color>, PorterDuff.Mode.MULTIPLY);). 

se descompone así:

  • "getBackgrou nd() "recupera el fondo del componente
  • " setColorFilter "llamará a un filtro en la propia imagen de fondo
  • " Color. < su-color-aquí> "determina qué color desea pasar al filtro
  • " PorterDuff.Mode. < your-desired-filter-mode> "establece el tipo de manipulación que le gustaría hacer con el color y la imagen de fondo obtenidos.

Las personas con conocimientos de software de edición de imágenes pueden reconocer el modo. Cada modo tiene un cierto efecto sobre cómo se aplica el color a la imagen de fondo. Para simplemente "anular" el color de la imagen, conservando sus degradados, bordes y demás, use MULTIPLY.

+0

exactamente lo que estaba buscando. ¡Gracias! – Max

+0

Mejor aquí. –

3

No es necesario crear la imagen. Hay una construida en la imagen en el sistema androide que pueda editar su use.So EditarTexto en XML de la siguiente manera; -

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="30dp" 
    android:layout_marginRight="30dp" 
    android:layout_marginTop="10dp" 
    android:hint="@string/campaign_message" 
    android:inputType="textMultiLine" 
    android:background="@android:drawable/editbox_background_normal" 
    android:minHeight="80dp" > 
</EditText> 

esta línea Nota: android:background="@android:drawable/editbox_background_normal"

+0

¿Echas de menos el punto? Cuando configura el color de fondo del texto de edición, se sobrescribe el trazado incorporado. A menos que hayas cambiado el tema de tu texto de edición del drawable predeterminado, no hay ninguna razón para usar incluso "android: backgroun =" @ android: drawable/editbox_background_normal " –

0

tuve que usar SRC_ATOP para que funcione para mí

mEditText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);