2013-10-07 102 views
1

我有一個水平線性佈局,帶有用於用戶名輸入的TextView和EditText。 TextView包含文本「用戶名」,並且EditText獲取輸入。Android佈局 - 視圖的RTL排序

在RTL接口(如希伯來語)中排序視圖時,TextView應該是最右邊的視圖,而EditText應該出現在它的左邊。

LTR

[用戶名標籤] [用戶名輸入]

RTL

[用戶名輸入] [用戶名標籤]

雖然RTL兼容性可以通過逆轉實現視圖的順序有沒有辦法讓水平滾動視圖堆疊它的孩子從右到左?

回答

1

我自己寫了一個方法來幫助我。這種方法需要父級佈局,然後在其中的每個佈局上循環。如果它在它們中找到2個控件,那麼它會在那裏開啓一些位置。

private void LoopControls(int layout) { 
    RelativeLayout sc = (RelativeLayout) findViewById(layout); 
    Integer iLL = 0; 
    int childcount = sc.getChildCount(); 
    for (int i = 0; i < childcount; i++) { 
     View v = sc.getChildAt(i); 
     Class<? extends View> c = v.getClass(); 

     if (c == LinearLayout.class) { 
      LinearLayout l = ((LinearLayout) v); 
      l.setGravity(Gravity.LEFT); 
      iLL++; 
      if (l.getChildCount() == 2) { 
       if (l.getChildAt(0).getClass() == TextView.class 
         && l.getChildAt(1).getClass() == RadioButton.class) { 
        TextView t = (TextView) l.getChildAt(0); 
        RadioButton r = (RadioButton) l.getChildAt(1); 
        r.setText(t.getText()); 
        t.setText(""); 
       } 
      } else if (l.getChildCount() > 2) { 
       for (int j = 0; j < l.getChildCount(); j += 2) { 
        if (l.getChildAt(j).getClass() == TextView.class 
          && l.getChildAt(j + 1).getClass() == RadioButton.class) { 
         TextView t = (TextView) l.getChildAt(j); 
         RadioButton r = (RadioButton) l.getChildAt(j + 1); 
         r.setText(t.getText()); 
         t.setText(""); 
        } 
       } 
      } 
     } else if (c == TextView.class) { 
      TextView t = ((TextView) v); 
      t.setGravity(Gravity.LEFT); 
     } 
    } 
}