首页 > 解决方案 > 如何设置Android Button点击效果,使用不同的颜色主题

问题描述

我没有太多经验,两周前才开始研究 Android 应用程序。如果代码或其方法看起来很乱,请提前道歉。

我当前的应用程序使用 2 个颜色主题:深色主题和浅色主题。它们是在styles.xml.

我所有的Buttons并从我声明颜色的文件夹中TextViews获取颜色。在我初始化这些颜色。并在我设置哪种颜色属于哪个主题。backgroundattrcolors.xmlstyles.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>

标签: javaandroid

解决方案


您可以添加包含选择器标签的可绘制资源文件。通过标签可以添加点击效果。在选择器标签中,您可以添加具有 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>

推荐阅读