角半径Android出了点问题

时间:2012-09-20 03:18:30

标签: android android-layout android-4.0-ice-cream-sandwich android-2.3-gingerbread cornerradius

我正在为Android 2.3制作自己的搜索视图。

我有。

  • LinearLayout(水平)
  • AutoCompleteTextView
  • ImageButton

我已将按钮和AutoCompleteTextView添加到LinearLayout

我想将角半径放在我自己的控制范围内,如下图所示。

enter image description here

我将此drawable设置为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中运行它时,这是输出(模拟器和真实设备)

enter image description here

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

enter image description here

问题是,我的代码中有什么问题?或者Android 2.3中有哪些错误?

2 个答案:

答案 0 :(得分:26)

好的,所以这里的交易也让我感到满意。这有两件事。

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

第二个是android直到3.0版本的bug。分别指定角落时,左下角和右下角会翻转。

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

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

res / values / corners.xml - 反转的东西

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

答案 1 :(得分:1)

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

/ **      *使用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" />

同样适用于右侧按钮。希望这能解决您的问题