如何通过编程使LinearLayout的子项对齐到父级右侧?

3
我有一个linearLayout_child在另一个linearLayout_parent里面。
我想让linearLayout_child对齐到父布局的右边。
我该怎么做呢?
如果我希望所有linearLayout_parent的子元素都对齐到它们的父布局的右边,该怎么办?
我想通过编程实现这两个功能。
更新:
是否有任何工具可以在我的Activity视图中查看当前布局属性和属性?代码更改了许多原始XMl的属性,很难在特定情况下跟踪。
以下是我的XML:
        <MyTextView
            android:id="@+id/navBarDistance"
            style="@style/NavBarDistance"
            android:textSize="19dp"
            android:text="miles"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />

        <MyTextView
            android:id="@+id/navBarDistanceUnit"
            style="@style/NavBarDistUnit"
            android:textSize="19dp"
            android:text="0.1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="3dp" 
            />
    </LinearLayout>
        <LinearLayout
            android:id="@+id/navBarDistanceLayoutRtl"
            android:layout_width="70dp"
            android:layout_height="match_parent"
            android:layout_marginRight="8dp"
            android:layout_marginTop="5dp"
            android:gravity="center_vertical|right"
            android:orientation="horizontal"
            android:visibility="gone">

            <MyTextViewType
                android:id="@+id/navBarDistanceUnitRtl"
                style="@style/NavBarDistUnit"
                android:textSize="19dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="3dp"
                />

            <MyTextViewType
                android:id="@+id/navBarDistanceRtl"
                style="@style/NavBarDistance"
                android:textSize="19dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />
        </LinearLayout>
</LinearLayout>

这里是部分代码:

更改到 AlerterMode 并返回非警报模式,会使 navBarDistanceLayoutRtl 左对齐而非右对齐。

            if (bIsAlertMode)
            {

...
                if (rtlMode)
                {
                    width = view.findViewById(R.id.navBarDistanceLayoutRtl).getWidth();
                    android.widget.LinearLayout.LayoutParams DistanceBar = new LinearLayout.LayoutParams(width, android.widget.LinearLayout.LayoutParams.MATCH_PARENT);
                    DistanceBar.setMargins(3, 20, 3, 0);
                    view.findViewById(R.id.navBarDistanceLayoutRtl).setLayoutParams(DistanceBar);
                }
                else
                {
                    width = view.findViewById(R.id.navBarDistanceLayout).getWidth();
                    android.widget.LinearLayout.LayoutParams DistanceBar = new LinearLayout.LayoutParams(width, android.widget.LinearLayout.LayoutParams.MATCH_PARENT);
                    DistanceBar.setMargins(3, 20, 3, 0);
                    view.findViewById(R.id.navBarDistanceLayout).setLayoutParams(DistanceBar);

                }

...

            }
            else
            {
   ...

                if (rtlMode)
                {
                    width = view.findViewById(R.id.navBarDistanceLayoutRtl).getWidth();
                    android.widget.LinearLayout.LayoutParams DistanceBar = new LinearLayout.LayoutParams(width, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT);
                    DistanceBar.setMargins(20, 8, 3, 0);

                    DistanceBar.gravity = RelativeLayout.ALIGN_PARENT_RIGHT;

                    view.findViewById(R.id.navBarDistanceLayoutRtl).setLayoutParams(DistanceBar);

                    view.findViewById(R.id.navBarDistanceLayoutRtl).setVisibility(View.VISIBLE);
                    view.findViewById(R.id.navBarDistanceLayout).setVisibility(View.GONE);
                    distance = (TextView)view.findViewById(R.id.navBarDistanceRtl);
                    distanceUnit = (TextView)view.findViewById(R.id.navBarDistanceUnitRtl);
                }
                else
                {
                    width = view.findViewById(R.id.navBarDistanceLayout).getWidth();
                    android.widget.LinearLayout.LayoutParams DistanceBar = new LinearLayout.LayoutParams(width, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT);
                    DistanceBar.setMargins(0, 8, 3, 0);
                    view.findViewById(R.id.navBarDistanceLayout).setLayoutParams(DistanceBar);

                    DistanceBar.gravity = RelativeLayout.ALIGN_PARENT_LEFT;

                    view.findViewById(R.id.navBarDistanceLayoutRtl).setVisibility(View.GONE);
                    view.findViewById(R.id.navBarDistanceLayout).setVisibility(View.VISIBLE);
                    distance = (TextView)view.findViewById(R.id.navBarDistance);
                    distanceUnit = (TextView)view.findViewById(R.id.navBarDistanceUnit);

                }

                ...
            }
        }

1
重力属性就是你所需要的。 - Blackbelt
使用RelativeLayout作为父布局而不是....请参考这里 - CRUSADER
有没有工具可以查看我的Activity视图中当前的布局属性和属性?代码更改了许多原始XML的属性,很难在特定情况下跟踪。 - Elad Benda
3个回答

4
尝试像这样设置gravity..
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT);

    layoutParams.gravity = RelativeLayout.ALIGN_PARENT_RIGHT;

    linearlayout.setLayoutParams(layoutParams);

有没有工具可以查看我的Activity视图中当前的布局属性和属性?代码更改了许多原始XML的属性,很难在特定情况下跟踪。 - Elad Benda
它没有帮助。我还能检查什么? - Elad Benda

1

您可以使用:

  • 布局参数 GRAVITY Doc
  • 间隔视图(简单的视图,您可以设置 layout_width="0dp"layout_weight="1"

0
我在我的情况下找到了一个解决方案,我正在向一个Linear Layout添加视图,只需将gravity设置为TEXT_ALIGNMENT_VIEW_START
    LinearLayout row = new LinearLayout(Control.this);
    row.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT));
    row.setGravity(View.TEXT_ALIGNMENT_VIEW_START);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接