我正在为Android 2.3制作自己的搜索视图。
我有。
LinearLayout
(水平)AutoCompleteTextView
ImageButton
我已将按钮和AutoCompleteTextView
添加到LinearLayout
。
我想将角半径放在我自己的控制范围内,如下图所示。
我将此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中运行它时,这是输出(模拟器和真实设备)
如果我也在Android 4.0中运行。它工作正常。
问题是,我的代码中有什么问题?或者Android 2.3中有哪些错误?
答案 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" />
同样适用于右侧按钮。希望这能解决您的问题