我试图改变点击后的按钮的风格。
我的计划:当用户点击按钮时,它会改变背景颜色(橙子->白色),边框(无->橙色边框),文本颜色(白色->绿色)。
但是当我用可绘制的形状(如here所示的边框)时,它将背景颜色更改为橙子(笔触颜色)而不是白色(正如我在形状中为实心和buttonPressed.setBackgroundColor
函数中为pressSemButton
方法所写的那样)。
如果我不使用带边框的可绘制形状,它可以工作,背景颜色变为白色。
我的改变按钮样式的函数:
public void pressSemButton(Button buttonPressed, Button button) {
buttonPressed.setBackground(getResources().getDrawable(R.drawable.orange_white_border));
buttonPressed.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.white));
buttonPressed.setTextColor(getResources().getColor(R.color.green_dark));
}
橙子_白色_border的XML:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/white" />
<corners android:radius="30dp"/>
<stroke android:width="2dp" android:color="@color/orange_light"/>
</shape>
片段XML中按钮的XML代码:
<Button
android:id="@+id/firstSemesterButton"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text= "@string/buttonFirstSem"
app:layout_constraintStart_toStartOf="parent"
android:layout_weight="1"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
/>
我可以做什么来改变按钮的背景颜色为白色,并实现橙子_white_border的边框?
1条答案
按热度按时间ecr0jaav1#
你尝试实现的方式有点过时了。Material Design Library引入了许多新的库和功能。我将描述一步一步如何实现有一个按钮,在你的问题。
1.创建颜色资源文件夹
在Android Studio中,在【项目】面板中,右键单击【res】文件夹,然后选择【新建】-【Android资源目录】。在弹出的窗口中,选择资源类型的颜色。res文件夹下将创建color目录。
2.在颜色资源中添加所需颜色
现在我们需要在颜色资源文件中定义颜色,如下所示:
3.创建颜色选择器资源
右键单击第一步中添加的color文件夹,选择new->Color Resource File。确保根元素为
selector
。将新文件命名为bg_selector,因为它将控制背景颜色。重复此步骤,再创建2个文件,分别命名为stroke_selector和text_selector。
这里我将列出3个文件的内容:
1.bg_selector.xml
1.stroke_selector.xml
1.text_selector
这些选择器是由Android自动管理的,所以当检测到按钮按下时,您不需要设置任何内容,因为我们使用了
android:state_pressed="true"
。使用此属性定义的颜色仅在按钮处于按下状态时显示。对于其余的状态,系统将显示第二项的颜色。4.在xml中配置按钮。
现在让我们看看我们的按钮在xml中应该是什么样子。
尽管按钮的默认样式是Material,但如果像
cornerRadius
和strokeColor
这样的属性没有出现,请确保将按钮的样式设置为@style/Widget.MaterialComponents.Button
,以便使用这些属性。最后,您应该会得到以下结果:
对于正常状态x1c 0d1x
对于按压状态
如你所愿!