14

我正在为 Android 2.3 创建自己的搜索视图。

我有。

  • LinearLayout(水平的)
  • AutoCompleteTextView
  • ImageButton

我添加了按钮AutoCompleteTextViewLinearLayout

我想在我自己的控件中放置一个角半径,如下图所示。

在此处输入图像描述

我将此可绘制对象设置为 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>

可绘制到 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>

但是当我在 android 2.3 中运行它时,这是输出(模拟器和真实设备)

在此处输入图像描述

如果我也在 Android 4.0 中运行。它工作正常。

在此处输入图像描述

问题是,我的代码有什么问题?还是Android 2.3 有bug?

4

2 回答 2

26

好的,这也是让我失望的交易。这有两件事。

在您的 ImageButton Selector 中,您似乎在每个角标记中复制了两次右角的属性。

第二个是直到 3.0 版的 android 中的一个错误。单独指定角时,左下角和右下角会翻转。

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

我已将值提取到维度并将它们放入两个不同的文件中,

res/values/corners.xml - 用相反的东西

res/values-v12/corners.xml - 其中包含合理的值。

于 2012-09-20T04:07:58.473 回答
1

android 的早期版本(早于 ICS 即 4.0)存在一个错误,它们错误地实现了“Shape”类的“corners”属性。因此,要在所有版本上获得正确类型的角,您必须编写一个检查目标版本的条件,因此您可以设置正确的背景。像这样的方法将解决您的问题-

/** * 使用 Shape 类的角元素处理 Pre ICS 版本中的错误 * */

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

同样对右侧按钮执行此操作。希望这能解决你的问题

于 2012-10-18T10:30:17.353 回答