我有一个水平线性布局,一个 TextView 和一个 EditText 用于用户名输入。TextView 包含文本“用户名”,而 EditText 获取输入。
在 RTL 界面(例如希伯来语)中对视图进行排序时,TextView 应该是最右边的视图,而 EditText 应该出现在它的左边。
LTR
[用户名标签] [用户名输入]
RTL
[用户名输入][用户名标签]
尽管可以通过颠倒视图的顺序来实现 RTL 兼容性,但有没有办法让水平滚动视图堆栈它本身是从右到左的子级?
我有一个水平线性布局,一个 TextView 和一个 EditText 用于用户名输入。TextView 包含文本“用户名”,而 EditText 获取输入。
在 RTL 界面(例如希伯来语)中对视图进行排序时,TextView 应该是最右边的视图,而 EditText 应该出现在它的左边。
LTR
[用户名标签] [用户名输入]
RTL
[用户名输入][用户名标签]
尽管可以通过颠倒视图的顺序来实现 RTL 兼容性,但有没有办法让水平滚动视图堆栈它本身是从右到左的子级?
我自己写了一个方法来帮助我。该方法的作用是采用父布局,然后在其中的每个布局上循环。如果它在其中找到 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);
}
}
}