关于gravity属性引发的大问题

今天写代码时遇到了一个很奇葩的问题,改了看,看了又改了好几次都没有解决,那个郁闷呦。简单描述下问题,我在写一个fragment的页面时想让其中的一个控件居中,可怎么改都白费。下边上代码

fragment的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="center"
    >
    <include android:id="@+id/ll_load_animation"
        layout="@layout/load_animation_layout"/>
        ...//其他代码忽略,主要我是想让上边include的居中显示
 </LinearLayout>

下边是load_animation_layout布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    >
    <ImageView
        android:id="@+id/img_load_circle1"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:background="@drawable/load_circle_darker_gray"/>
    <ImageView
        android:id="@+id/img_load_circle2"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:background="@drawable/load_circle_darker_gray"
        android:layout_marginLeft="5dp"/>
    <ImageView
        android:id="@+id/img_load_circle3"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:background="@drawable/load_circle_darker_gray"
        android:layout_marginLeft="5dp"/>
    <ImageView
        android:id="@+id/img_load_circle4"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:background="@drawable/load_circle_darker_gray"
        android:layout_marginLeft="5dp"/>
    <ImageView
        android:id="@+id/img_load_circle5"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:background="@drawable/load_circle_darker_gray"
        android:layout_marginLeft="5dp"/>

</LinearLayout>

就是一个线性布局中有5个一样的图片

下边是load_circle_darker_gray文件(这个文件对于讲解这个问题没有意义,但是为了代码连贯还是贴一下)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/darker_gray"/>
    <corners android:radius="5dp"/>
</shape>

这个是fragment和include的load_animation_layout布局的预览图,从预览图上可以看到这个是居中显示的,因为我在他们的父布局中都设置了gravity属性是center
这里写图片描述

但是奇葩的问题来了,当我运行到真机上时却发现换了个模样,变成了下图这样
这里写图片描述
跑到左上角去了,是不是挺奇怪呢。

当我看到这个问题后,尝试了去改变load_animation_layout布局中父布局的宽高,gravity属性,还有layout_gravity属性也配合着用到了,都不好使,甚至把里边的五个图片都加上了layout_gravity的属性,结果没起到任何作用,它依然在左上角不离不弃。

我以为是fragment布局影响到它了,然后直接在fragment类中引用load_animation_layout布局,结果还是不居中。

越改越烦躁,我就停下来看了会电视剧去洗漱了下(哈哈。。。)后来当我在面对这个问题时,突然想到盛放fragment的容器,在activity布局中声明的这个容器,其实就是一个RelativeLayout,代码如下

<RelativeLayout
        android:id="@+id/rl_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_above="@+id/view_line"/>

除了底部一个导航栏都是它的空间,我看了看是不是它设置了什么属性影响到fragment了,但看了下布局里和代码里都没有,后来我尝试着在这个里边加上了android:gravity=”center”然后运行了一下结果奇迹发生了,原来真的是它的问题,也不枉费我看这么久这个问题。哈哈

gravity属性是表示组件的子组件在组件中的位置,我们写代码时往往忽略了父组件可能被嵌套在其他父组件中,所以看代码还是得整体看,整体考虑,要不然一个小小的不留神又得捣鼓上半天一天的。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值