【发布时间】:2015-04-17 22:50:44
【问题描述】:
我基本上想做的是: 当我点击按钮时,我希望它的文本颜色以不同的颜色出现。 我尝试的是这样的:
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="@color/red" />
<item
android:state_pressed="false"
android:color="#000" />
</selector>
然后我确实将此选择器用作按钮 android:textColor 上的可绘制对象
但这并没有解决它,因为它只会在我按下按钮时改变它的颜色。 我想要这样: 默认:黑色 点击:蓝色 再次点击:黑色
任何想法如何做到这一点? :S
这是我的按钮形状(如果重要的话):
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="-1dp"
android:insetLeft="-1dp"
android:insetRight="-1dp">
<selector>
<item android:state_pressed="false">
<shape android:shape="rectangle" >
<corners
android:radius="0dp"
/>
<solid
android:color="@color/background_grey"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="100dp"
android:height="30dp"
/>
<stroke
android:width="1dp"
android:color="#ffb4b4b4"
/>
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle" >
<corners
android:radius="0dp"
/>
<solid
android:color="@color/pq_blue"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="100dp"
android:height="30dp"
/>
<stroke
android:width="1dp"
android:color="#ffb4b4b4"
/>
</shape>
</item>
</selector>
</inset>
提前谢谢
编辑
所以我尝试以编程方式执行此操作并将以下内容绑定只是为了查看它是否会改变颜色 ..但是是的..它没有(似乎我的 onCLick 事件不起作用):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.listview_item, container, false);
final Button likeButton = (Button)rootView.findViewById(R.id.btLike);
likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String test = "tester";
if(BUTTON_STATE==BUTTON_STATE_ONCE){
likeButton.setTextColor(getResources().getColor(R.color.pq_blue));
BUTTON_STATE = BUTTON_STATE_TWICE;
}else{
likeButton.setTextColor(getResources().getColor(R.color.red));
BUTTON_STATE = BUTTON_STATE_ONCE;
}
}
});
return rootView;
}
}
注意:我在 onCreateView 中做了所有事情,因为我在我的 ActionBarActivity 的片段中(带标签)如果我在 onCreate 中执行它,我在 findViewById 处得到一个空指针异常(因为它在我的 mainActivity 中搜索 ID,如果我是对的?)
所以是的..有什么想法吗?
【问题讨论】:
-
如果您想要这样的行为,您必须以编程方式进行。选择器无法获得第二次或第三次点击的状态
-
您不想以编程方式进行操作吗?
-
这是否是您的解决方案?我想你被误解了,也许我误解了你,但你的目标是:默认:黑色,然后第一次点击:蓝色,然后第二次点击:黑色。不是吗?
-
好的,谢谢...所以我真的需要以编程方式进行。有没有一种通用/简单的方法来做到这一点?或者只是用 onClickListener 处理它,在那里改变颜色并设置一些状态/标志,这样它就知道它改变了颜色。然后让 If(state) 颜色变回正常?
标签: android