Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 水平直线布局,儿童从右向左排列?_Java_Android_Android Layout - Fatal编程技术网

Java 水平直线布局,儿童从右向左排列?

Java 水平直线布局,儿童从右向左排列?,java,android,android-layout,Java,Android,Android Layout,我有一个水平的线性布局,它以编程方式填充了它的子对象。我希望能够切换到从右向左的布局(即,子0位于最右侧,子1位于其左侧,等等)。问题是,我希望布局从RtL切换到LtR并动态返回,这就是为什么例如与我的案例无关 似乎没有任何方法可以直接在代码中设置它,特别是因为重力用于对齐,而不是排序 到目前为止,我看到了以下解决方法: 在排序开关上,以相反的顺序重新添加子项(问题:非常难看且占用资源) 使用重写的onLayout()方法实现LinearLayout的子类(问题:由于助手布局成员的可见性受到限

我有一个水平的线性布局,它以编程方式填充了它的子对象。我希望能够切换到从右向左的布局(即,子0位于最右侧,子1位于其左侧,等等)。问题是,我希望布局从RtL切换到LtR并动态返回,这就是为什么例如与我的案例无关

似乎没有任何方法可以直接在代码中设置它,特别是因为重力用于对齐,而不是排序

到目前为止,我看到了以下解决方法:

  • 在排序开关上,以相反的顺序重新添加子项(问题:非常难看且占用资源)
  • 使用重写的onLayout()方法实现LinearLayout的子类(问题:由于助手布局成员的可见性受到限制,大量复制粘贴Android源代码)
  • 将线性布局替换为另一个布局,例如TableLayout或RelativeLayout,并更改开关上子级的布局参数(问题:仍然有点笨拙)
还有更直接的解决方案或更好的解决办法吗


编辑:为了澄清这一点,我在活动运行时几乎只创建了一次子项,并且我可以将它们存储在一个助手数组/集合中,而不会使代码复杂化。

虽然重新创建子项可能需要大量资源,但重新排序应该不会那么糟糕。您可以使用和获取现有视图,然后使用。

执行线性布局。设置旋转(180)。还必须将线性布局的子视图的Y旋转设置为180。例如:

private void horizontal() {
    LinearLayout layout = (LinearLayout) v.findViewById(R.id.layout);
    View childView1 = (View) v.findViewById(R.id.childView1);
    View childView2 = (View) v.findViewById(R.id.childView2);

    layout.setRotationY(180);
    childView1.setRotationY(180);
    childView2.setRotationY(180);
}

代码可能是错误的,但你明白了。

你是一次将一个子元素添加到布局中,还是将其与循环一起添加?这是一个循环,我可以将引用存储在帮助器结构中而不会太复杂。我将编辑问题以澄清这一点。这正是第一个提到的解决方法。看看布局方法的来源,有很多事情要做,但也许我担心的太多了。尽管如此,我还是会等待其他答案,因为我问这个问题时预感到我遗漏了一些明显的东西。