我基本上想做的是: 当我点击按钮时,我希望其文本颜色以不同的颜色显示。 我试过的是这个:
<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
上使用此选择器作为drawable但这并没有解决它,因为它只是在按下按钮时改变颜色。 我希望这样: 默认值:黑色 点击:蓝色 再次点击:黑色
任何想法如何做到这一点? :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,如果我对吗?)
所以,是的......有什么想法?
答案 0 :(得分:1)
你的textselector.xml -
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="@color/red" /> <!--selected text colour-->
<item
android:state_focused="true"
android:color="@color/red" />
<item
android:color="@color/blue" /> <!--unselected text colour-->
</selector>
layout.xml中的按钮 -
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exit"
android:textColor="@drawable/textselector" <!-- SET textselector HERE -->
android:background="@drawable/button_color"/>
答案 1 :(得分:1)
您可以使用此代码以编程方式执行此操作:
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
ColorStateList myList=myButton.getTextColors();
int myColor=myList.getDefaultColor();
switch(myColor)
{
case Color.BLACK:
myButton.setTextColor(Color.BLUE);
break;
case Color.BLUE:
myButton.setTextColor(Color.BLACK);
break;
}
}
});
答案 2 :(得分:1)
如果您想要这样的行为:
我不认为选择器是可能的,也不是关注状态。因为如果单击任何其他视图,该按钮将不再聚焦并且将松开文本颜色,返回默认值。您必须以编程方式执行此操作:
首先,将默认textColor设置为您想要的内容:在xml中设置黑色。所以没有按下你的颜色。制作一个全球变种来拯救国家:
private int BUTTON_STATE = 0;
private final int BUTTON_STATE_ONCE = 0;
private final int BUTTON_STATE_TWICE = 1;
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(BUTTON_STATE==BUTTON_STATE_ONCE){
button.setTextColor(Color.BLUE);
BUTTON_STATE = BUTTON_STATE_TWICE;
}else if(BUTTON_STATE==BUTTON_STATE_TWICE){
button.setTextColor(Color.BLACK);
BUTTON_STATE = BUTTON_STATE_ONCE;
}
}
});
这只是一种可能的解决方案,有很多方法..
代码:
像我在上面的例子中那样创建全局变量,并在if / else语句中使用它们:
likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(BUTTON_STATE==BUTTON_STATE_ONCE){
likeButton.setTextColor(getResources().getColor(R.color.pqBlue));
BUTTON_STATE = BUTTON_STATE_TWICE;
}else if(BUTTON_STATE==BUTTON_STATE_TWICE){
likeButton.setTextColor(getResources().getColor(R.color.pqBlack));
BUTTON_STATE = BUTTON_STATE_ONCE;
}
}
});
答案 3 :(得分:0)
尝试添加text_effect.xml drawable
<?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/white" /> <!-- pressed -->
<item android:color="@color/black" /> <!-- default -->
</selector>
在按钮控件中添加此行
android:textColor="@drawable/text_effect"
它会起作用。享受:)
答案 4 :(得分:0)
如果您没有强制要求一个简单的Button,您可以使用为二进制状态处理而设置的ToggleButton ...使用ToggleButton,您的选择器将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/red" />
<!-- Default State -->
<item android:color="#000" />
</selector>
答案 5 :(得分:0)
好像你想实现像切换按钮这样的东西。 而不是按钮你可以使用切换按钮。 虽然如果你只想使用按钮,那么你需要对你的java代码以及xml代码进行一些更改
创建一个文件 def_btn.xml 它看起来像这样..
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
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>
创建另一个文件 press_btn.xml ,它将如下所示..
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
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>
在你的活动中声明一个私有布尔变量(比如isPressed),默认情况下isPressed是false。 &安培;对于默认按钮背景将是def_btn.xml
现在在按钮的onClick事件中写下以下内容。
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isPressed = !isPressed;
if(isPressed){
btn.setBackgroundResource(R.drawable.def_btn);
}else{
btn.setBackgroundResource(R.drawable.press_btn);
}
}
});
那是......