layout_gravity和gravity的区分和应用
??????? 關于它兩的使用和區別可以參考文章Android布局學習——android:gravity和android:layout_gravity的區別?https://www.cnblogs.com/JohnTsai/p/4231729.htmlAndroid gravity和layout_gravity的區別https://www.cnblogs.com/xqz0618/p/gravity.html
共同點
??????? 兩者都是設置對齊方式的屬性。內部的屬性值相同。
差異點:
???? 看名字就能看出一些區別:android:layout_gravity和layout有關。
???? android:gravity? 設置 View的內容的gravity。
????android:layout_gravity? 設置View或Layout的在它父布局中的gravity。
Gravity屬性
gravity:? 該屬性用來定義view的內部內容(或子控件)在該view內部x,y軸方向上擺放的位置,是上還是下,或左或右。
舉例來說:
??????? 1、假如view是一TextView,則gravity屬性則是設置其內部文字的對齊方式;
??????? 2、假如TextView是ViewGroup組件如LinearLayout,則gravity屬性則是設置其內部view組件的對齊方式。
其中fill和fill_xxx相關的屬性是和fill_parent一樣,估計已經被match_xxx替換了,所以不用管它。
clip_vertical: 這是一個附加選項,表示如果子控件的上或下邊界超出父容器的邊界,子控件的上或下將被裁剪父容器的高度大小。clip屬性基于垂直gravity: gravity=top,將裁剪下邊界;gravity=bottom,將裁剪上邊界,或者上下邊界都不裁剪;
clip_horizontal:? 同理clip_vertical
start:子控件被放置在父容器的開始位置,相當于“top | left”。不會改變子控件尺寸。
end: 子控件被放置在父容器的開始位置,相當于“bottom | right”。不會改變子控件尺寸。
center:子控件被放置在父容器垂直和水平方向的中間位置。不會改變子控件尺寸。
center_vertical:子控件被放置在父容器垂直方向的中間位置。不會改變子控件尺寸。
center_horizontal:子控件被放置在父容器水平方向的中間位置。不會改變子控件尺寸。
Layout_gravity屬性
??????? view上定義的layout_gravity是提供給它的父容器使用的,表明view應該擺放在父容器x,y方向上什么位置上。對于layout_gravity來說不是什么情況下都能設置其屬性都能生效(比如RelativeLayout),而且在不同的ViewGroup中產生的效果也會不同。
舉例來說
1、LinearLayout
??????? 父容器是LinearLayout,”orientation=vertical“時,容器內部view設置的layout_gravity屬性只在左、右水平方向上生效;
??????? 父容器是LinearLayout,”orientation=horizontal“時,容器內部view設置的layout_gravity屬性只在上、下垂直方向上生效;
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#f00"android:orientation="horizontal"><TextViewandroid:text="TextView在這里"android:layout_width="200dp"android:layout_height="200dp"android:background="#ff0"android:layout_gravity="center"/> </LinearLayout>效果:
?????????之所以出現上面的效果,是因為布局容器的布局方向是水平的。所以線性布局內部的所有view都會一個接一個地水平排列。這種情況下,添加view的話會往水平方向添加,所以水平方向不能移動布局內部的view;布局內部垂直方向假如view不能鋪滿布局的高度,則view在上下方向有空隙空間,就可以挪動。基于此,所以可以調節view上下的位置。
當設置android:orientation="vertical"時效果為:
?原因分析同上。
2、FrameLayout
<FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#f00"><TextViewandroid:text="TextView在這里"android:layout_width="200dp"android:layout_height="200dp"android:background="#ff0"android:layout_gravity="center"/> </FrameLayout>效果:
?
項目中使用
??????? 在實際項目中想實現如下效果,其中水果對應的imageview要求是居中擺放的。
?xml文件內容如下:
??????? 需要強調一點的是,為了讓水果控件imageview在水平和垂直方向都居中顯示,在imageview外部添加了一層線性布局,給該線性布局添加gravity="center"才讓imageview水平垂直方向都居中了。 假如我們直接使用imageview(xml文件中被注釋部分), 由于最外層線性布局是垂直方向排列布局的, 其內部view只能在水平方向對齊,這種情況下我們沒辦法讓imageview在垂直方向居中。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".activity.TestAnimatorActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingRight="30dp"android:paddingLeft="30dp"><Buttonandroid:id="@+id/play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentStart="true"android:text="開始"/><Buttonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:text="暫停"/></RelativeLayout><!--<ImageViewandroid:id="@+id/image"android:layout_width="300dp"android:layout_height="300dp"android:background="#ff0000"/>--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><ImageViewandroid:id="@+id/image"android:layout_width="300dp"android:layout_height="300dp"android:background="@drawable/framelist"/></LinearLayout></LinearLayout>總結
以上是生活随笔為你收集整理的layout_gravity和gravity的区分和应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51单片机基础
- 下一篇: 《C语言基础学习笔记》—— 黑马程序员