创建安卓程序
程序的结构
使用安卓模拟器
运行安卓应用程序
安卓扩展
安卓程序project
程序结构
app
布局构建
View:视图 占据屏幕的一片矩形的区域
Vivw类位于android.view包中,但是使用的时候一般用其子类,在android.widget中
android:id="@+id/user" id为user 组件的唯一表示
android:background="@minpmap/user" 把minpmap/user.png 作为背景 组件的背景 可为图片
或者是使用16进制颜色值#CCCCCC
android:padding="" 内边距 16dp 或者属性资源
paddingLeft Top Right Bottom
PaddingStart - Left
PaddingEnd - Right
LayoutParams类控制布局的位置 高度和宽度
可以使用具体数值 200dp 100px 也可以使用常量
MarginLayoutParams类控制外边距
优点分离界面代码和java逻辑代码
setContentView(R.layout.布局文件名)
显示布局文件的内容xml实现框架
java动态向框架中添加子view
子view的实例化一般是:
package com.liyanfeng.haisun;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
public class SunView extends View {
public float sunmapX = 0;
public float sunmapY = 0;
public SunView(Context context) {
super(context);
sunmapX = 290;
sunmapY = 130;
}
// 重写画图方法
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 实例化一个画笔
Paint paint = new Paint();
// 实例化一个位图
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.mipmap.sun);
// canvas开始画图 目标 x y 画笔 四个参数
canvas.drawBitmap(bitmap, sunmapX, sunmapY, paint);
if (bitmap.isRecycled()) {
// 强制回收图片
bitmap.recycle();
}
}
}
布局管理器:
用于控制组件的摆放的类
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
RelativeLayout>
相对布局管理器提供内部类RelativeLayout.LayoutParams
来设置布局,控制内部组件的分布方式
,需要设置在内部组件中
<RelativeLayout 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:background="#cccccc"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="应用有新版本存在,是否更新?----------"
android:textColor="#ff00f0" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text1"
android:layout_alignEnd="@+id/text1"
android:layout_alignRight="@+id/text1"
android:text="以后再说" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text1"
android:layout_toStartOf="@id/button2"
android:layout_toLeftOf="@id/button2"
android:text="马上跟新" />
RelativeLayout>
垂直排列 横向排列
orientation=“vertical” 垂直
orientation=“horizontal” 水平
垂直中 每一行只能放一个组件,且不会换行,组件一个挨着一个排满窗口后剩下的组件将不显示
水平中 每一列只能放一个组件 …
布局管理器的属性
子组件属性
例如:
子组件A80dp 子组件B120dp 屏幕 320dp默认情况下 A占用80dpB占用120dp 剩余120dp
如果设置两个子组件的weight都是1,则各占用剩余空间的50% A80+60=140dp B120+60=180dp
简陋的微信登录界面
<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"
android:padding="16dp"
tools:context=".MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="QQ号码/手机号码/电子邮件"
android:paddingBottom="20dp" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="密码"
android:paddingBottom="20dp" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"
android:textColor="#ffffff"
android:background="#ff009688"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#cccccc"
android:text="登陆遇到问题?"
android:paddingTop="20dp"
android:layout_gravity="center_horizontal"
/>
LinearLayout>
层叠显示
最先创建的在底层,最新创建的在上层,图层的方式
布局管理器属性
嵌套正方形
<FrameLayout 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"
tools:context=".MainActivity">
<TextView
android:layout_width="280dp"
android:layout_height="280dp"
android:layout_gravity="center"
android:text="111"
android:textColor="#FFFFFF"
android:background="#FF0000FF"
/>
<TextView
android:layout_width="230dp"
android:layout_height="230dp"
android:layout_gravity="center"
android:text="111"
android:textColor="#FFFFFF"
android:background="#FF0077FF"
/>
<TextView
android:layout_width="180dp"
android:layout_height="180dp"
android:layout_gravity="center"
android:text="111"
android:textColor="#FFFFFF"
android:background="#FF00B4FF"
/>
FrameLayout>
用在类表格结构 收货地址 个人中心信息
管理器属性
子组件为行 和 列
登陆界面
<TableLayout 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:stretchColumns="0,3"
tools:context=".MainActivity">
<TableRow
android:paddingTop="200dp">
<TextView />
<TextView
android:text="账 号:"
android:textSize="18sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="邮箱/手机号"/>
TableRow>
<TableRow>
<TextView />
<TextView
android:text="密 码:"
android:textSize="18sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入6-16位数字或字母"/>
TableRow>
<TableRow>
<TextView />
<Button
android:text="注 册"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FF8247"
android:text="登 录"/>
TableRow>
<TableRow
android:paddingTop="20dp">
<TextView/>
<TextView/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="忘记密码?"
android:textColor="#FF4500"
android:layout_gravity="right"/>
<TextView/>
TableRow>
TableLayout>
比较表格布局管理器 网格既可以跨列显示也能跨行显示,表格管理器只能跨行显示
布局管理器属性
内部类GridLayout.LayoutParams 控制子组件的分布
+android:layout_column 组件位于网格的第几列
+android:layout_columnSpan 子组件横向跨几列
+android:layout_columnWeight 子组件权重分配剩余位置
+android:layout_gravity 子组件以什么方式占据空间
+android:layout_row 子组件在网格的第几行
+android:layout_rowSpan 子组件纵向跨几行
+android:layout_rowWeigh 垂直权重分配剩余空间
注意:跨行跨列需要配合layout_gravity="fill"填充方式实现
通常布局管理器混合{嵌套}使用
原则