今天写代码时遇到了一个很奇葩的问题,改了看,看了又改了好几次都没有解决,那个郁闷呦。简单描述下问题,我在写一个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属性是表示组件的子组件在组件中的位置,我们写代码时往往忽略了父组件可能被嵌套在其他父组件中,所以看代码还是得整体看,整体考虑,要不然一个小小的不留神又得捣鼓上半天一天的。。。