从源更改背景颜色/可绘制

时间:2016-10-27 05:49:12

标签: android android-shape android-shapedrawable

我有很多使用形状drawables 的背景颜色的XML,如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:background="@drawable/background"
/>

我的形状背景xml是:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient 
        android:type="linear"
        android:startColor="#FFffffff"
        android:endColor="#FFE8E8E8"
        android:angle="315" />    
</shape>

现在我想添加一个功能,我可以为用户提供更改背景颜色的选项。是否有一种快速的方法可以根据某些值更改源形状drawable,而不是转到加载xml的每个活动并更改它?

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以为具有不同名称的用户创建列表或按钮。根据单击的按钮,您可以以编程方式更改布局背景。 例如:

 @Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.drawable1Button:
             final int sdk = android.os.Build.VERSION.SDK_INT;
             if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
             layout.setBackgroundDrawable( getResources().getDrawable(R.drawable.drawable1) );
             } else {
               layout.setBackground( getResources().getDrawable(R.drawable.drawable1));
             }

            break;

        case R.id.drawable2Button:
             final int sdk = android.os.Build.VERSION.SDK_INT;
             if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
             layout.setBackgroundDrawable( getResources().getDrawable(R.drawable.drawable2) );
             } else {
               layout.setBackground( getResources().getDrawable(R.drawable.drawable2));
             }
             break;
        case R.id.drawable3Button:
             final int sdk = android.os.Build.VERSION.SDK_INT;
             if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
             layout.setBackgroundDrawable( getResources().getDrawable(R.drawable.drawable3) );
             } else {
               layout.setBackground( getResources().getDrawable(R.drawable.drawable3));
             }
            break;
        }
       }

答案 1 :(得分:0)

更改background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/shape_id">
        <shape xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="line">
            <gradient
                android:angle="315"
                android:endColor="#FFE8E8E8"
                android:startColor="#FFffffff"
                android:type="linear" />

        </shape>
    </item>
</layer-list>

现在点击按钮,只需找出您想要更改的颜色组合,然后将该颜色放入数组中,然后点击更改。

 final LinearLayout l =(LinearLayout)findViewById(R.id.linearLayout);
        l.setBackgroundResource(R.drawable.background);
      final  View v = findViewById(R.id.linearLayout);
        Button b =(Button)findViewById(R.id.button);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int colors[] = { 0xff255779, 0xffa6c0cd };
                GradientDrawable gradientDrawable = new GradientDrawable(
                        GradientDrawable.Orientation.TOP_BOTTOM, colors);
                l.setBackground(gradientDrawable);

            }
        });