Android中 android:gravity 和 android:layout_gravity的区别-阿里云开发者社区

开发者社区> 一叶飘舟> 正文

Android中 android:gravity 和 android:layout_gravity的区别

简介:
+关注继续查看

在配置xml布局时,经常用到 android:gravity   android:layout_gravity这两个属性,这里记录一下他们的区别。


1.android:gravity  


android:gravity 常用于控制view的内部控件或者内容的位置,类似于于padding,如下所示:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"   //控制EditText控件的位置居右
        android:orientation="vertical">

        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:gravity="center" //控制EditText控件的文本的位置居中
            android:text="input text" />

    </LinearLayout>



再看下面的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        <span style="color:#ff0000;">android:layout_width="match_parent"
        android:layout_height="wrap_content"</span>
        android:gravity="right"
        android:orientation="vertical">

        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="input text" />

    </LinearLayout>

</LinearLayout>


在根节点布局中使用了android:gravity="center",影响了里面的view中的位置,不难发现,第二个LinearLayout设置了android:layout_width="match_parent",位置没有受到影响,设置了android:layout_height="wrap_content",第二个LinearLayout就垂直居中了。


2.android:layout_gravity

android:layout_gravity使用的时候一般都要有上级布局,也就是不能用于根节点,如下代码所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="input text" />

    </LinearLayout>

</LinearLayout>

红色部分的代码
android:layout_gravity="center"

就是无效代码。

下面布局和效果图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:orientation="vertical">

        <EditText
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="input text" />

    </LinearLayout>

</LinearLayout>



Java代码来设置组件的位置(参考http://blog.csdn.net/feng88724)

 

[java] view plain copy
 print?
  1. Button button  = new Button(this);  
  2. button.setText("One");  
  3. LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);  
  4. //此处相当于布局文件中的Android:layout_gravity属性  
  5. lp.gravity = Gravity.RIGHT;  
  6. button.setLayoutParams(lp);  
  7. //此处相当于布局文件中的Android:gravity属性  
  8. button.setGravity(Gravity.CENTER);  
  9.   
  10. LinearLayout linear = new LinearLayout(this);  
  11. //注意,对于LinearLayout布局来说,设置横向还是纵向是必须的!否则就看不到效果了。  
  12. linear.setOrientation(LinearLayout.VERTICAL);  
  13. linear.addView(button);  
  14. setContentView(linear);  
 

 

或者这样也可以:

 

[java] view plain copy
 print?
  1. Button button  = new Button(this);  
  2. button.setText("One");  
  3. //此处相当于布局文件中的Android:gravity属性  
  4. button.setGravity(Gravity.CENTER);  
  5.   
  6. LinearLayout linear = new LinearLayout(this);  
  7. //注意,对于LinearLayout布局来说,设置横向还是纵向是必须的!否则就看不到效果了。  
  8. linear.setOrientation(LinearLayout.VERTICAL);  
  9.   
  10. LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);  
  11. //此处相当于布局文件中的Android:layout_gravity属性  
  12. lp.gravity = Gravity.RIGHT;  
  13.   
  14. linear.addView(button, lp);  
  15. setContentView(linear);  
 

 

好了,效果图就不上了,跟上面的一样。 就讲这么多。

 

另外,要设置在RelativeLayout中的位置时使用addRule方法,如下:

[java] view plain copy
 print?
  1. params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  2.         params.addRule(RelativeLayout.CENTER_IN_PARENT);  
  3.         mContainer.addView(progress,params);  


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
教妹学Java(十七):do-while 循环
教妹学Java(十七):do-while 循环
4 0
学妹抱怨Spring入门太难了,我用一篇文章彻底征服了她(2)
学妹抱怨Spring入门太难了,我用一篇文章彻底征服了她
5 0
教妹学Java(十六):while 循环详解
教妹学Java(十六):while 循环详解
5 0
TensorFlow 1.x最后一更、Android 10最新特性,这是谷歌开发者日
教程、体验、实战?谷歌开发者日能满足你对开发工具与开发体验的所有好奇心。
5 0
Java中对于字节流的读取方式
Java中对于字节流的读取方式
6 0
【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作(3)
【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作
5 0
学妹抱怨Spring入门太难了,我用一篇文章彻底征服了她(1)
学妹抱怨Spring入门太难了,我用一篇文章彻底征服了她
6 0
【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作(3)
【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作
8 0
关于Java线程池的一点理解
关于Java线程池的一点理解
4 0
+关注
1635
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载