LinearLayout

  • layout_gravity:组件在父容器里的对齐方式
  • gravity:组件包含的所有子元素的对齐方式
  • layout_weight:在原有基础上分配剩余空间,一般把layout_height都设置为0dp再使用此属性
  • 设置分割线可以用divider属性,或者插入View
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal|bottom"
android:divider="@drawable/ic_baseline_horizontal_rule_24"
android:showDividers="middle"
android:dividerPadding="20dp"
xmlns:android="http://schemas.android.com/apk/res/android"> <View android:layout_height="1dp"
android:layout_width="match_parent"
android:background="#ff0000"/> <LinearLayout android:layout_height="100dp"
android:layout_gravity="left"
android:layout_width="100dp"
android:background="#ff0000"/> <LinearLayout android:layout_height="100dp"
android:layout_width="100dp"
android:background="#00ff00"/> <LinearLayout android:layout_height="100dp"
android:layout_width="100dp"
android:background="#0000ff"/> </LinearLayout>

RelativeLayout

  • 可以根据父容器定位,也可以根据兄弟组件定位
  • margin设置组件与父容器的边距
  • padding设置组件内部元素的边距
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_height="match_parent"
android:layout_width="match_parent"
android:padding="10dp"
xmlns:android="http://schemas.android.com/apk/res/android"> <RelativeLayout
android:id="@+id/lt1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerInParent="true"
android:background="#ff0000"/> <RelativeLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_above="@id/lt1"
android:layout_margin="100dp"
android:background="#00ff00"/> </RelativeLayout>

FrameLayout

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"> <FrameLayout android:layout_height="300dp"
android:layout_width="300dp"
android:background="#ff0000"/> <FrameLayout android:layout_height="200dp"
android:layout_width="200dp"
android:foreground="@drawable/ic_baseline_language_24"
android:foregroundGravity="right|bottom"
android:background="#0000ff"/> <FrameLayout android:layout_height="100dp"
android:layout_width="100dp"
android:background="#00ff00"/> </FrameLayout>

TableLayout

  • collapseColumns:隐藏列,从0开始

  • stretchColumns:有剩余空间才会拉伸

android:collapseColumns="1,3"
android:stretchColumns="2"
  • shrinkColumns:有挤压的时候才能收缩
  • layout_column:显示在第几列
  • layout_span:横向跨几列
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:layout_height="match_parent"
android:layout_width="match_parent"
android:shrinkColumns="2"
xmlns:android="http://schemas.android.com/apk/res/android"> <TableRow>
<Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_span="2"
android:text="按钮0"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_column="3"
android:text="按钮1"/>
</TableRow> <TableRow>
<Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮0"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮1"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮2"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮3"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮4"/>
</TableRow> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮0"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮1"/> </TableLayout>

GridLayout

  • columnCount、rowCount:最大行列数,与orientation配合使用
  • layout_row、layout_column:显示所在行列
  • layout_columnWeight:横向剩余空间分配方式
  • layout_columnSpan:横向跨列,配合layout_gravity使用
<?xml version="1.0" encoding="utf-8"?>
<GridLayout android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮0"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_row="1"
android:layout_column="0"
android:layout_columnSpan="3"
android:layout_gravity="fill"
android:text="按钮1"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_row="0"
android:layout_column="1"
android:text="按钮2"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:text="按钮3"/> <Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="按钮4"/>
</GridLayout>

ConstraintLayout

......

自定义布局

  • 创建一个标题布局title.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal"
android:background="#FFFF00"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/btn_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"/> <TextView
android:text="标题"
android:layout_gravity="center"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"/>
<Button
android:id="@+id/btn_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="菜单"/>
</LinearLayout>
  • 在onCreate()中关闭自带的标题栏
// 隐藏标题栏,使用自定义的
ActionBar actionBar = getSupportActionBar();
if (actionBar != null){
actionBar.hide();
}
  • 在activity_main.xml中引用布局文件
<include layout="@layout/title"/>

自定义控件

  • 也可以用控件的方式使用,TitleLayout.java
package com.example.myalterdialog;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast; import androidx.annotation.Nullable; public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs); LayoutInflater.from(context) // 构建出一个LayoutInflater对象
.inflate(R.layout.title, this); // 第二个参数是给加载好的布局添加一个父布局
findViewById(R.id.btn_left).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "返回", Toast.LENGTH_SHORT).show();
}
});
findViewById(R.id.btn_right).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "菜单", Toast.LENGTH_SHORT).show();
}
});
}
}
  • activity_main.xml中使用自定义控件
