Android布局 - RTL视图排序

时间:2013-10-07 21:42:20

标签: android android-linearlayout

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

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

LTR

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

RTL

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

虽然可以通过颠倒视图的顺序来实现RTL兼容性,但有一种方法可以使水平滚动视图自己从右到左堆叠它们的子项吗?

1 个答案:

答案 0 :(得分: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);
        }
    }
}