以编程方式修改所有按钮文本大小?

时间:2014-04-05 13:07:31

标签: android view

我需要以编程方式更改视图中所有按钮的文本颜色。

现在我正在逐一修改它们:

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

但是因为有很多按钮我想一次修改它们?怎么办呢?

3 个答案:

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