我在xml中创建了一些视图,我在我的应用程序中使用它作为行。每个视图都具有完全相同的属性。 例如:
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#000" />
我想在应用打开时同时更改所有这些视图的颜色。 创建id然后在java中使用findviewbyid来实现所有这些并不是非常有效。实现这一目标的最佳方法是什么? 我希望他们一直都有相同的颜色。
答案 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));
}
}