java - 如何设置Android Button点击效果,使用不同的颜色主题
问题描述
我没有太多经验,两周前才开始研究 Android 应用程序。如果代码或其方法看起来很乱,请提前道歉。
我当前的应用程序使用 2 个颜色主题:深色主题和浅色主题。它们是在styles.xml
.
我所有的Buttons
并从我声明颜色的文件夹中TextViews
获取颜色。在我初始化这些颜色。并在我设置哪种颜色属于哪个主题。background
attr
colors.xml
styles.xml
现在,回到提供按钮单击效果 - 我知道如何做到这一点的唯一方法是将其添加为android:background
. 但我已经设置了background
我自己的配色方案,创建于attr
. 问题是 - 如何为按钮设置效果,同时保持当前切换颜色主题的颜色(主题可以用 更改ToggleButton
)。
样式.xml
<resources>
<!-- Light theme. -->
<style name="LightTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:textSize">30sp</item>
<item name="colorPrimary">@color/colorBtnOperatorsTextLightTheme</item>
<item name="colorPrimaryDark">#306E32</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="colorBtnOperatorsText">@color/colorBtnOperatorsTextLightTheme</item>
<item name="colorBtnNumbersText">@color/colorBtnNumbersTextLightTheme</item>
<item name="colorBtnBackground">@color/colorBtnBackgroundLightTheme</item>
<item name="colorOutputText">@color/colorOutputLightTheme </item>
<item name="colorInputText">@color/colorInputLightTheme</item>
<item name="colorAppBackground">@color/colorAppBackgroundLightTheme</item>
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>
<!-- Dark theme. -->
<style name="DarkTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:textSize">30sp</item>
<item name="colorPrimary">#000000</item>
<item name="colorPrimaryDark">#000000</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="colorBtnOperatorsText">@color/colorBtnOperatorsTextDarkTheme</item>
<item name="colorBtnNumbersText">@color/colorBtnNumbersTextDarkTheme</item>
<item name="colorBtnBackground">@color/colorBtnBackgroundDarkTheme</item>
<item name="colorOutputText">@color/colorOutputDarkTheme</item>
<item name="colorInputText">@color/colorInputDarkTheme</item>
<item name="colorAppBackground">@color/colorAppBackgroundDarkTheme</item>
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>
<style name="WindowAnimationTransition">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
</resources>
这就是其中一个按钮在其中activity_main.xml
和旁边的样子 - 主题换色器 -ToggleButton
<Button
android:id="@+id/seven"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_margin="5dp"
android:layout_weight="1"
android:text="7"
android:textColor="?attr/colorBtnNumbersText"
android:background="?attr/colorBtnBackground"
android:onClick="buttonClick"/>
<ToggleButton
android:id="@+id/colorToggle"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_margin="5dp"
android:layout_weight="1"
android:minWidth="0dp"
android:minHeight="0dp"
android:background="@drawable/toggle_selector"
android:textOff=""
android:textOn="" />
attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ds" >
<attr name="colorBtnOperatorsText" format="color" />
<attr name="colorBtnNumbersText" format="color" />
<attr name="colorBtnBackground" format="color" />
<attr name="colorOutputText" format="color" />
<attr name="colorInputText" format="color" />
<attr name="colorAppBackground" format="color" />
</declare-styleable>
</resources>
解决方案
您可以添加包含选择器标签的可绘制资源文件。通过标签可以添加点击效果。在选择器标签中,您可以添加具有 android:state_enabled="false" 属性的第一个项目标签,表示选中状态,第二个项目标签将是您的按钮的默认状态。请参阅示例。在您的示例中使用可绘制对象作为背景。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@drawable/selected" />
<item android:drawable="@drawable/default" />
</selector>
创建两个已选中和默认的可绘制对象,它们将包括形状标签,您可以在可绘制文件夹中设计按钮以实现选定和默认状态单击效果。举一个例子:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="@color/gray"/>
<corners
android:radius="@dimen/_10sdp"/>
</shape>
推荐阅读
- machine-learning - 将图像作为输入而不是潜在向量的 GAN 是什么?
- mysql - 当我删除一行时,ID号也会删除
- c# - 下面单向加密的解密方法
- r - 获取执行程序目录
- karate - 空手道:在可重用功能文件夹中的 js 文件未找到文件错误,并且此功能是从另一个功能调用的
- java - 如何从java arraylist中删除用户定义的对象
- react-native - 使用 panResponder 时如何在平面列表中拖放单个项目?
- reactjs - 如何在 React devtool 中查看和更新 hooks 状态值?
- apache-spark - Spark结构化流中嵌套json对象的列数据
- c# - C#如何将本地日期转换为UTC时间00:00:00和23:59:59?