#布局笔记
##1. 线性布局:
LinearLayout:
- layout_gravity:和gravity不同的是,gravity是用于指定文字在控件中的对齐方式;layout_gravity用于指定控件在布局中的对齐方式
- weight:
(权重):每个控件所占的比例
LinearLayout特有的属性它表,示比重的意思,可实现百分比布局
如果控件为“match_parent”,则layout_weight的值与占用比重是反相关的,其值越大,它占用的比重越小。
如果控件为"wrap_content",则对比重的判断会变为正相关,即其值越小,占用的空间越少
一个页面中,有一个有权重的的控件和一个无权重的控件,系统会先给无权重的控件分配空间。
##2. 相对布局:
RelativeLayout:
相对于父布局进行定位:
-
layout_alignParentRight
-
layout_alignParentLeft
-
layout_alignParentTop
-
layout_alignParentBottom
-
layout_centerInParent
-
layout_centerVertical:垂直居中
-
layout_centerHorizontal:水平居中
-
layout_centerInParent:父类居中
相对于控件进行定位: -
layout_centerInParent=“true”
-
layout_above="@id/button"
-
layout_below="@id/button"
-
layout_toLeftOf="@id/button"
-
layout_toRightOf="@id/button"
【注】
相对布局:按照控件之间的相互位置进行排布。存在一个参照物的概念一般来说再相对布局重的空间都会存在id的属性
centerInparent:位于父类的中部
alignParentRight :对齐父类的右方,其中方向性的单词可以更换
toRightOf:在某个控件的右方,方向性的单词可以更换
alignBottom:底部对齐
alignRight:右部对齐,
@+id:表示的是系统中丰来不存在对应的id值,需要将这个主d值诗加到系统当中,
@id,表示从系统中去除已经清加好的id
alignBaseLine:基准线对开,
针对相对布局而言,一般斗不会过多的给定很多相关联的属性,否则模合性就会大大增加,
##3.表格布局:
###TableLayout是继承子LinearLayout的(可以不指定宽和高,系统会自动给定)
- TableRow:表示一行
- 可以使用layout_weight对每一列的权重进行分配(因为继承了LinearLayout)
- stretchColumns:拉伸某一列。让布局显得不紧凑(参数为0,1,2,3…)
- shrinkColumns:回缩某一列。让整体的内容都得以实现。(参数为0,1,2,3…)
- collapseColumns:隐藏某一列(参数为0,1,2,3…)
##4. 帧布局:
###frameLayout - 所有的控件都会默认摆放在布局的左上角
- 在帧布局中定义的控件每一个都是以画面的形式进行呈现
- 最开始定义的控件出现在最下方,最后定义的控件出现在最上方(表面)
- 位置:可通过layout_gravity=""对位置进行修改,也可以用margin
应用:
- 帧布局可以使用手机联系人的导航显示上字母的呈现。
- 帧布局使用在帧动画。
##5.绝对布局:
###AbsoluteLayout
- AbsoluteLayout又可以叫做坐标布局,可以直接指定子元素的绝对位置
- 这种布局简单直接,直观性强
- 使用android:layout_x属性来确定X坐标,以左上角为顶点。
使用android:layout_y属性确定Y坐标,以左上角为顶点。
4. 如果子元素不设置和那么它们的默认值是0,会出现在左上角。
5. 由于手机屏幕尺寸差别较大,使用绝对定位的适应性会比较差,不推荐使用
##6.网格布局:
###GridLayout
网格布局:在4.0之后出现的布局,
-
columnCount:存在多少列
-
RowCount:存在多少行
-
layout_rowSpan:占据多少行
-
layout_columnSpan占据多少列
【注】GridLayout和TableLayout有什么不同? -
TableLayout定义TableRow来呈现内容
-
GridLayout中可以定义控件来直接使用,
-
表格布局中只能合并列不能合并行,但是在网格布局中国既能和并列也能合并行
##6. 百分比布局:
###PercentFrameLayout PercentRelativeLayout
使用前:在app/build.gradle文件,dependencies闭包中添加:
implementation com.android.support:percent:28.2.1
【注】每当修改gradle文件后,需要点击Sync Now对代码进行同步。
用法:
- app:layout_widthPercent=“50%”
- app:layout_heightPercent=“50%”
##7. 引入布局:
先在布局中建一个title.xml,再在activity_main.xml中引用:
用法:
<include layout="@layout/title"/>
ActionBar actionBar = getSupportActionBar();if(actionBar != null){ actionBar.hide();}
##8. 自定义控件:
创建一个TitleLayout继承LinearLayout
public class TitleLayout extends LinearLayout { public TitleLayout(Context context, AttributeSet attrs){ super(context,attrs); //LayoutInflater.from 构建出一个LayoutInflater对象,后调用inflate动态加载一个布局文件 LayoutInflater.from(context).inflate(R.layout.title,this); Button titleBack = findViewById(R.id.title_back); Button titleEdit = findViewById(R.id.title_edit); titleBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ((Activity)getContext()).finish(); } }); titleEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(),"You clicked Edit button",Toast.LENGTH_SHORT).show(); } }); }}
在activity_main.xml中添加这个自定义控件:
//此项目名为uicustomviews
<com.example.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content"/>