1

我有一个水平线性布局,一个 TextView 和一个 EditText 用于用户名输入。TextView 包含文本“用户名”,而 EditText 获取输入。

在 RTL 界面(例如希伯来语)中对视图进行排序时,TextView 应该是最右边的视图,而 EditText 应该出现在它的左边。

LTR

[用户名标签] [用户名输入]

RTL

[用户名输入][用户名标签]

尽管可以通过颠倒视图的顺序来实现 RTL 兼容性,但有没有办法让水平滚动视图堆栈它本身是从右到左的子级?

4

1 回答 1

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);
        }
    }
}
于 2013-11-18T08:08:23.780 回答