0

我有许多使用形状可绘制对象的背景颜色的 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>

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

谢谢你。

4

2 回答 2

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);

            }
        });
于 2016-10-27T06:56:32.277 回答
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;
        }
       }
于 2016-10-27T05:59:30.163 回答