<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true" />
<AutoCompleteTextView
android:id="@+id/autoComplete"
android:layout_width="fill_parent"
android:layout_height="48dp"
android:background="@drawable/black_rounded_borders" />
</RelativeLayout>
我添加了无用的LinearLayout只是为了避免初始关注 “活动”启动时的AutoCompleteTextView
抽拉/ black_rounded_borders.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#FFFFFFFF" />
<stroke
android:width="2dp"
android:color="@color/selector_black_border" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
颜色/ selector_black_border.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="#FF269ff5"/>
<item android:state_pressed="true" android:color="#FF269ff5"/>
<item android:state_selected="true" android:color="#FF269ff5"/>
<item android:state_focused="false" android:color="#FF000000"/>
<item android:state_pressed="false" android:color="#FF000000"/>
<item android:state_selected="false" android:color="#FF000000"/>
</selector>
活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
autoComplete = (AutoCompleteTextView) findViewById(R.id.autoComplete);
Log.d("hasFocus", autoComplete.hasFocus() + "");
Log.d("isSelected", autoComplete.isSelected() + "");
Log.d("isPressed", autoComplete.isPressed() + "");
//All the above are false
}
虽然所有与蓝色(#FF269ff5)颜色相关的状态都是假的。一世 仍然得到蓝色的边框。如果我改变顺序 在 color / selector_black_border.xml 文件中的状态,就像所有false一样 首先,然后是真实,然后我得到黑色边框。它只喜欢 第一种颜色。
我缺少什么?
谢谢。
答案 0 :(得分:2)
我不能把它放到评论中,因为它太大了,但我找到了对这个here的解释,其中说明:
ColorStateList
无法作为<solid>
的属性在XML定义中传递,或者实际上是<shape>
的任何属性。此属性作为Color资源从XML中膨胀出来,然后传递给Drawable的setColor()
方法,该方法只需要一个ARGB值。
只有一种类型的Drawable实例可以根据状态包含和显示多个项目,这是StateListDrawable
,这是您在膨胀<selector>
时获得的内容。所有其他Drawable实例仅仅是该集合的成员或独立绘制的。
另请注意,虚增的<shape>
项目实际上是GradientDrawable
,而不是ShapeDrawable
。如果您查看inflate()
in the source的GradientDrawable
方法,则可以获得有关如何使用每个属性的所有详细信息。
积分转到@Devunwired。
但是,基于此,您可以创建不同的形状(每次都是一个矩形),在每个形状中都有以下属性。使用drawable/black_rounded_borders.xml
中的以下代码,看看它是否按预期工作:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true">
<shape android:shape="rectangle" >
<solid android:color="#FFFFFFFF" />
<stroke
android:width="2dp"
android:color="#FF269ff5" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
</item>
<item android:state_focused="true">
<shape android:shape="rectangle" >
<solid android:color="#FFFFFFFF" />
<stroke
android:width="2dp"
android:color="#FF269ff5" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
</item>
<item android:state_selected="true">
<shape android:shape="rectangle" >
<solid android:color="#FFFFFFFF" />
<stroke
android:width="2dp"
android:color="#FF269ff5" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<solid android:color="#FFFFFFFF" />
<stroke
android:width="1dp"
android:color="#FF000000" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
</item>
</selector>
</item>
</layer-list>
很抱歉这篇长篇文章以及我不知道它是否有效的事实,但我找不到另一种发布方式。