我需要以编程方式更改视图中所有按钮的文本颜色。
现在我正在逐一修改它们:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = inflater.inflate(R.layout.fragment_screen_dialer, container, false);
Button b = (Button) view.findViewById(R.id.button0);
b.setTextColor(value);
b = (Button) view.findViewById(R.id.button1);
b.setTextColor(value);
但是因为有很多按钮我想一次修改它们?怎么办呢?
答案 0 :(得分:1)
遍历布局的所有子项,检查下一个视图是否是Button或其子类的实例:
ViewGroup viewgroup = (ViewGroup) findViewById(R.id.your_layout);
int count = viewgroup.getChildCount();
for (int i=0; i < count; i++){
View view = viewgroup.getChildAt(i);
if (view instanceof Button){
(Button)view.setTextColor(value);
}
}
如果你的按钮位于同一级别,这将有效。否则,您需要构建类似于此的循环函数:
public void setNewColor(View view, int value){
if (view instanceof Button){
((Button) view).setTextColor(value);
}
else if (view instanceof ViewGroup){
ViewGroup viewgroup = (ViewGroup)view;
int count = viewgroup.getChildCount();
for (int i=0; i < count; i++){
View viewNext = viewgroup.getChildAt(i);
setNewColor(viewNext, value);
}
}
}
并将其应用于您的布局:
setNewColor(findViewById(R.id.your_layout), your_color);
答案 1 :(得分:0)
AFAIK,您无法一次修改视图中布局元素的颜色或其他属性。您必须按照自己的方式进行操作,即逐个设置颜色。
但是,您可以在style.xml中创建按钮样式并将syle分配给所有按钮,每当您更改style.xml时,它都会影响所有按钮
答案 2 :(得分:0)
您可能必须迭代所有视图,并更改按钮的颜色。 Check this page了解如何遍历布局的所有子视图/视图组,包括不是主要布局的直接子视图的视图(按钮)
包括提供的两个类,您将编写简单的代码,如:
ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
List<Button> buttons = Views.find(root, Button.class);
for (Button b: buttons)
b.setTextColor(value);