【问题标题】:Android - Set Layout_Gravity programmatically for LinearLayoutAndroid - 以编程方式为 LinearLayout 设置 Layout_Gravity
【发布时间】:2017-05-17 15:14:53
【问题描述】:

我遇到了以下问题:我实现了一个HorizontalScrollView,它在一种情况下包含一个LinearLayout 和一个ImageView。在这种情况下,图像大约是屏幕宽度的 50%。所以我想把它放在中心。不幸的是,我发现将其居中的唯一方法是在LinearLayout 上使用layout_gravity="center"

这是我的 xml:

<HorizontalScrollView
            android:layout_gravity="center"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">

        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

        <ImageView                    
                android:src="@drawable/myImg"
                android:layout_width="wrap_content"
                android:adjustViewBounds="true"
                android:layout_height="150dp"/>

        </LinearLayout>

    </HorizontalScrollView>

但我需要以编程方式设置layout_gravity。有人知道我如何实现这一目标或知道不同的方式吗?我通过 Google 找到的所有东西都不适用于我,例如 this post

谢谢!

【问题讨论】:

  • 您是否尝试过将 ImageView 封装在 LinearLayout 中并设置该布局的参数,如您访问的帖子中所示?
  • 是的,我已经尝试过了...不工作

标签: java android position android-linearlayout layout-gravity


【解决方案1】:

做这样的事情:

   LayoutParams lp = new LayoutParams();
   lp.gravity= Gravity.CENTER_HORIZONTAL; 
   myImg.setLayoutParams(lp);

更新: 另一种方法:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            params.weight = 1.0f;
            params.gravity = Gravity.CENTER;

            imageView.setLayoutParams(params);

【讨论】:

  • 因此,要使重力值起作用,元素必须设置 MATCH_WIDTH 或占据其父元素的整个宽度。如果不是这种情况,那么它必须具有 100% 的权重值(这使得它完全占据父级),只有这样设置重力才起作用。
【解决方案2】:

ImageView 放入FrameLayout 中,如下所示:

删除了额外的代码

ImageView image = new ImageView(mContext);
image.setLayoutParams(new FrameLayout.LayoutParams(width, height, gravity));

更多信息here.

【讨论】:

  • 不工作......但无论如何,我为什么要将 imageview 放在 FrameLayout 中并将 FrameLayout.Params 放到 imageView 而不是父级?
  • 第三个参数不是gravityweight
【解决方案3】:

我想,这个对你有用

FrameLayout.LayoutParams layoutParams = new ScrollView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
 layoutParams1.gravity(YourGravity);
yourImage.setLayoutParams(layoutParams);

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 2013-03-31
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多