【问题标题】:Android Gravity IssuesAndroid 重力问题
【发布时间】:2011-03-15 05:30:52
【问题描述】:

我一直在尝试将这个自定义视图置于另一个扩展 LinearLayout 的自定义视图中。这一切都需要通过代码完成,因为这一切都是在运行时完成的。

我已经尝试了设置重力的标准方法:

this.setGravity(Gravity.CENTER);

这是在我扩展 LinearLayout 的类中完成的。

我也试过 LayoutParams 方法:

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.CENTER;
    block.setLayoutParams(params);
    this.addView(block);

这是在我将块添加到视图的地方完成的(如您所见)。

这两种方法都导致块仍然在我的视图的左上角对齐。我还有哪些其他选择,或者更重要的是,我到底做错了什么?

【问题讨论】:

    标签: java android gravity


    【解决方案1】:

    尝试同时设置布局权重:

    LinearLayout.LayoutParams params =
        new LinearLayout.LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.CENTER_HORIZONTAL;
    params.weight = 1;
    this.addView(block, params);
    

    这(假设您的方向是垂直的)将允许您的视图填充线性布局中的剩余空间,并且应该水平居中。

    我认为没有办法让视图子项小于包含它的 LinearLayout 单元格。如果视图小于其“单元格”,则 LinearLayout 将缩小以适应它。如果布局权重导致“单元格”增长,那么包含的视图也会增长。

    如果您真的希望视图小于其“单元格”并居中,请将其包装在 FrameLayout 中。然后,您将能够随心所欲地使用重心。 布局宽度=“填充父” 在xml中(我知道你不能直接使用这个,但是这样解释更容易):

    <LinearLayout orientation="vertical">
        <FrameLayout layout_weight="1" layout_height="wrap_content">
            <View layout_gravity="center" layout_{width,height}="wrap_content"/>
        </FrameLayout>
            ... other views ...
    </LinearLayout>
    

    未标记的布局属性是“fill_parent”。

    【讨论】:

    • 尝试您的第一个代码示例产生的结果与我仍然遇到的相同。感觉好像我应用到我的自定义 LinearLayout 和自定义 View 的所有这些属性都没有被注意到。
    【解决方案2】:

    看看这个:http://thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

    基本上,android:gravity 会影响 View 中事物的位置,而 android:layout_gravity 会相对于其父项定位 View。所以你需要use layout gravity来移动整个View。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2011-10-28
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 2021-12-18
      • 2018-01-21
      相关资源
      最近更新 更多