如何以编程方式更改选择器内部形状的颜色?

时间:2017-02-21 16:11:59

标签: java android android-layout xml-drawable rippledrawable

这是针对api< 21

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

<item android:state_pressed="true">

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

        <size
            android:width="60dp"
            android:height="60dp" />

        <solid android:color="#007fa9" />

    </shape>
</item>

<item android:id="@+id/shape_id" >
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">

        <size
            android:width="60dp"
            android:height="60dp"
            />

        <solid android:color="#007fa9" />
    </shape>
</item>

</selector>

如你所见,我有一个内部状态和形状的选择器,如何以编程方式更改形状的纯色?我将它设置为相对布局的背景,所以它的行为类似于按下时改变颜色的按钮,或者可能有一种以编程方式创建形状的方法,如果是这样的话?

对于api 21及以上

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#007fa9">

<item android:id="@android:id/mask">

    <shape android:shape="oval">

        <solid android:color="#007fa9" />

    </shape>

</item>

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

        <size
            android:width="60dp"
            android:height="60dp" />

        <solid android:color="#007fa9" />

    </shape>

</item>

</ripple>

你是如何为这个做的?

1 个答案:

答案 0 :(得分:0)

试试这个:

为您的Drawable选择器指定一个ID:

<item  android:id="@+id/shape_id">

然后在代码中:

LayerDrawable shape = (LayerDrawable) ContextCompat.getDrawable(YourActivity.this,R.drawable.shape_id); //get the ID
shape.setColor(Color.Black); // change color