文章目录
布局管理器
常用布局管理器
无论使用哪种布局管理器,布局管理器前两句不变
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
相对布局管理器RelativeLayout
- gravity和ignoreGravity属性
//设置宽度和高度
android:layout_width="match_parent"
android:layout_height="match_parent"
//设置内边距
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
//指向使用布局的Activity,可删除
tools:context="com.example.MainActivity">
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_hello_world"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
//设置相对组件
android:gravity="center"
//设置相对组件id不受控制
android:ignoreGravity="@id/user"
tools:context="com.example.hahaha.helloworld.HelloWorldActivity">
<TextView
//设置相对组件id
android:id="@+id/user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
利用参数设置:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_hello_world"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center"
android:ignoreGravity="@id/user"
tools:context="com.example.hahaha.helloworld.HelloWorldActivity">
//设置相对组件2
<TextView
android:id="@+id/user"//相对组件id
android:layout_width="wrap_content"//相对组件宽
android:layout_height="wrap_content"//相对组件高
android:layout_centerInParent="true"//相对组件居中
android:text="Hello World!" />
//设置相对组件2
<TextView
android:id="@+id/user1"//相对组件id
android:layout_width="wrap_content"//相对组件宽
android:layout_height="wrap_content"//相对组件高
//设置相对组件user1位于user下方
android:layout_below="@+id/user"
android:text="明日" />
</RelativeLayout>
结果:
例子:
- 利用相对布局实现软件更新提示页面
-
设置背景
将背景图片放置到对应module下的mipmap中。
使用android:background属性:android:background="@mipmap/bg"
-
设置文本框居中:android:layout_centerInParent属性
android:layout_centerInParent=“true”
-
设置文本框id:android:id="@+id/text1View1"
-
设置文本框内容:android:text=“发现有新版本,您想现在安装吗??”
res>layout>activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@mipmap/bg"
tools:context="com.example.MainActivity">
<TextView
android:id="@+id/text1View1"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发现有新版本,您想现在安装吗??" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="以后再说"
android:layout_below="@+id/text1View1"
android:layout_alignRight="@+id/text1View1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button1"
android:text="现在更新"
android:layout_below="@+id/text1View1"
android:layout_toLeftOf="@+id/button2"
/>
</RelativeLayout>
设计视图
main>java>MainActivity.java
package com.example;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
结果:
注:还未给button添加activity,点击还不能跳转
线性布局管理器LinearLayout
组件横向或者纵向进行排列
特点:组件一个挨着一个排列到窗口,剩余的组件不会显示出来
-
orientation属性
新建一个module,在新建的module中编写:
设置水平or垂直线性布局管理器:android:orientation="horizontal"或者android:orientation=“vertical”
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="horizontal"
tools:context="com.example.linearlayout.MainActivity">
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮1" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮3" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮5" />
</LinearLayout>
切换到设计视图,由于按钮5到窗口边界,故不不显示
点击切换为横屏就能够显示设置的所有按钮
修改参数为:android:orientation="vertical"即可以转换为纵向视图
添加:android:gravity="center"则组件居中显示
设置:android:gravity="right"则组件居右显示
设置为:android:gravity="right|bottom"则组件居右下角显示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
android:gravity="right|bottom"
tools:context="com.example.linearlayout.MainActivity">
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮1" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮3" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮5" />
</LinearLayout>
-
子组件属性
layout_weight属性:设置组件所占权重,为layout_weight分配值是对剩余空间的操作,而不是对整个空间的分配操作。
acyivity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="horizontal"
tools:context="com.example.linearlayout.MainActivity">
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮11111111"
android:layout_weight="1"
/>
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮2"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮3" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="按钮5" />
</LinearLayout>
MainActivity.java
package com.example.linearlayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
案例:实现微信登陆页面(使用垂直线性布局管理器实现)
创建一个新的module
布局文件:res>layout>main_activity.xml 使用垂直线性布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
# 使用垂直线性布局
android:orientation="vertical"
tools:context="com.example.MainActivity">
//添加编辑框
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp" # 设置向上内边距
android:hint="QQ号/微信号/Email" # 暗示文字
android:drawableLeft="@mipmap/account" # 设置编辑框前面的文字图片
/>
//添加编辑框
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp" # 设置向上内边距
android:hint="密码" # 暗示文字
android:drawableLeft="@mipmap/password" # 设置编辑框前面的文字图片
/>
//添加登陆按钮
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"
android:textColor="#FFFFFF" # 设置文本颜色
android:background="#FF009688" # 设置背景色
/>
//修改自动生成的hello world文本
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登陆遇到问题?"
android:paddingTop="20dp" #设置向上的内边距
android:layout_gravity="center_horizontal" # 设置水平居中
/>
</LinearLayout>
自动生成的main>java>MainActivity.java
package com.example;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
修改自动生成的AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android" package="com.example">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
// 修改主题颜色,将原来的默认的蓝色改为浅色
android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
结果:
帧布局管理器FrameLayout
为每一个放入其中的组件创建一个空白区域,这些组件按照先后次序重叠放置,后面的组件会覆盖前面的组件。
创建一个新的module:framelayout
修改自动生成的布局relatelayout为帧布局管理器framelayout
组件默认覆盖前面组件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:background="#FF0000" # 设置背景色为红色
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:background="#FFFF00" # 设置背景色为黄
/>
</FrameLayout>
设计视图:前面红色组件被黄色组件所覆盖
修改第一个文本框组件的内容text
如果后面的组件比前面组件小,则只能覆盖前面组件的一部分
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!Hello World!" # 修改文本内容
android:background="#FF0000" # 设置背景色为黄
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:background="#FFFF00" # 设置背景色为黄
/>
</FrameLayout>
设计视图:黄色组件自覆盖了红色组件一部分
在mipmap中放置想要设置的前景图片
设计前景图:android:foreground="@mipmap/bg"
设计前景图位置在右下角:android:foregroundGravity=“right|bottom”
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:foreground="@mipmap/bg" # 设计前景图
android:foregroundGravity="right|bottom" # 设计前景图相对位置在右下角
tools:context="com.example.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!Hello World!"
android:background="#FF0000"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:background="#FFFF00"
/>
</FrameLayout>
修改前景图位置为左下角:android:foregroundGravity=“left|bottom”
修改前景图位置为左上角: android:foregroundGravity=“left|top”
可以看到文本框被自动覆盖
实例:利用帧布局管理器居中显示重叠的正方形,并添加前景图片
将前景图片资源复制到mipmap中
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:foreground="@mipmap/log3" # 设置前景图
android:foregroundGravity="right|bottom" # 设置相对位置
tools:context="com.example.MainActivity">
<TextView
android:layout_width="280dp"
android:layout_height="280dp"
android:layout_gravity="center" # 设置相对位置居中
android:background="#FF0000FF" # 设置背景色
android:text="蓝色背景的textview" # 设置文本内容
android:textColor="#FFFFFF" # 设置文本颜色
/>
<TextView
android:layout_width="230dp"
android:layout_height="230dp"
android:layout_gravity="center" # 设置相对位置居中
android:background="#FF0077FF" # 设置背景色
android:text="天蓝色背景的textview" # 设置文本内容
android:textColor="#FFFFFF" # 设置文本颜色
/>
<TextView
android:layout_width="180dp"
android:layout_height="180dp"
android:layout_gravity="center" # 设置相对位置居中
android:background="#FF00B4FF" # 设置背景色
android:text="水蓝色背景的textview" # 设置文本内容
android:textColor="#FFFFFF" # 设置文本颜色
/>
</FrameLayout>
自动生成的AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example">
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
自动生成的MainActivity.java
package com.example;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
表格布局管理器GridLayout
以行列的形式来控制UI组件
设置一个表格行:<TableRow> </TableRow>
表格行里面可以嵌套其他,例如按钮:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.MainActivity">
# 添加一个表格行
<TableRow>
# 一个表格行里面添加按钮1
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1" />
# 一个表格行里面添加按钮2
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />
# 一个表格行里面添加按钮3
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3" />
</TableRow>
# 添加第二个表格行
<TableRow>
# 一个表格行里面添加按钮4
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮4" />
# 一个表格行里面添加按钮5
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮5" />
# 一个表格行里面添加按钮6
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮6" />
</TableRow>
</TableLayout>
设计视图:
设置隐藏列:android:collapseColumns="1"
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:collapseColumns="1" # 设置隐藏列为第二列,从0计数
tools:context="com.example.MainActivity">
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3" />
</TableRow>
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮5" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮6" />
</TableRow>
</TableLayout>
设置某列被拉伸:android:stretchColumns="2"
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:collapseColumns="1"
android:stretchColumns="2" # 设置第3列被拉伸,从0计数
tools:context="com.example.MainActivity">
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3" />
</TableRow>
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮5" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮6" />
</TableRow>
</TableLayout>
设置按钮收缩:android:shrinkColumns="1"
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:stretchColumns="1"
android:shrinkColumns="1" # 设置第二列按钮收缩
tools:context="com.example.MainActivity">
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3111111111111111111111" />
</TableRow>
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮5" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮6" />
</TableRow>
</TableLayout>
可以看到按钮3太宽时候,按钮2被收缩
也可以不使用<TableRow> </TableRow>
,直接向布局管理器添加组件也行
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:stretchColumns="1"
android:shrinkColumns="1"
tools:context="com.example.MainActivity">
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3111111111111111111111" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮5" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮6" />
</TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮6" />
</TableLayout>
实例:实现喜马拉雅用户登陆界面
四行四列的表格布局管理器实现:保证内容正好显示屏幕中间,如果屏幕宽了也显示对应位置,只不过两边列宽了
res>layout>main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@mipmap/bg" # 设置背景图片
android:stretchColumns="0, 3" # 设置第一列和第四列可拉伸
tools:context="com.example.MainActivity">
# 设置第一个表格行
<TableRow android:paddingTop="200dp">
# 设置第一行第一列
<TextView />
# 设置第一行第2列
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="账 号 :"
android:textSize="18sp" # 文本大小
android:textColor="#FFFF00" # 文本颜色
/>
# 设置第一行第3列:输入框
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="邮箱或手机号"
/>
# 设置第一行第4列
<TextView />
</TableRow>
# 设置第二个表格行
<TableRow>
<TextView />
# 设置2行第2列
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密 码 :"
android:textSize="18sp"
android:textColor="#FFFF00"
/>
# 设置2行第3列:输入框
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入6~16为数字或字母"
/>
<TextView />
</TableRow>
# 设置第3个表格行
<TableRow>
# 设置3行第1列
<TextView />
# 设置3行第2列:按钮
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注 册 :"
/>
# 设置3行第3列:按钮
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登 陆"
android:textColor="#FFFFFF"
android:background="#FF8247"
/>
# 设置3行第4列
<TextView />
</TableRow>
# 设置第4个表格行:设有内边距
<TableRow android:paddingTop="10dp">
<TextView />
<TextView />
# 设置4行第3列
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="忘记密码"
android:textColor="#FF4500"
android:gravity="right" # 设置右对齐
/>
<TextView />
</TableRow>
</TableLayout>
自动生成的MainActivity.java
package com.example;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
自动生成的AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example">
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
结果:
网格布局管理器GridLayout
比表格布局管理器更加灵活:不仅可以跨行显示,还可以跨行显示
新建一个gridlayout的module
参数:
网格最大列数设置 android:columnCount="2"
网格最大行数设置 android:rowCount="2"
网格排列方式是水平还是垂直 android:orientation="vertical"
<?xml version="1.0" encoding="utf-8"?>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:columnCount="2" # 设置最大列数为2
tools:context="com.example.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮5" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3"
android:layout_row="23"
android:layout_column="7" />
</GridLayout>
<?xml version="1.0" encoding="utf-8"?>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:columnCount="2" # 设置最大列数为2
android:orientation="vertical" # 设置垂直排列
tools:context="com.example.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮5" />
</GridLayout>
<?xml version="1.0" encoding="utf-8"?>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:columnCount="2"
android:rowCount="2" # 设置最大行数为2
android:orientation="vertical"
tools:context="com.example.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮4" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮5" />
</GridLayout>
控制子组件参数:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:rowCount="2" # 设置最大行数
tools:context="com.example.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1"
android:layout_column="0" # 设置按钮1所在行
android:layout_row="0" # 设置按钮1所在列
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮3"
android:layout_column="0" # 设置按钮2所在行
android:layout_row="1" # 设置按钮2所在列
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮2"
android:layout_column="1"
android:layout_row="0"
android:layout_rowSpan="2" # 设置按钮三跨行显示
android:layout_gravity="fill" # 设置相对位置为填充所有
/>
</GridLayout>
实例:网格布局管理器实现QQ聊天界面
为一个六列四行的网格布局管理器
res>layout>activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@mipmap/fall" # 设置聊天背景
tools:context="com.example.qq.MainActivity">
# 第一个聊天框
<ImageView
android:id="@+id/imageview1" # 设置id
android:src="@mipmap/c1" # 设置聊天内容图片
android:layout_gravity="end" # 设置右对齐
android:layout_columnSpan="4" # 设置跨列
android:layout_row="0" # 位于第1行
android:layout_column="1" # 位于第2列
android:layout_marginRight="5dp" # 设置右外边距
android:layout_marginBottom="20dp" # 设置底外边距
/>
<ImageView
android:id="@+id/imageview2"
android:src="@mipmap/bg1"
android:layout_row="0"
android:layout_column="5"
/>
# 第2个聊天框
<ImageView
android:id="@+id/imageview3"
android:src="@mipmap/bg1"
android:layout_row="1"
android:layout_column="0"
/>
<ImageView
android:id="@+id/imageview4"
android:src="@mipmap/c2"
android:layout_row="1"
android:layout_marginBottom="20dp"
/>
# 第3个聊天框
<ImageView
android:id="@+id/imageview5"
android:src="@mipmap/c3"
android:layout_gravity="end"
android:layout_columnSpan="4"
android:layout_row="2"
android:layout_column="1"
android:layout_marginRight="5dp"
android:layout_marginBottom="20dp"
/>
<ImageView
android:id="@+id/imageview6"
android:src="@mipmap/bg1"
android:layout_row="2"
android:layout_column="5"
/>
# 第4个聊天框
<ImageView
android:id="@+id/imageview7"
android:src="@mipmap/bg1"
android:layout_row="3"
android:layout_column="0"
/>
<ImageView
android:id="@+id/imageview8"
android:src="@mipmap/c4"
android:layout_row="3"
android:layout_marginBottom="20dp"
/>
# 第5个聊天框
<ImageView
android:id="@+id/imageview9"
android:src="@mipmap/c5"
android:layout_gravity="end"
android:layout_columnSpan="4"
android:layout_row="4"
android:layout_column="1"
android:layout_marginRight="5dp"
android:layout_marginBottom="20dp"
/>
<ImageView
android:id="@+id/imageview10"
android:src="@mipmap/bg1"
android:layout_row="4" # 位于第5行
android:layout_column="5" # 位于第6列
/>
</GridLayout>
自动生成的:AndroidMainfest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.qq">
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
自动生成的:MainActivity.java
package com.example.qq;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
结果:
注:自动文字功能为实现,聊天内容是截取的已有的聊天图片。