关于 gravity与layout_gravity

区别



gravity与layout_gravity的区别在于:
  • android:gravity是用来设置该view中内容相对于该view组件的对齐方式
  • android:layout_gravity是用来设置该view组件相对于父view 的对齐方式
  • 在父控件种设置gravity与在子空间中设置layout_gravity的效果是一样的
  • 例如:我们可以通过设置android:gravity="center"来让EditText中的文字在EditText中居中显示; 同时我们设置EditText的android:layout_gravity="right"来让EditText组件在LinearLayout中居右显示。

布局



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/ll_root"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical" >     <LinearLayout         android:id="@+id/ll_1"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:gravity="right"         android:orientation="vertical" >         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="在父布局【LinearLayout】中设置gravity" />         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_gravity="center_horizontal"             android:text="冲突时,以TextView中设置的layout_gravity为准" />     </LinearLayout>
    <LinearLayout         android:id="@+id/ll_2"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:orientation="vertical" >         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_gravity="right"             android:text="在TextView中设置layout_gravity" />         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_gravity="center_horizontal"             android:text="在TextView中设置layout_gravity" />     </LinearLayout>
    <RelativeLayout         android:id="@+id/rl_1"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:background="#3500"         android:gravity="center_horizontal" >         <TextView             android:id="@+id/rl1_tv1"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="注意:\n在RelativeLayout中设置gravity可能是无效的\n而且设置后还可能会导致子控件的某些属性失效" />         <TextView             android:id="@+id/rl1_tv2"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_below="@+id/rl1_tv1"             android:text="比如你看这个控件就没居中" />         <TextView             android:id="@+id/rl1_tv3"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_below="@+id/rl1_tv2"             android:layout_centerHorizontal="true"             android:text="更可恶的是这个控件也不居中" />         <TextView             android:id="@+id/rl1_tv4"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_alignParentLeft="true"             android:layout_below="@+id/rl1_tv3"             android:text="还有这个控件也不能左对齐" />     </RelativeLayout>
    <RelativeLayout         android:id="@+id/rl_2"         android:layout_width="match_parent"         android:layout_height="wrap_content" >         <TextView             android:id="@+id/rl2_tv1"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_centerHorizontal="true"             android:text="所以对于RelativeLayout\n建议在子控件中设置layout_centerHorizontal" />         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_alignParentRight="true"             android:layout_below="@+id/rl2_tv1"             android:text="或者设置layout_alignParentRight" />     </RelativeLayout>
    <RelativeLayout         android:id="@+id/rl_3"         android:layout_width="300dp"         android:layout_height="70dp"         android:background="#3005" >     </RelativeLayout> </LinearLayout>

代码


public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        LinearLayout ll_root = (LinearLayout) findViewById(R.id.ll_root);

        Button button = new Button(this);

        button.setText("代码中设置");

        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(350, 150);//这里设置的是控件的大小,而不是父布局的大小

        lp.gravity = Gravity.RIGHT; //此处相当于布局文件中给Button的父布局LinearLayout设置Android:layout_gravity属性

        button.setLayoutParams(lp);

        button.setGravity(Gravity.RIGHT | Gravity.BOTTOM); //此处相当于布局文件中给Button设置的Android:gravity属性

        ll_root.addView(button);

        //******************************************************************************************

        RelativeLayout rl_3 = (RelativeLayout) findViewById(R.id.rl_3);

        Button button2 = new Button(this);

        button2.setText("代码中设置");

        RelativeLayout.LayoutParams lParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        lParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

        lParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

        button2.setLayoutParams(lParams);

        rl_3.addView(button2, lParams);

    }

}

来自为知笔记(Wiz)

时间: 2024-10-12 15:27:12

关于 gravity与layout_gravity的相关文章

【整理】Android中的gravity和layout_gravity区别

[背景] 在Android中,想要设置个按钮的水平对齐,都累死了: [已解决]ADT中已设置TableLayout布局的情况下如何设置按钮居中对齐    所以现在有必要搞清楚,到底gravity和layout_gravity到底有啥区别. 1.参考: Android – gravity and layout_gravity Android中gravity与layout_gravity的区别 中的解释,可以总结为: android:gravity : 表示当前View,即控件,内部的东西的,对齐方

Android见招拆招六:LinearLayout中Gravity、Layout_Gravity何时生效

对于LinearLayout何时生效的问题 对于 LinearLayout 当 android:orientation="vertical"  时, 只有水平方向的设置才起作用,垂直方向的设置不起作用.即:left,right,center_horizontal 是生效的. 当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用.即:top,bottom,center_vertical 是生效的

二、 Android中gravity与layout_gravity的区别

android:gravity:设置的是控件自身上面的内容位置 android:layout_gravity:设置控件本身相对于父控件的显示位置. 看下如下代码段 <?xml version="1.0" encoding="utf-8"?><!-- android:gravity设置了按钮上面的文字的显示位置,而android:layout_gravity设置了按钮在布局中的显示位置.--><LinearLayout xmlns:and

Android开发UI之android:gravity / android:layout_Gravity,android:padding / android:layout_margin属性区分

android:gravity / android:layout_Gravity区别: 1 android:gravity 是设置该view里面的内容相对于该view的位置,例如设置button里面的text相对于view的靠左,居中等位置. 2 3 android:layout_gravity 是用来设置该view相对与父view 的位置,例如设置button在layout里面的相对位置:屏幕居中,水平居中等. 在实践中,发现有时会同时使用android:gravity和 android:la

Android - gravity和layout_gravity区别

gravity和layout_gravity区别 本文地址:http://blog.csdn.net/caroline_wendy 在Android的控件属性中: gravity是控件的内容如何定位在控件内:layout_gravity是控件如何在它的父布局中的定位. 例如: EditText控件,gravity属性决定,输入内容的位置:如center,表示输入内容居中: layout_gravity表示EditText在父控件,如根RelativeLayout中,则显示在屏幕居中. 参考:ht

gravity和layout_gravity

gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思. android:layout_gravity 和 android:gravity 的区别 从名字上可以看到,android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着换个属性设置,不过不设置默认是在左侧的. android:layout_gravity是相对与它的父元素说的,说明元素显示在父元素的什么位置. 比如说button: android:layout_gravity 表示按钮在界面上的位置. a

gravity、layout_gravity及orientation

最近在弄一个简单的界面:横向,添加一张准备好的背景图,在界面右边居中放置一个按钮.实现过程中发现对布局的主要属性没有想象中地那么熟悉,又重新找资料树梳理了一遍,这里总结一下. 1.gravity.layout_gravity及orientation基本概念 gravity,中文意思为重心(理科生不会陌生吧),表示组件(View)横向和纵向的停靠位置.如果不进行任何设置,默认是靠左. android:gravity,对组件本身来说的,作用是设置表示组件包含的内容显示在表示组件的什么位置,默认值为左

gravity与layout_gravity//padding与margin

1.gravity与layout_gravity: android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在 view的靠左,靠右等位置.该属性就干了这个. android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayo ut里,你想把该button放在靠左靠右等位置就可以通过该属性设置. 这样就解释了,有什么我们弄个最外布局,然后里面包了几个布局,如果

gravity 和 layout_gravity

gravity : 是控件内部的内容的对齐方式. layout_gravity: 是控件相对于其容器的对齐方式. 如果 LinearLayout  的  android:orientation="horizontal" (水平对齐), 则里面的控件设置了 layout_gravity = "right"也是没用的.