我有一个水平线性布局,带有TextView和EditText用于输入用户名。 TextView包含文本“Username”,EditText获取输入。
在RTL界面(例如希伯来语)中排序视图时,TextView应该是最右侧的视图,而EditText应该出现在它的左侧。
LTR
[用户名 - 标签] [用户名 - 输入]
RTL
[用户名输入] [用户名标签]
虽然可以通过颠倒视图的顺序来实现RTL兼容性,但有一种方法可以使水平滚动视图自己从右到左堆叠它们的子项吗?
答案 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);
}
}
}