2012-01-23 21 views
7

Quiero que mi Spinner tenga un fondo negro degradado con texto blanco a la izquierda y un ícono selector a la derecha (un triángulo blanco que apunta hacia abajo). Tal como lo veo, hay dos maneras de ir sobre esto:Spinner personalizado con esquinas redondeadas, borde frotado y un ícono de selector

  1. Si fijo el fondo de un recurso dibujable xml puedo hacer mi Spinner look perfecto, pero luego tengo que añadir algún modo el triángulo blanco en la derecho, que no sé cómo hacer para:

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
        <shape> 
         <gradient 
          android:startColor="#343434" 
          android:endColor="#171717" 
          android:angle="270" /> 
         <stroke 
          android:width="1dp" 
          android:color="#ffffff" /> 
         <corners 
          android:radius="4dp" /> 
         <padding 
          android:left="3dp" 
          android:top="3dp" 
          android:right="3dp" 
          android:bottom="3dp" /> 
        </shape> 
    </item> 
    </selector> 
    
  2. puedo crear una imagen 9-parche que incluye el triángulo y luego utilizar XML para redondear las esquinas y añadir un golpe a la imagen. He tenido un ir en esto, pero no fue capaz de hacer que funcione:

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
        <item android:drawable="@drawable/spinnerblack" > 
         <stroke 
          android:width="1dp" 
          android:color="#ffffff" /> 
         <corners 
          android:radius="3dp" /> 
         <padding 
          android:left="3dp" 
          android:top="3dp" 
          android:right="3dp" 
          android:bottom="3dp" /> 
        </item> 
    </selector> 
    

es posible que alguien sea dime lo que puedo hacer por el método 1 o lo que he hecho mal en el método 2? Preferiría no tener que agregar el trazo y las esquinas redondeadas en mi imagen de 9 parches porque no creo que se vea tan bien. Además, preferiría el método 1 al método 2. Cualquier ayuda muy apreciada.

Respuesta

11

He hecho algo similar al método 1 en mi aplicación. Básicamente es necesario combinar el selector con una capa de lista:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <layer-list> 
      <item> 
       <shape> 
        <gradient 
         android:startColor="#343434" 
         android:endColor="#171717" 
         android:angle="270" /> 
        <stroke 
         android:width="1dp" 
         android:color="#ffffff" /> 
        <corners 
         android:radius="4dp" /> 
        <padding 
         android:left="3dp" 
         android:top="3dp" 
         android:right="3dp" 
         android:bottom="3dp" /> 
       </shape> 
      </item> 
      <item 
       android:top="12dp" 
       android:right="15dp"> 
       <bitmap android:src="@drawable/arrow_bitmap" 
         android:gravity="top|right" /> 
      </item> 
     </layer-list> 
    </item> 
</selector> 

En mi xml También añade una tercera capa que contiene una <shape> que es invisible (es decir, su alfa se establece en 0), pero añade relleno.

+0

Gracias! Si lo hiciera de esta forma, ¿tendría que usar un mapa de bits? Como solo quería un triángulo blanco simple, necesito que tenga un fondo transparente, por lo que querría usar un .png. Voy a intentarlo y ver qué puedo hacer. –

+0

Funciona con .png, perfecto, muchas gracias! –

+0

@ Aaron Klotz En mi caso, la imagen de la flecha se dibuja en la parte superior | derecha. En cambio, quiero ver la flecha img con el relleno correcto. Pero no funciona –

Cuestiones relacionadas