Android 按下按钮时,按钮状态未按预期工作
我有一个“喜欢”按钮,用户可以点击它来“喜欢”一些东西(类似于Facebook) 我需要这样做,在用户喜欢某样东西之后,按钮的文本颜色将变为红色 这是我现在的代码:Android 按下按钮时,按钮状态未按预期工作,android,android-layout,android-button,Android,Android Layout,Android Button,我有一个“喜欢”按钮,用户可以点击它来“喜欢”一些东西(类似于Facebook) 我需要这样做,在用户喜欢某样东西之后,按钮的文本颜色将变为红色 这是我现在的代码: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="tr
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="@color/red" />
<item
android:color="@color/normal" />
</selector>
按钮:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Like"
android:textColor="@drawable/like_button" />
问题是,当我抬起手指时,文本颜色不会保持红色,只有当我将手指举过按钮时,文本颜色才会变为红色
我应该更改什么?为了“保存”一个“喜欢”的“状态”,您必须用一些布尔指示器更新按钮后面的数据模型/数据库,该指示器显示“是的,现在喜欢/不喜欢”
您的XML选择器只会说“按下此按钮时更改颜色,否则恢复”,它没有逻辑说“现在喜欢这个” 您只是为处于按下状态的按钮声明了一种状态。这就是为什么,只有当您按下按钮时,按钮才会变为红色。如果您想在按下按钮后使文本变为红色,则应在drawable中添加选择器,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color=""@color/red" android:state_selected="true"/>
<item android:color=""@color/red" android:state_pressed="true"/>
<item android:color="@color/normal" android:state_pressed="false"/>
<item android:color="@color/normal"/>
</selector>
这将选择该按钮,并将文本颜色更改为红色,如果已选择该按钮,则将其更改为正常。如果您只想在单击时保持按钮处于选中状态,只需在OnClickListener中添加此行即可
button.setSelected(true);
按下的状态是一种机制,让你知道按钮是否真的按下了。这类似于在虚拟键盘中真正单击一个键时发出一点声音的情况 因为我不知道你的情况,我想MVC模式可能适合你的情况 例如,在后端,有一个数据存储函数like=true或false 在视图中,有两个按钮:likeButton和unlikeButton。当liked==false时,likeButton可见,unlikeButton不可见。当liked==true时,likebutton不可见,unlikeButton可见 likeButton和unlikeButton的OnClick侦听器用于设置数据like=true或false likeButton和unlikeButton都可以按state_将按钮颜色更改为红色,让用户知道按钮已经按下并且正在按下。但是,无论如何,一旦按下按钮后释放按钮,onClick侦听器应该开始执行这些工作,最后已经按下的按钮应该不可见
希望此示例能够澄清。根据您具体使用的代码:
android:state_pressed="true"
这基本上意味着它只有在按下时才是红色的,因此您得到的结果
资料来源:
您需要在活动中包括(Java)
您需要在布局中包含(XML)
干杯。
让您的文字恢复正常color@user7455496通常,当点击onClickListner时,你可以改变按钮内文本的颜色。那怎么办?
android:state_pressed="true"
Button likeButton = (Button) findViewById(R.id.like_button);
likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(likeButton.isSelected())
likeButton.setSelected(false);
else
likeButton.setSelected(true);
}
});
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/red" android:state_selected="true"/>
<item android:color="@color/red" android:state_pressed="true"/>
<item android:color="@color/normal" android:state_pressed="false"/>
<item android:color="@color/normal"/>
</selector>
<Button
android:id="@+id/like_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/like"
android:layout_gravity="center"
android:text="@string/like" />