2014-04-05 78 views
1

我需要以編程方式更改視圖中所有按鈕的文本顏色。以編程方式修改所有按鈕的文字大小?

現在我正在修改它們一個個像這樣的:

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

但由於有很多按鈕,我想一次修改它們呢?如何才能做到這一點?

回答

1

迭代通過佈局的所有兒童,如果下次檢查看法是按鈕或它的子類的一個實例:

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

如果你的按鈕奠定了在山姆將工作e級別。否則,你需要建立一個類似的經常性功能:

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

嗨Salauyou,我想你提供最佳的解決方案,但我有實現它的問題。我只是編輯了你的答案,告訴你我試過了什麼。我給我的主要LinearLayout ID「容器」。你知道什麼是錯的嗎? – lisovaccaro

+0

寫'instanceof'而不是''instance'',這是我的愚蠢的錯誤)和'getChildCount()'而不是'getchildcount()'對不起,我現在沒有訪問eclipse –

+0

@ Liso22 yes,thanx for editing! –

0

AFAIK,您不能一次修改視圖中佈局元素的顏色或其他屬性。你必須這樣做,即逐個設置顏色。

然而,你可以創建一個style.xml按鈕樣式和分配SYLE所有按鈕,只要你會改變style.xml它會影響所有的按鈕

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