Android 以编程方式将视图添加到具有重力和重量的LinearLayout

Android 以编程方式将视图添加到具有重力和重量的LinearLayout,android,android-layout,Android,Android Layout,我已经用xml生成了LinearLayout,这个: <LinearLayout android:id="@+id/available_themes_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="c

我已经用xml生成了LinearLayout,这个:

<LinearLayout
        android:id="@+id/available_themes_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:paddingTop="6dp"
        android:paddingBottom="6dp"/>
但在最后,我实现了只应用权重,并且我的视图与左侧对齐。想一想,如果不设定重量,重力效果会很好

有人能告诉我解决这个问题的方法吗

        LinearLayout availableThemesLayout = new LinearLayout(null);
        ImageView lightOrangeCircleView = new ImageView(null);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                0,
                LinearLayout.LayoutParams.WRAP_CONTENT,
                1.0f);
        FrameLayout frameLayout = new FrameLayout(null);
        availableThemesLayout.addView(frameLayout, params);

        FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.WRAP_CONTENT,
                FrameLayout.LayoutParams.WRAP_CONTENT);
        frameParams.gravity = Gravity.CENTER;
        frameLayout.addView(lightOrangeCircleView, params);

试试这个。

当使用
weight
s时,确保适当的
width
height
被设置为
0dp
。在将视图添加到布局后,你试过设置重力吗?@Nerd,试过了,宽度是因为方向是水平的。@akash93,刚试过,没有变化,重力是不适用的。这里给出了几种方法:为什么要用null而不是上下文创建视图?这将抛出NPE。这也不管用(
        LinearLayout availableThemesLayout = new LinearLayout(null);
        ImageView lightOrangeCircleView = new ImageView(null);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                0,
                LinearLayout.LayoutParams.WRAP_CONTENT,
                1.0f);
        FrameLayout frameLayout = new FrameLayout(null);
        availableThemesLayout.addView(frameLayout, params);

        FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.WRAP_CONTENT,
                FrameLayout.LayoutParams.WRAP_CONTENT);
        frameParams.gravity = Gravity.CENTER;
        frameLayout.addView(lightOrangeCircleView, params);