13

Estoy haciendo mi propia vista de búsqueda para Android 2.3.Algo no funciona en Radio de esquina Android

Tengo.

  • LinearLayout (Horizontal)
  • AutoCompleteTextView
  • ImageButton

I añade el botón y AutoCompleteTextView a LinearLayout.

Quiero poner un radio de esquina en mi propio control como la imagen que se muestra a continuación.

enter image description here

he de poner esto dibujable a ImageButton

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_pressed="true" > 
    <shape> 
     <solid 
      android:color="#27AFE0" /> 
     <stroke 
      android:width="0.5dp" 
      android:color="#000000" /> 
     <corners 
      android:topRightRadius="10dp" android:bottomRightRadius="10dp" 
android:topLeftRadius="0.1dp" 
      android:bottomLeftRadius="0.1dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 
<item> 
    <shape> 
     <solid android:color="#D3DBDE"/> 
     <stroke 
      android:width="0.5dp" 
      android:color="#000000" /> 
     <corners 
      android:topRightRadius="10dp" android:bottomRightRadius="10dp" 
android:topLeftRadius="0.1dp" 
      android:bottomLeftRadius="0.1dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

dibujable a AutoCompleteText

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="#D3DBDE"/> 
     <stroke android:width="0.5dp" android:color="#000000"/> 
     <corners android:topLeftRadius="10dp" 
      android:bottomLeftRadius="10dp" 
      android:topRightRadius="0.1dp" 
      android:bottomRightRadius="0.1dp"/> 
    </shape> 
</item> 

Pero cuando corro esto en Android 2.3 y es la salida (emulador de dispositivos y real)

enter image description here

Si yo también corro en Android 4.0. Funciona bien.

enter image description here

La pregunta es, ¿qué hay de malo en mi código? O hay un error en Android 2.3?

+0

Las esquinas dibujables de ImageButton tienen topRightRadius y bottomRightRadius definidas dos veces. ¿Es eso un error tipográfico? ¿Y para qué sirve una fracción de dp? – Rajesh

+0

@Rajesh Sí, lo siento. Verá por qué utilicé 0.1dp en este enlace http://stackoverflow.com/questions/3056232/how-to-make-a-shape-with-left-top-round-rounded-corner-and-left-bottom -rounded-c –

Respuesta

26

Ok, así que aquí está el trato que también me marcó. Hay 2 cosas con esto.

En su ImageButton Selector, parecía copiar los atributos para las esquinas correctas dos veces en cada etiqueta de esquina.

El segundo es un error en Android hasta la versión 3.0. Al especificar las esquinas por separado, las esquinas inferiores izquierda y derecha se voltean.

http://code.google.com/p/android/issues/detail?id=9161

he extraído los valores a Dimens y ponerlos en dos archivos diferentes,

res/valores/corners.xml - con las cosas invertido

res/valores-v12 /corners.xml - con los valores en su sano juicio.

+0

¿Entonces desde 3.1 el problema está solucionado? –

+0

de la API 12 y está corregido. Whoops escribió la versión incorrecta. Pero sí –

+0

¿Esto lo solucionó? –

1

Hay un error en versiones anteriores (anteriores a ICS, es decir, 4.0) de Android, donde han implementado incorrectamente el atributo 'esquinas' de la clase 'Forma'. Por lo tanto, para obtener el tipo correcto de esquinas en todas las versiones, tendrá que escribir una condición que verifique la versión de destino y, en consecuencia, puede establecer el fondo correcto.Un método algo como esto va a resolver su problema -

/** * manejo del error en las versiones pre ICS con el elemento de la esquina de la clase Shape * */

private void getPreICSButtonBackground() { 
    if(Build.VERSION.SDK_INT >= 4.0){ 
     leftButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_rounded_left)); 
     rightButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_rounded_right)); 
    } 
} 

Donde en 'R.drawable. esquinas btn_rounded_left' se implementan como

<corners android:topLeftRadius="5dp" android:topRightRadius="0dp" 
    android:bottomLeftRadius="5dp" android:bottomRightRadius="0dp" /> 

y si se está ejecutando en versiones anteriores, a continuación, establecer el fondo con esquinas como

<corners android:topLeftRadius="5dp" android:topRightRadius="0dp" 
    android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp" /> 

Haga lo mismo para el botón del lado derecho. Espero que esto resuelva tu problema

Cuestiones relacionadas