【Android】布局笔记

2019-05-17  本文已影响0人  感同身受_

#布局笔记

1. 线性布局:

LinearLayout:

  1. layout_gravity:和gravity不同的是,gravity是用于指定文字在控件中的对齐方式;layout_gravity用于指定控件在布局中的对齐方式
  2. weight:
    (权重):每个控件所占的比例

LinearLayout特有的属性它表示比重的意思,可实现百分比布局

如果控件为“match_parent”,则layout_weight的值与占用比重是反相关的,其值越大,它占用的比重越小。

如果控件为"wrap_content",则对比重的判断会变为正相关,即其值越小,占用的空间越少

一个页面中,有一个有权重的的控件和一个无权重的控件,系统会先给无权重的控件分配空间。

2. 相对布局:

RelativeLayout:

相对于父布局进行定位:

  1. layout_alignParentRight

  2. layout_alignParentLeft

  3. layout_alignParentTop

  4. layout_alignParentBottom

  5. layout_centerInParent

  6. layout_centerVertical:垂直居中

  7. layout_centerHorizontal:水平居中

  8. layout_centerInParent:父类居中
    相对于控件进行定位:

  9. layout_centerInParent="true"

  10. layout_above="@id/button"

  11. layout_below="@id/button"

  12. layout_toLeftOf="@id/button"

  13. layout_toRightOf="@id/button"

【注】

相对布局:按照控件之间的相互位置进行排布。存在一个参照物的概念一般来说再相对布局重的空间都会存在id的属性

centerInparent:位于父类的中部

alignParentRight :对齐父类的右方,其中方向性的单词可以更换

toRightOf:在某个控件的右方,方向性的单词可以更换

alignBottom:底部对齐

alignRight:右部对齐,

@+id:表示的是系统中本来不存在对应的id值,需要将这个主d值诗加到系统当中,

@id,表示从系统中去除已经填加好的id

alignBaseLine:基准线对开,

针对相对布局而言,一般都不会过多的给定很多相关联的属性,否则模合性就会大大增加,

3.表格布局:

TableLayout是继承子LinearLayout的(可以不指定宽和高,系统会自动给定)

  1. TableRow:表示一行
  2. 可以使用layout_weight对每一列的权重进行分配(因为继承了LinearLayout)
  3. stretchColumns:拉伸某一列。让布局显得不紧凑(参数为0,1,2,3...)
  4. shrinkColumns:回缩某一列。让整体的内容都得以实现。(参数为0,1,2,3...)
  5. collapseColumns:隐藏某一列(参数为0,1,2,3...)

4. 帧布局:

frameLayout

  1. 所有的控件都会默认摆放在布局的左上角
  2. 在帧布局中定义的控件每一个都是以画面的形式进行呈现
  3. 最开始定义的控件出现在最下方,最后定义的控件出现在最上方(表面)
  4. 位置:可通过layout_gravity=""对位置进行修改,也可以用margin

应用:

  1. 帧布局可以使用手机联系人的导航显示上字母的呈现。
  2. 帧布局使用在帧动画。

5.绝对布局:

AbsoluteLayout

  1. AbsoluteLayout又可以叫做坐标布局,可以直接指定子元素的绝对位置
  2. 这种布局简单直接,直观性强
  3. 使用android:layout_x属性来确定X坐标,以左上角为顶点。

使用android:layout_y属性确定Y坐标,以左上角为顶点。

  1. 如果子元素不设置和那么它们的默认值是0,会出现在左上角。
  2. 由于手机屏幕尺寸差别较大,使用绝对定位的适应性会比较差,不推荐使用

6.网格布局:

GridLayout

网格布局:在4.0之后出现的布局,

  1. columnCount:存在多少列

  2. RowCount:存在多少行

  3. layout_rowSpan:占据多少行

  4. layout_columnSpan占据多少列
    【注】GridLayout和TableLayout有什么不同?

  5. TableLayout定义TableRow来呈现内容

  6. GridLayout中可以定义控件来直接使用,

  7. 表格布局中只能合并列不能合并行,但是在网格布局中既能和并列也能合并行

7. 百分比布局:

PercentFrameLayout

使用前:在app/build.gradle文件,dependencies闭包中添加:

implementation com.android.support:percent:28.2.1

【注】每当修改gradle文件后,需要点击Sync Now对代码进行同步。

用法:

  1. app:layout_widthPercent="50%"
  2. app:layout_heightPercent="50%"

8. 引入布局:

先在布局中建一个title.xml,再在activity_main.xml中引用:

用法:

<include layout="@layout/title"/>

ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
    actionBar.hide();
}

9. 自定义控件:

创建一个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"/>

上一篇下一篇

猜你喜欢

热点阅读