2010-01-14 17 views
16

Estoy tratando de detectar el foco/color presionado para el botón y otros elementos. Esto es necesario porque estoy desarrollando nuevos componentes y es importante que se vean como parte de la plataforma. Esos colores son NARANJA en sdk para Android y VERDE en HTC SenseUI. Si pudiera detectar ese color, mi componente se verá como parte de la plataforma en ambas versiones.Reparado: "Android: Detectando el foco/color presionado"

¿Alguien sabe cómo hacer esto?


Es posible crear "selector", que utiliza la imagen personalizada para el estado por defecto y por defecto plataforma de enfoque/selección.

Para ello, siga los pasos: 1) Crear archivo XML con el selector en "res/estirable" (por ejemplo, "red_button.xml"):

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

    <item android:state_pressed="true" 
     android:drawable="@android:drawable/btn_default" > 
    </item> 

    <item android:state_focused="true" 
     android:drawable="@android:drawable/btn_default" > 
    </item> 

    <item 
     android:drawable="@drawable/btn_default_red" > 
    </item> 
</selector> 

2) de la carpeta " .../android-sdk-mac/platforms/android-1.5/data/res/drawable/"tomar foto" btn_default_pressed.9.png "y cambiar de color como quieras (necesitaba cambiarlo a rojo y para este GIMP es suficiente).

3) colocar la imagen alterada en "res/estirable" (por ejemplo con el nombre "btn_default_red.9.png")

4) definir botón:

<Button 
    android:id="@+id/info_button" 
    android:layout_width="wrap_content" 
    android:layout_height="37dip" 
    android:layout_marginTop="1dip" 
    android:background="@drawable/red_button" 
    android:text="[Info]" /> 

eso es todo.

Esto es resultado: alt text http://img200.imageshack.us/img200/1349/custombutton.png

Respuesta

6

Esos no son los colores. Son algunas imágenes de nueve parches de un StateListDrawable. Soy escéptico de que haya una forma confiable de determinar el color, que funcionará en todos los dispositivos y todas las versiones de Android.

0

Esto es más o menos un duplicado de: Android ListView Selector Color

Además, ¿por qué necesita para detectar los colores? Solo haga nada y sus widgets se ajustarán a la apariencia existente de la plataforma & feel.

O si está escribiendo un tema personalizado, simplemente haga que el suyo herede de android:Theme.

+0

Necesito color porque el cliente quiere el color predeterminado (cuando no está seleccionado o enfocado) para representar el CD/CI de la empresa mientras que la selección/color de enfoque para ser plataforma (Android por defecto, HTC SenseUI) depende. –

+0

Parece que se verá horrible, ¡pero está bien! –

+0

Agregué la imagen (enlace a la imagen) de los botones resultantes. No soy diseñador, pero creo que los botones parecen aceptables. –

8

Tuve este problema también. Como ya se dijo, el problema es que los fondos no son simples colores, sino que son Draables que pueden adoptar todo tipo de apariencias. Sin embargo, encontré una solución alternativa que puede ayudar. Si su componente personalizado se parece a uno existente, p. una entrada Button o ListView, puede robar su fondo/selector y configurarlo como fondo para su componente personalizado. Por ejemplo, en su aduana componente constructor:

setBackgroundDrawable(new Button(context).getBackground()); 

o para un fondo más adecuado para los componentes de la lista como:

setBackgroundDrawable(new ListView(context).getSelector()); 

Es posible que desee para optimizar ese código un poco, pero usted consigue la idea.

+1

buena solución –

+0

Sí, buen truco. Una tarea aparentemente simple que realmente ha llevado días de investigación para descubrir incluso una solución alternativa. Muchas gracias. –

Cuestiones relacionadas