像素和颜色
像素:
- Android支持的像素单位: px(像素)、 in(英寸)、mm(毫米)、pt(镑)、dp、sp
- 常用单位: px、 dp、 sp
颜色:
- 系统Color类定义的常用颜色取值
- 十六进制颜色取值
View和ViewGroup
所有的控件和布局都是直接或者间集成自View类
View的常见属性
- id:组件编号
- layout_width:组件宽度
- layout_height:组件高度
- layout_margin:外边距
- padding:内边距
- minWidth:最小宽度
- minHeight:最小高度
- background:背景,可以为颜色,也可以是图片
- visibility:是否可见
- layout_gravity:组件与上级对齐方式
ViewGroup容器与View组件的关系图
LinearLayout布局
- 线性布局
- 布局方式从左到右或者从上到下
常见属性
- 同View
- orientation:水平布局或者垂直布局
TextView组件
主要作用:用于显示文本
常见属性
- 同View
- 其他常用属性:text、textColor、textSize、ellipsize
Botton组件和事件监听
主要作用:用于响应用户点击事件
常见属性
- 同TextView
事件监听
- 获取按钮
- 实现事件监听
- 创建处理业务
创建新页面和页面跳转
创建页面
- 创建Activity类
- 创建布局文件
- 在ManiFests中注册页面
Intent实现页面跳转
- 创建Intent类
- 实现跳转页面
代码部分:
part1:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 高度和宽度等使用dp,字体大小使用sp -->
<!-- 100单位的px,在分辨率不同的机子显示的大小是不一样的 -->
<!--
LinearLayout:线性布局
默认的布局方式是:水平排列
注意点:排列的适合超出屏幕部分并不会折行,还是按照设定的布局方式进行排列
更改布局方式:horizontal(水平排列,默认的),vertical(垂直排列)
-->
<!--
layout_width:宽度
取值:match_parent(匹配父控件)、wrap_content(匹配内容)、自定义尺寸
layout_height:高度
取值:match_parent(匹配父控件)、wrap_content(匹配内容)、自定义尺寸
-->
<!--
margin:外边距,设定组件的外部边距
layout_margin:上下左右
layout_marginTop:上
layout_marginBottom:下
layout_marginLeft:左
layout_marginRight:右
-->
<!--
padding:内边距,设定组件的内部边距
paddingTop:上
paddingBottom:下
paddingLeft:左
paddingRight:右
-->
<!--
visibility:是否可见
取值:gone(不可见且不占空)、invisible(不可见占空)、visible(可见、默认值)
-->
<!--
layout_gravity:组件于父组件对齐方式
垂直布局:只能做水平方向的布局控制,比如:left、right、center、center_horizontal
水平布局:只能做垂直方向的布局控制,比如:top、bottom、center、center_vertical
gravity:对于组件内部元素约束其对齐方式,取值:top、bottom、left、right、center、center_horizontal、center_vertical
-->
<!--
layout_weight:权重比
按份分:
垂直等分:设置高度为0dp,然后分配权重比
水平等分:设置宽度为0dp,然后分配权重比
当宽度或高度不为0dp的时候:先扣除定义的宽度或高度,然后再按照权重比分配剩余尺寸,然后再加上定义的高度或宽度
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="horizontal">
<!--
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#C31B1B"
android:layout_weight="1">
</View>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#0F48E6"
android:layout_weight="1">
</View>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#000000"
android:layout_weight="1">
</View>
-->
<!--
TextView:文本控件,用于显示文本
text:文本内容
textSize:文本的大小
textColor:文本的颜色
lines:行数,指定多少行就是多少行,文本高度就是行数的高度
maxLines:最大行数,最多占据多少行,文本的高度最大就是设置的行数,若没有填充满,高度随文本高度来定
minLines:最小行数,最少占据多少行,文本的高度最小就是设置的行数,可以继续往下填充,高度随文本高度来定
ellipsize:字符省略方式,start:开头,middle:中间,end:结尾,none:不需要省略,注意:需要配合singleLine使用
-->
<!--
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="好好学习天天向上好好学习天天向上好好学习天天向上好好学习天天向上好好学习天天向上"
android:textColor="#240A5A"
android:textSize="40sp"
android:maxLines="2"
android:singleLine="true"
android:ellipsize="end">
</TextView>
-->
<!-- 演示layout_gravity -->
<!--
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="好好学习"
android:textColor="#240A5A"
android:textSize="40sp"
android:layout_gravity="center_vertical">
</TextView>
-->
<!-- 演示gravity -->
<!--
<TextView
android:layout_width="300dp"
android:layout_height="300dp"
android:text="好好学习"
android:textColor="#EC5286"
android:textSize="40sp"
android:gravity="center_horizontal|bottom">
</TextView>
-->
<!--
Button:按钮
id的定义方式:@+id/id的名称
-->
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="猜数字游戏"
android:textSize="20sp"
android:textColor="#2196F3"
android:background="#FF9800">
</Button>
</LinearLayout>
效果图:
activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<!--
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是第二个界面"></TextView>
-->
<!-- 猜数字游戏 -->
<TextView
android:id="@+id/resultTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请开始猜数字"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:textSize="25sp">
</TextView>
<TextView
android:id="@+id/tipsTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入数字:"
android:layout_gravity="right"
android:layout_marginTop="6dp"
android:textSize="20sp">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button1"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="1"></Button>
<Button
android:id="@+id/button2"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="2"></Button>
<Button
android:id="@+id/button3"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="3"></Button>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button4"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="3"></Button>
<Button
android:id="@+id/button5"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="4"></Button>
<Button
android:id="@+id/button6"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="5"></Button>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button7"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="7"></Button>
<Button
android:id="@+id/button8"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="8"></Button>
<Button
android:id="@+id/button9"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="9"></Button>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button0"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:text="0"></Button>
<Button
android:id="@+id/submitButton"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="2"
android:text="确认"></Button>
</LinearLayout>
</LinearLayout>
效果图:
part2:
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置该页面的布局内容
/*
* 取用方式的理解:R.layout.activity_main
* R:可以理解为res,指的是资源
* layout:指代layout文件夹
* activity_main:指代要取用的文件的名称
* */
setContentView(R.layout.activity_main);
//Intent intent = new Intent(this, Main2Activity.class); //没有问题,而下面匿名内部类相当于OnClickListener
//1.获取Button
Button button = findViewById(R.id.button); //导包快捷键:Alt+Enter
//2.给Button绑定事件
button.setOnClickListener(new View.OnClickListener() { //匿名内部类形式,OnClickListener为抽象类(×)或接口(√)
@Override
public void onClick(View v) {
//3.处理业务逻辑
//System.out.println("按钮被点击了!!!!!!");
//public Intent(Context packageContext, Class<?> cls):第一个参数是当前页面(实例),第二个参数是需要跳转的页面
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
}
});
}
}
Main2Activity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Random;
public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
//随机生成的数字
private int number;
//提示文字,用于显示用户猜的数字
private TextView tipsTextView;
//猜的数字
private String guessNumber;
//结果文字,用于显示结果信息
private TextView resultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//生成随机数
Random random = new Random();
number = random.nextInt(100);
//获取提示文本
tipsTextView = findViewById(R.id.tipsTextView);
//初始化猜的数字
guessNumber = "";
//获取结果文本
resultTextView = findViewById(R.id.resultTextView);
//获取页面所有的元素
findViewById(R.id.button0).setOnClickListener(this); //this指当前实例 Main2Activity
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
findViewById(R.id.button4).setOnClickListener(this);
findViewById(R.id.button5).setOnClickListener(this);
findViewById(R.id.button6).setOnClickListener(this);
findViewById(R.id.button7).setOnClickListener(this);
findViewById(R.id.button8).setOnClickListener(this);
findViewById(R.id.button9).setOnClickListener(this);
//获取确认按钮
findViewById(R.id.submitButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//1.比较数字
if (!guessNumber.equals("")) {
//2.显示比较结果
int guessNumberInt = Integer.parseInt(guessNumber);
if (guessNumberInt > number) {
resultTextView.setText("猜大了");
guessNumber = "";
tipsTextView.setText("请输入数字:");
} else if (guessNumberInt < number) {
resultTextView.setText("猜小了");
guessNumber = "";
tipsTextView.setText("请输入数字:");
} else {
resultTextView.setText("恭喜你,猜正确了!数字是:" + number);
}
}
}
});
}
@Override
public void onClick(View v) {
//1.获取button数字
Button button = (Button) v;
String buttonText = button.getText().toString();
//System.out.println("获取到的按钮的数字是" + buttonText);
//2.将数字添加到提示上
String tips = tipsTextView.getText().toString();
if (tips.equals("请输入数字:")) {
//第一次输入:请输入数字: -> 您输入的数字是:xxx
tipsTextView.setText("您输入的数字是:" + buttonText);
} else {
//第二次输入:您输入的数字是:x -> 您输入的数字是:xx
tipsTextView.setText(tips + buttonText);
}
//3.更改猜的数字
guessNumber = guessNumber + buttonText;
}
}
注:
android:gravity和android:layout_gravity区别:
android:gravity属性是对该view中内容的限定。比如一个button上面的text,你可以设置该text相对于view的靠左,靠右等位置。
android:layout_gravity属性是用来设置该view相对与父view的位置。比如一个button在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置。