Algo no funciona en Radio de esquina Android

Estoy haciendo mi propia vista de búsqueda para Android 2.3.

Yo tengo.

  • LinearLayout (Horizontal)
  • AutoCompleteTextView
  • ImageButton

He añadido 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.

Introduzca aquí la descripción de la imagen

Establecer 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 ejecuto esto en android 2.3 esta es la salida (emulador y dispositivo real)

Introduzca aquí la descripción de la imagen

Si funciono también en Android 4.0. Funciona bien.

Introduzca aquí la descripción de la imagen

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

Bueno, así que aquí está el trato esta ticked me también. Hay 2 cosas con esto.

En su Selector de ImageButton, parecía que copiar los atributos de las esquinas de la derecha 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 vuelcan.

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

He extraído los valores a dimens y ponerlos en dos archivos diferentes,

Res / values ​​/ corners.xml – con las cosas invertidas

Res / values-v12 / corners.xml – con los valores sanos en ellos.

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

/ ** * manejo del error en las versiones pre ICS con elemento de 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 las esquinas "R.drawable.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, ajuste el fondo con esquinas como

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

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

  • MediaButtonIntentReceiver no funciona en Android 4.0+
  • Android - html de android_assets en WebView, CSS no se carga en ICS
  • Buscando la configuración correcta de AVD para emular un Samsung Galaxy Nexus (usando android-4.x, ICS)
  • ¿Cómo puedo obtener la plataforma en Android 4.0 / Ice Cream Sandwich?
  • Soporte Bluetooth Smart (4.0) / GATT en Android 4.0?
  • Intent.ACTION_USER_PRESENT no recibido en dispositivos HoneyComb o ICS (Samsung)
  • Android TextView NullPointerException con onTouchListener y onClickListener en 4.0
  • Fácil manera de ocultar la barra del sistema en Android ICS
  • Fragmento onCreateView y onActivityCreated llamado dos veces
  • No se puede recibir emisión en ICS
  • ¿Cómo puedo forzar la barra de acción a estar en la parte inferior de ICS?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.