首页 > 代码库 > New UI-gravity和layout_gravity属性解析

New UI-gravity和layout_gravity属性解析

New UI-gravity和layout_gravity属性解析

 ——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!


小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的

力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文

更加的详尽,帮到更多的人,O(∩_∩)O谢谢!

小猪Android开发交流群:小猪Android开发交流群群号:421858269

新Android UI实例大全目录:http://blog.csdn.net/coder_pig/article/details/42145907




1)两者用法演示:

相信大家对于这两个属性都不陌生吧,也是这两个其实平时用的很多的:

android:gravity:设置view中内容的对齐方式!

android:layout_gravity:设置view在布局容器中的对齐方式,要在LinearLayout里面才可以用哦!


多说无益,通过一个简单的例子就可以知道了

两个简单的TextView,设置不同的gravity和layout_gravity属性

技术分享

布局代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.jay.example.getscreendemo.MainActivity"
    android:orientation="vertical" >

    <TextView
        android:layout_gravity="right"
        android:background="#FF7878"
        android:gravity="center"
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:text="O(∩_∩)O哈哈~" 
        android:textSize="18sp"/>
    
    <TextView
        android:background="#FF7428"
        android:gravity="left|bottom"
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:text="(*^__^*) 嘻嘻……"
        android:textSize="18sp" />

</LinearLayout><strong>
</strong>

用法都是很简单的,可选的值都是一样的,当然可以同时设置多个属性,只需用|间隔即可,比如左上left|top

技术分享



2)使用Layout_gravity的一个很重要的问题!!!

这个问题是一个读者偶尔一次发现反馈给我的,万分感谢,同时希望大家在看小猪博客的时候可以提出

一些实际开发中遇到的问题,以及解决方式,好给后来者经验!毕竟小猪不是神,不是什么方方面面都能

考虑到的,谢谢!


问题内容:

在一个LinearLayout的水平方向中布置两个TextView,想让一个左,一个右,怎么搞?

或许你会脱口而出:"gravity设置一个left,一个right就可以啦!"

真的这么简单?你试过吗?写个简单的Layout你就会发现,事与愿违了:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context="com.jay.example.getscreendemo.MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:layout_gravity="left"
        android:background="#FF7878"
        android:gravity="center"
        android:text="O(∩_∩)O哈哈~" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:layout_gravity="right"
        android:background="#FF7428"
        android:gravity="center"
        android:text="(*^__^*) 嘻嘻……" />

</LinearLayout>
运行结果图:

技术分享
看到这里你会说:哎呀,真的不行耶,要不在外层LinearLayout加个gravity=left的属性,然后设置第二个

TextView的layout_gravity为right,恩,好我们试一下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="left"
    tools:context="com.jay.example.getscreendemo.MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:background="#FF7878"
        android:gravity="center"
        android:text="O(∩_∩)O哈哈~" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:layout_gravity="right"
        android:background="#FF7428"
        android:gravity="center"
        android:text="(*^__^*) 嘻嘻……" />

</LinearLayout>
结果还是一样:

技术分享

好吧,没辙了,怎么办好?

当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。

即:left,right,center_horizontal 是生效的。

当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。

即:top,bottom,center_vertical 是生效的


不过貌似这个解决方法有点坑爹,比如如果只能竖直方向设置左右对齐的话,就会出现下面的效果:

技术分享

显然不是我们要的结果把!

综上,要么按照上述给出的规则来布局,不过对于这种情况还是使用相对布局RelativeLayout把!

网上没给出具体的原因,都是说这样改有人说这个和orientation的优先级有关

,暂且先mark下来吧,后续如果知道原因的话再解释!前面屏幕适配也说过了,布局还是建议使用

RelativeLayout!











New UI-gravity和layout_gravity属性解析