改变按钮背景有边界的

时间:2017-03-02 09:46:48

标签: android button background border

我创建了一个带边框的按钮:

{
  "max-concurrent-downloads": 1 
}

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

    <solid android:color="#FFFFFFFF" />

    <stroke
        android:width="1dp"
        android:color="#FFCCCCCC" />
</shape>

现在我以编程方式更改背景的颜色。问题是,一旦我更改背景,边框就会被删除。有没有办法改变按钮的背景颜色并保持边框?

5 个答案:

答案 0 :(得分:4)

试试这个,

    Button colorButton = (Button) findViewById(R.id.colorButton);
    GradientDrawable background = (GradientDrawable) colorButton.getBackground();
    background.setColor(getResources().getColor(R.color.some_color));

答案 1 :(得分:2)

使用以下代码

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

    <solid android:color="#FFFFFFFF" />

    <stroke
        android:width="1dp"
        android:color="#FFCCCCCC" />
 <gradient
        android:startColor="@color/white"
        android:centerColor="@color/white"
        android:endColor="@color/white"/>

</shape>

要动态更改颜色,请使用以下代码。

Drawable background = yourView.getBackground();
    if (background instanceof ShapeDrawable) {
        // cast to 'ShapeDrawable'
        ShapeDrawable shapeDrawable = (ShapeDrawable) background;
        shapeDrawable.getPaint().setColor(getResources().getColor(R.color.colorToSet));
    } else if (background instanceof GradientDrawable) {
        // cast to 'GradientDrawable'
        GradientDrawable gradientDrawable = (GradientDrawable) background;
        gradientDrawable.setColor(getResources().getColor(R.color.colorToSet));
    } else if (background instanceof ColorDrawable) {
        // alpha value may need to be set again after this call
        ColorDrawable colorDrawable = (ColorDrawable) background;
        colorDrawable.setColor(getResources().getColor(R.color.colorToSet));
    }

答案 2 :(得分:1)

从我的观点来看,无需创建cutom drawable只需添加任何布局将margin android:layout_margin="1dp"应用于您的按钮,android:background="#FF4081"为RelativeLayout.Now只需更改背景你的屁股。

 <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#FF4081"> 
            <Button
                android:id="@+id/colorButton"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_margin="1dp"
                android:background="@android:color/white"
                android:text="@null" />
        </RelativeLayout>

答案 3 :(得分:0)

在同一个可绘制的使用DrawableCompat类上应用新颜色。

DrawableCompat.setTintList(d,drawableTintColor); // d is drawable object and drawableTintColor is color you want to apply

答案 4 :(得分:-1)

也许您应该尝试获取背景drawable的引用然后应用一些颜色,就像我在下面发布的代码一样:

    GradientDrawable gradientDrawable = (GradientDrawable) colorButton.getBackground();
    gradientDrawable.setColorFilter(Color.parseColor("#FF0000"), PorterDuff.Mode.SRC);

其中#FF0000是您要显示的新颜色。 这样我觉得边框不会被删除。