我已将按钮设为透明,因此我希望按下按钮时按钮文本颜色会发生变化。是否可以仅使用xml文件执行此操作?
答案 0 :(得分:38)
是的,你可以这样做:
布局/ main_layout.xml:
.....
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="bonjour !"
android:textColor="@color/button_text_color"
/>
.....
颜色/ button_text_color.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#c0c0c0" android:state_pressed="true"/>
<item android:color="#ffffff"/>
</selector>
答案 1 :(得分:9)
请参阅此文档中的州列表部分... Drawable Resources。
您可以定义两个不同的Button
xml文件,一个用于透明的“默认”状态,另一个用“红色”按钮定义为“已按下”状态。然后定义一个selector
,用于切换不同状态的可绘制资源。
编辑:根据devunwired的评论,颜色状态列表资源可能更适合仅改变颜色而不是可绘制本身。
答案 2 :(得分:4)
我喜欢Konstantin Burov在另一个问题上提出的解决方案:Android customized button; changing text color
您实际上可以管理的状态多于按下和正常状态。但它应该解决问题。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Focused and not pressed -->
<item android:state_focused="true"
android:state_pressed="false"
android:color="#ffffff" />
<!-- Focused and pressed -->
<item android:state_focused="true"
android:state_pressed="true"
android:color="#000000" />
<!-- Unfocused and pressed -->
<item android:state_focused="false"
android:state_pressed="true"
android:color="#000000" />
<!-- Default color -->
<item android:color="#ffffff" />
</selector>
然后你可以使用你的按钮中的drawable改变文本颜色属性,如下所示。请注意,下面示例中的选择器名为&#34; button_text_color&#34;
机器人:文字颜色=&#34; @可绘制/ button_text_color&#34;
使用相同的drawable方法,您还可以解决按钮的背景颜色。只记得在选择器而不是使用&#34; android:color&#34;属性你需要使用&#34; android:drawable&#34;属性如下。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Focused and not pressed -->
<item android:state_focused="true"
android:state_pressed="false"
android:drawable="#ffffff" />
<!-- Focused and pressed -->
<item android:state_focused="true"
android:state_pressed="true"
android:drawable="#000000" />
<!-- Unfocused and pressed -->
<item android:state_focused="false"
android:state_pressed="true"
android:drawable="#000000" />
<!-- Default color -->
<item android:drawable="#ffffff" />
</selector>
然后在按钮本身中,注意这次选择器名称是&#34; button_background&#34;
机器人:背景=&#34; @可绘制/ button_background&#34;
答案 3 :(得分:1)
您必须在代码中执行此操作。试试这个:
mBtn = ((Button) findViewById( R.id.button1 ));
mBtn.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
mBtn.setTextColor( Color.RED );
}
});
宣告:
private Button mBtn;
答案 4 :(得分:1)