如何在android中同时更改多个视图的背景

时间:2016-10-09 22:12:56

标签: android android-layout

我在xml中创建了一些视图,我在我的应用程序中使用它作为行。每个视图都具有完全相同的属性。 例如:

<View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="#000" />

我想在应用打开时同时更改所有这些视图的颜色。 创建id然后在java中使用findviewbyid来实现所有这些并不是非常有效。实现这一目标的最佳方法是什么? 我希望他们一直都有相同的颜色。

1 个答案:

答案 0 :(得分:0)

Android中没有XML快捷方式,因为您无法像您所描述的那样创建变色动画。现在,如果你想要&#34;效率&#34;在使用Java时的干净代码方面;查看Butterknife,这是一个用于在代码中使用Java注释来绑定视图的库。它使您的代码非常具有声明性,您可以避免使用findViewById以及其他功能。

<强>依赖关系

添加到项目build.gradle文件;

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

添加到您的app模块build.gradle文件;

compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'

在活动(或视图或片段)

要制作Butterknife绑定视图,我们将请求它绑定我们的Activity,onCreate是个好地方。然后我们将为Butterknife添加字段以将视图绑定到,在本例中为视图列表。,尽管您也可以逐个绑定视图。然后我们只是为这个例子改变他们的背景。

public class MyActivity extends Activity {
    @BindViews({R.id.view1, R.id.view2, R.id.view3})
    List<View> views;

    public void onCreate(...) {
        ...
        setContentView(...);
        Butterknife.bind(this);

        for(View v : views) {
            v.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
        }
    }
}

或者,如果您需要区分视图,而不是将它们放在列表中;

public class MyActivity extends Activity {
    @BindView(R.id.view1)
    View view1;
    @BindView(R.id.view2)
    View view2;
    @BindView(R.id.view3)
    View view3;

    public void onCreate(...) {
        ...
        setContentView(...);
        Butterknife.bind(this);

        view1.setBackgroundColor(ContextCompat.getColor(this, R.color.color1));
        view2.setBackgroundColor(ContextCompat.getColor(this, R.color.color2));
        view3.setBackgroundColor(ContextCompat.getColor(this, R.color.color3));
    }
}