Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按下按钮时,按钮状态未按预期工作_Android_Android Layout_Android Button - Fatal编程技术网

Android 按下按钮时,按钮状态未按预期工作

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

我有一个“喜欢”按钮,用户可以点击它来“喜欢”一些东西(类似于Facebook)

我需要这样做,在用户喜欢某样东西之后,按钮的文本颜色将变为红色

这是我现在的代码:

<?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" />