【问题标题】:Rounded Corners + background Color Dynamic setting for Android button?Android按钮的圆角+背景颜色动态设置?
【发布时间】:2014-09-25 11:53:48
【问题描述】:

我想在我的应用程序中为 Button 提供以下设置。您可以将其视为按钮的一些主题更改。

样式圆角或正常

颜色红色或黄色或蓝色或任何颜色代码

我知道使用 XML 中定义的 Shape,我可以实现圆角。使用setBackgroundColor,我可以将任何颜色设置为背景。

问题

setBackgroundColorsetBackground 都根据我调用它们的顺序相互覆盖。所以我无法在同一个按钮上实现这两种效果。我怎样才能同时实现这两种效果。如何从单个 Button 类获得多个按钮下方。提前致谢。

【问题讨论】:

    标签: android android-button android-theme android-styles


    【解决方案1】:

    我用GradientDrawable做到了

        int color = Color.rgb(255,0,0); //red for example
        int radius = 5; //radius will be 5px
        int strokeWidth = 2;
    
        GradientDrawable gradientDrawable = new GradientDrawable();
        gradientDrawable.setColor(color);
        gradientDrawable.setCornerRadius(radius);
        gradientDrawable.setStroke(strokeWidth, color);
        button.setBackground(gradientDrawable);
    

    【讨论】:

    • 当我尝试在我的 LinearLayout 上使用圆形背景并且还能够动态设置颜色时,这对我来说非常有效。
    【解决方案2】:

    您可以在可绘制资源中设置按钮的形状和背景颜色,并将其指定为 XML 中的 android:background 或代码中的 setBackgroundDrawable()

    以下是此类按钮的示例:

    /res/drawable/button.xml
    此文件用于设置圆角和背景颜色

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_focused="true">
            <shape android:shape="rectangle">
                <solid android:color="#ffffff" />
                <corners android:radius="16dp" />
                <stroke
                    android:width="3dp"
                    android:color="#ff0000" />
            </shape>
        </item>
    
        <item android:state_selected="true">
            <shape android:shape="rectangle">
                <solid android:color="#ffffff" />
                <corners android:radius="16dp" />
                <stroke
                    android:width="3dp"
                    android:color="#ff0000" />
            </shape>
        </item>
    
        <item android:state_pressed="true">
            <shape android:shape="rectangle">
                <solid android:color="#ff0000" />
                <corners android:radius="16dp" />
            </shape>
        </item>
    
        <item>
            <shape android:shape="rectangle">
            <solid android:color="#ffffff" />
            <corners android:radius="16dp" />
            <stroke
                android:width="3dp"
                android:color="#0000ff" />
        </shape>
        </item>
    
    </selector>
    

    /res/color/button.xml
    (这个文件是用来设置文字颜色的)

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_pressed="true" android:color="#0000ff" />
        <item android:state_focused="true" android:color="#0000ff" />
        <item android:state_selected="true" android:color="#0000ff" />
        <item android:color="#000000" />
    
    </selector>
    

    然后您可以将布局中的按钮初始化为:

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/button"
        android:background="@drawable/button"/>
    

    按钮如下所示(默认和按下状态从上到下):

    【讨论】:

    • 我想动态地实现这一点,这意味着一些方法可以动态更改按钮样式和颜色。无需为每种颜色定义多个 xml 形状。
    • 但是您仍然需要在代码中创建形状,或者在 xml 文件中定义它们并应用。你不是从任何地方挑选 Drawable
    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多