我有很多使用形状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的每个活动并更改它?
谢谢。
答案 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);
}
});