Android如何以编程方式设置Button笔划和半径

时间:2016-01-03 16:54:23

标签: android button styles

我有48 Button的此活动,用户可以触摸并更改文字和背景颜色。

我已经像这样编辑了默认Buttons的样式 enter image description here

但是当用户更改背景颜色时,我有这个不好的结果

enter image description here

这些是为dafault Buttons

设计样式的xmls

buttons.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/button_pressed"
        android:state_pressed="true" />

    <item android:drawable="@drawable/button_focused"
        android:state_focused="true" />

    <item android:drawable="@drawable/button_default" />

</selector>

button_default.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <corners
        android:radius="100dp"
        />
    <solid
        android:color="#FFFFFF"
        />
    <padding
        android:left="0dp"
        android:top="0dp"
        android:right="0dp"
        android:bottom="0dp"
        />
    <stroke
        android:width="3dp"
        android:color="#787878"
        />
</shape>

在另一个xml中只改变颜色,所以我避免发布它们。 以下是以编程方式更改Button的代码。 我从DB开始使用Button保存所有已更改的ID并设置Button的颜色。

   //Get all materie inside database
    List<Materia> materia = db.getAllMaterie();
    //change all TextView inputed from user
    if(materia.isEmpty()){
        //do nothing
    }else {
        for (Materia mat : materia) {
            //Change all the Button with values stored inside the database
            int resId = getResources().getIdentifier(mat.getID(), "id", getPackageName());
            final Button changedButton = (Button) findViewById(resId);
            changedButton.setText(mat.getMateria());
            changedButton.setTypeface(null, Typeface.BOLD);
            changedButton.setBackgroundColor(mat.getColor());

        }
    }

但我失去了半径和中风属性。 有一些方法可以通过编程方式设置它们吗? 接受其他建议!

2 个答案:

答案 0 :(得分:0)

要实现这一点,您应该以编程方式设置drawable。

Drawable buttonDrawable = context.getResources().getDrawable(R.drawable.buttons.xml);
buttonDrawable.mutate()
changedButton.setBackgroundDrawable(buttonDrawable);

答案 1 :(得分:0)

我用这行代码解决了这个问题

changedButton.getBackground().setColorFilter(mat.getColor(), PorterDuff.Mode.MULTIPLY);

而不是

changedButton.setBackgroundColor(mat.getColor());

我使用Button取回默认getBackground()的背景,然后用setColorFilter(int, mode);

设置颜色

结果变成

//Get all materie inside database
    List<Materia> materia = db.getAllMaterie();
    //change all TextView inputed from user
    if(materia.isEmpty()){
        //do nothing
    }else {
        for (Materia mat : materia) {
            //Change all the Button with values stored inside the database
            int resId = getResources().getIdentifier(mat.getID(), "id", getPackageName());
            final Button changedButton = (Button) findViewById(resId);
            changedButton.setText(mat.getMateria());
            changedButton.setTypeface(null, Typeface.BOLD);
            changedButton.getBackground().setColorFilter(mat.getColor(), PorterDuff.Mode.MULTIPLY);

        }
    }