我的按钮很少。 我想在按下按钮时更改按钮的颜色。 并将其他按钮的颜色更改为正常状态。
问题是在简单地改变按钮的背景后, 它的形状也发生了变化。更改颜色后默认android 带阴影的按钮 只是用带有更多按钮高度的彩绘矩形代替。 是。可以将普通按钮和按下位置的按钮定义为可绘制的XML。 但我想使用默认的android按钮而不是花哨的。
我的代码如下:
buttonAny.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
buttonAny.setBackgroundColor(COLOR_BUTTON_SELECTED);
buttonMale.setBackgroundColor(COLOR_BUTTON_GRAY);
buttonFemale.setBackgroundColor(COLOR_BUTTON_GRAY);
}
});
buttonMale.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
buttonAny.setBackgroundColor(COLOR_BUTTON_GRAY);
buttonMale.setBackgroundColor(COLOR_BUTTON_SELECTED);
buttonFemale.setBackgroundColor(COLOR_BUTTON_GRAY);
}
});
XML:
<Button
android:id="@+id/buttonGenderAny"
android:layout_marginLeft="@dimen/dim1"
android:layout_marginRight="@dimen/dim1"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:text='Any'
android:textColor="@color/text1"
android:textAppearance="?android:attr/textAppearanceSmall" />
<Button
android:id="@+id/buttonGenderMale"
android:layout_marginLeft="@dimen/dim1"
android:layout_marginRight="@dimen/dim1"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:text='Male'
android:textColor="@color/text1"
android:textAppearance="?android:attr/textAppearanceSmall" />
启动后我的应用程序如下所示 pic1 (抱歉,我无权发布图片)
按下按钮后,如下所示: pic2
很奇怪,按钮的大小已经改变了。
谷歌有很多类似的问题。 但似乎他们不适合我。 例如this link。 但是没有写出如何在drawable中定义普通按钮或按下按钮。
因此。更改(切换)几个按钮的颜色的最佳方法是什么。 谢谢!
答案 0 :(得分:0)
您需要做的就是在drawable文件夹中创建一个xml文件,该文件夹将根据按下或未按下的状态设置按钮的背景颜色。 例如,创建一个文件并将其命名为button_background.xml并将其放在drawable文件夹中。在文件中放入以下内容
<item android:state_pressed="true" >
<shape android:shape="rectangle">
<solid android:color="#449def" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#2f6699" />
</item>
然后在你的按钮背景属性
中<Button
android:background="@drawable/button_background"/>
您可以根据自己的喜好编辑button_background文件中的颜色。
答案 1 :(得分:0)
在您的drawable资源下创建一个新的xml文件,其中包含您要应用于按钮的属性...例如......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" >
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="#c53e2b" />
<gradient android:angle="-90" android:startColor="#a11005" android:endColor="#d62608" />
</shape>
</item>
<item android:state_focused="true">
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="#c53e2b" />
<solid android:color="#e0341e"/>
</shape>
</item>
<item >
<shape android:shape="rectangle" >
<corners android:radius="3dip" />
<stroke android:width="1dip" android:color="#c53e2b" />
<gradient android:angle="-90" android:startColor="#ff6c52" android:endColor="#e0341e" />
</shape>
</item>
</selector>
然后在点击监听器aplyy就像这样......
buttonMale.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
buttonAny.setBackgroundResource(R.drawable.YOUR_XML_NAME);
buttonMale.setBackgroundResource(R.drawable.YOUR_XML_NAME);
buttonFemale.setBackgroundResource(R.drawable.YOUR_XML_NAME);
}
});
答案 2 :(得分:0)
是的,请勿尝试更改onClick
事件中的按钮颜色。
您要找的是StateListDrawable
。例如,查看Android平台如何定义可绘制的btn_default_holo_light。您将需要完全遵循此模式,为不同的状态提供您自己的drawable(例如PNG图像)。
一旦你创建了这些drawable,你只需在你的布局文件中引用它就像这样
<Button
...
android:background="@drawable/my_fancy_button_background" />
答案 3 :(得分:0)
不要尝试更改代码中的颜色,只需对所有按钮使用selector
作为每个按钮的background
属性。
选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"><color android:color="@color/button_background_pressed" />
</item>
<item android:state_pressed="true"><color android:color="@color/button_background_pressed" />
</item>
<item><color android:color="@color/button_background" />
</item>
</selector>
修改强>
您可以在selector
文件夹中使用上述XML创建drawable
,并将其用作background
"@drawable/selector_button"
编辑2:
而不是像这样使用它:
<Button
android:id="@+id/buttonGenderMale"
android:layout_marginLeft="@dimen/dim1"
android:layout_marginRight="@dimen/dim1"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:text='Male'
android:textColor="@color/text1"
android:textAppearance="?android:attr/textAppearanceSmall" />
像这样使用:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:orientation="vertical" >
<View
android:layout_width="match_parent"
android:layout_height="1dip" />
<Button
android:id="@+id/buttonGenderMale"
android:layout_marginLeft="@dimen/dim1"
android:layout_marginRight="@dimen/dim1"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text='Male'
android:textColor="@color/text1"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
根据按钮之间的距离调整View
!
答案 4 :(得分:0)
你可以这样做,创建一个xml文件int project&res / drawable,例如:&#34; buttonGenderAny_bg.xml&#34;:
<?xml version="1.0" encoding="utf-8"?>
<item android:drawable="COLOR_BUTTON_SELECTED" android:state_pressed="true"/>
<item android:drawable="COLOR_BUTTON_SELECTED" android:state_focused="true"/>
<item android:drawable="COLOR_BUTTON_SELECTED" android:state_selected="true"/>
<item android:drawable="COLOR_BUTTON_GRAY"/>
然后在布局xml文件中设置按钮的背景,例如:
<Button
android:id="@+id/buttonGenderMale"
android:layout_marginLeft="@dimen/dim1"
android:layout_marginRight="@dimen/dim1"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:text='Male'
android:textColor="@color/text1"
android:textAppearance="?android:attr/textAppearanceSmall"
android:background="@drawable/buttonGenderAny_bg"/>
答案 5 :(得分:0)
实际上几个月前我也用按钮做过这样的事情,但是我不推荐它。我认为根据您的情况,使用单选按钮要简单得多。
This就是它的样子!
使用RadioGroup方法的优点是您不必管理&#34;按钮的颜色状态&#34;
要设置以下3或4个文件是必需的(这是我的 EXACT 用法,但我还提供了一些关于如何获得它的提示,如下所示):
布局:
<RadioGroup
android:id="@+id/sortOptionsBar"
style="?android:attr/buttonBarStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:checkedButton="@+id/rbSortOption1"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/rbSortOption1"
style="@style/menu_buttons"
android:text="@string/sort_option1" />
<RadioButton
android:id="@+id/rbSortOption2"
style="@style/menu_buttons"
android:text="@string/sort_option2" />
<RadioButton
android:id="@+id/rbSortOption3"
style="@style/menu_buttons"
android:text="@string/sort_option3" />
</RadioGroup>
提示:上面我希望我看起来像一个酒吧,因为你切换了android:orientation =&#34;水平&#34;垂直。
values \ style.xml(将单选按钮的所有样式汇集在一起)
<style name="menu_buttons" parent="@android:style/Widget.Holo.Button.Borderless">
<item name="android:textColor">@color/menu_button_text</item>
<item name="android:background">@color/menu_button_background</item>
<item name="android:button">@android:color/transparent</item>
<item name="android:layout_weight">1.0</item>
</style>
重要的是要注意上面的android:按钮,这会隐藏radiobutton的复选框 您还可以删除我在我的栏中使用的android:layout_weight,以便所有单选按钮的宽度相等。 父=&#34; @android:style / Widget.Holo.Button.Borderless&#34;将允许您保持按钮大小相同。
颜色\ menu_button_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/menu_button_unselected" />
<item android:state_pressed="true" android:drawable="@drawable/menu_button_selected" />
<item android:state_checked="true" android:drawable="@drawable/menu_button_selected" />
<item android:drawable="@drawable/menu_button_unselected" />
</selector>
@ color / menu_button_text也可以这样做。 (例如,您可以在选择文本时反转文本的颜色)
然后知道在onCheckedChanged事件中选择了哪一个我做了这个。
int id = sortBar.getCheckedRadioButtonId();
switch (id) {
case R.id.rbSortOption1:
break;
case R.id.rbSortOption2:
break;
case R.id.rbSortOption3:
break;
}