<com.example.myalterdialog.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

布局(LinearLayout,RelativeLayout,FrameLayout,TableLayout,GridLayout,ConstraintLayout)的更多相关文章

  1. Android四种基本布局(LinearLayout \ RelativeLayout \ FrameLayout \ TableLayout)

    ------------------------------------------LinearLayout---------------------------------------------- ...

  2. android 基本布局(RelativeLayout、TableLayout等)使用方法及各种属性

        本文介绍 Android 界面开发中最基本的四种布局LinearLayout.RelativeLayout.FrameLayout.TableLayout 的使用方法及这四种布局中常用的属性. ...

  3. 浅谈Android五大布局——LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout和TableLayout

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建 筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLa ...

  4. Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局

    在Android中提供了几个常用布局: LinearLayout线性布局 RelativeLayout相对布局 FrameLayout帧布局 AbsoluteLayout绝对布局 TableLayou ...

  5. Android UI -- 布局介绍(布局包括FrameLayout, LinearLayout, RelativeLayout, GridLayout)

    首先介绍常用布局类 FrameLayout 最简单的布局管理器. 这个布局管理类有几个特性: 添加组件默认在左上角的. 如果添加多个组件会叠加到一起,并且都在左上角.(可以通过一gravity属性改变 ...

  6. Android 五大布局(LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout、TableLayout )

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  7. android 学习 之 布局(下)LinearLayout,RelativeLayout,TableLayout,FrameLayout

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  8. 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析

    转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/51159419 如何优化你的布局层级结构之RelativeLayout和LinearLa ...

  9. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

    UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...

  10. [转]浅谈Android五大布局(二)——RelativeLayout和TableLayout

    在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局Relati ...

随机推荐

  1. 为python编译C++模块时一定要注意的事情—————不要在anaconda环境下使用cmake来编译C++扩展模块!!!

    平时搞python的人很多都会有安装C++扩展模块的需求,而往往这些C++模块都是使用CMAKE做编译配置的,但是如果你这时候shell环境是使用anaconda的话,那么cmake默认调用的GCC和 ...

  2. Error in v-on handler: "TypeError: Cannot read property 'value' of undefined"

    Error in v-on handler: "TypeError: Cannot read property 'value' of undefined" 报错如下所示,即 在运行 ...

  3. 6. 从0开始学ARM-异常及中断处理、异常向量表、swi

    一.异常(Exception) 异常是理解CPU运转最重要的一个知识点,几乎每种处理器都支持特定异常处理,中断是异常中的一种. 有时候我们衡量一个操作系统的时候实时性就是看os最短响应中断时间以及单位 ...

  4. Ubuntu 写入磁盘映像

    使用 dd 命令 dd 命令是 Unix 和 Unix-like 操作系统中用于低级别数据复制和转换的命令.它可以直接操作设备文件(如硬盘.光盘.USB 驱动器等),适用于备份.恢复.制作启动盘等任务 ...

  5. 浅触go中的单元测试

    对于一个写好的功能模块,我们还需要对其进行单元测试,确保该模块不会出现其他bug,或者输出不是期望结果 对于一个go程序,主要设计以下命令: 执行测试 go test -v / go test 执行某 ...

  6. JMonkeyEngine3 Android 旋转 、放大、缩小一个方块 demo 版本3.5.2-stable

    1. Class,里面是旋转的逻辑,很简陋,可以自己优化 import android.util.Log; import com.jme3.app.SimpleApplication; import ...

  7. Python批量分割Excel后逐行做差、合并文件的方法

      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,首先依据某一列数据的特征截取我们需要的数据,随后对截取出来的数据逐行求差,并基于其他多个文件夹中同样大量 ...

  8. 通过DashScope API调用将多种模态转换为向量

    本文介绍如何通过模型服务灵积DashScope进行 多模态向量生成 ,并入库至向量检索服务DashVector中进行向量检索. 模型服务灵积DashScope,通过灵活.易用的模型API服务,让各种模 ...

  9. Playwright 源码 BrowserType

    playwright-java 的 Browser.BrowserContext.Page 挺好理解的,唯独这厮,就有一丢丢 -- package com.microsoft.playwright; ...

  10. Mongodb入门4

    今天学习一下MongoDB数据库的索引. 因为养的鱼生病了,所以抽空晚上学习记录一下. 这里借用一下菜鸟教程的原文: 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描 ...