Подтвердить что ты не робот

Что-то не так в радиусе Corner Android

Я создаю собственное окно поиска для Android 2.3.

У меня есть.

  • LinearLayout (Горизонтально)
  • AutoCompleteTextView
  • ImageButton

Я добавил кнопку и AutoCompleteTextView в LinearLayout.

Я хочу поставить радиус угла в свой собственный элемент управления, как показано на рисунке ниже.

enter image description here

Я устанавливаю его для 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>

доступно для автозаполнения

<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>

Но когда я запускаю это в android 2.3, это будет выход (Emulator и Real Device)

enter image description here

Если я запускаю также в Android 4.0. Он отлично работает.

enter image description here

Вопрос в том, что неправильно в моем коде? Или там ошибка в Android 2.3?

4b9b3361

Ответ 1

Хорошо, так вот, это дело, это тоже меня укусило. Есть 2 вещи с этим.

В вашем ImageButton Selector вы, похоже, дважды скопировали атрибуты для правильных углов в каждом угловом теге.

Вторая ошибка в андроиде до версии 3.0. При указании углов раздельно, левый и правый углы поворачиваются.

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

Я извлек значения из разрядов и поместил их в два разных файла,

res/values ​​/corners.xml - с измененным файлом

res/values-v12/corners.xml - со значениями в них.

Ответ 2

В ранних версиях (ранее ICS i.e. 4.0) в Android появилась ошибка, где они неправильно реализовали атрибут "углы" класса "Shape". Итак, чтобы получить правильные углы во всех версиях, вам нужно будет написать условие, которое проверяет целевую версию и, соответственно, вы можете установить правильный фон. Метод, подобный этому, решит вашу проблему -

/**    * обработка ошибки в версиях Pre ICS с угловым элементом класса 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));
    }
}

Где в 'R.drawable.btn_rounded_left' углы реализованы как

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

и если он работает в более ранних версиях, то установите фон с углами как

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

Аналогично сделайте для правой кнопки. Надеюсь, что это решает вашу проблему.