RelativeLayout布局

RelativeLayout:相对布局,相对于上级或者平行级控件的位置。

常见属性

相对其他视图

  • layout_toLeftOf:指定视图的左侧
  • layout_toRightOf:指定视图的右侧
  • layout_above:指定视图的上方
  • layout_below:指定视图的下方
  • layout_alignLeft:指定视图左侧对齐
  • layout_alignRight:指定视图右侧对齐
  • layout_alignTop:指定视图顶部对齐
  • layout_alignBottom:指定视图底部对齐

注:蓝色长方形为基准,黄色长方形为属性设置

相对于上级视图

  • layout_centerInParent:在上级视图中间
  • layout_centerHorizontal:在上级视图水平方向居中
  • layout_centerVertical:在上级视图垂直方向居中
  • layout_alignParentTop:与上级视图顶部对齐
  • layout_alignParentBottom:与上级视图底部对齐
  • layout_alignParentLeft:与上级视图左边对齐
  • layout_alignParentRight:与上级视图右边对齐

CheckBox

主要作用:复选框

常见属性

  • checked
  • button

响应事件:设置勾选状态监听器

  • 获取CheckBox
  • 添加事件
  • 执行业务逻辑

Switch

主要作用:开关按钮

常见属性

  • textOn:右侧开启时的文本
  • textOff:右侧关闭时的文本

响应事件:设置勾选状态监听器

  • 获取CheckBox
  • 添加事件
  • 执行业务逻辑

RadioButton和RadioGroup

主要作用:单选框

常见属性

  • checked
  • button

响应事件:设置勾选状态监听器

  • 获取RadioButton
  • 添加事件
  • 执行业务逻辑

Toast

主要作用:提示信息

用法:

Toast.makeText (弹出界面,消息,显示时间). show() ;

Log

主要作用:打印日志

用法:

  • Log.v的调试,任何消息都会输出
  • Log.d的调试,仅输出debug调试的意思
  • Log.i的调试,一般提示性的消息information
  • Log.w的调试,可以看作为warning警告
  • Log.e为红色,可以想到error错误

状态列表图形

  • 状态列表图形:根据不同的状态来采用不同的图形表示

常用状态

  • state_pressed
  • state_checked
  • state_focused
  • seIected

如何使用

  • 创建drawable resource file
  • 设置不同状态下的图片
  • 使用

形状图形

形状图形:描述形状定义的图形(shape图形)

如何使用

  • 创建xml文件
  • 定义节点并初始化
  • 调用

常用属性

  • shape:根结点,描述样子,取值:rectangle(矩形)、oval(椭圆)、line(线)、ring (圆环)
  • corners:圆角
  • solid:形状的填充颜色,color颜色
  • stroke:外表线,color、width等

代码部分:

part1:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/relativeParent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="相对于父类视图">
    </Button>

    <Button
        android:id="@+id/relativeOthers"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="相对于其他视图">
    </Button>

    <Button
        android:id="@+id/checkboxButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="复选框">
    </Button>

    <Button
        android:id="@+id/radioButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="radioButton">
    </Button>

    <Button
        android:id="@+id/loginButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="登录界面">
    </Button>

</LinearLayout>
效果图:

Android的用户登录页面_android studio

activity_relative_parent.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 注:align强于center -->
    <!-- layout_centerInParent:在上级视图中间 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="centerInParent"
        android:textSize="20sp"
        android:background="#8A00D4"
        android:layout_centerInParent="true">
    </TextView>

    <!-- layout_centerHorizontal:在上级视图水平方向居中 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="centerHorizontal"
        android:textSize="20sp"
        android:background="#00BCD4"
        android:layout_centerHorizontal="true">
    </TextView>

    <!-- layout_centerVertical:在上级视图垂直方向居中 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="centerVertical"
        android:textSize="20sp"
        android:background="#6025CA"
        android:layout_centerVertical="true">
    </TextView>

    <!-- layout_alignParentTop:与上级视图顶部对齐 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Top"
        android:textSize="20sp"
        android:background="#D4D400"
        android:layout_alignParentTop="true">
    </TextView>

    <!-- layout_alignParentBottom:与上级视图底部对齐 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bottom"
        android:textSize="20sp"
        android:background="#FF5722"
        android:layout_alignParentBottom="true">
    </TextView>

    <!-- layout_alignParentLeft:与上级视图左边对齐 (默认)-->
    <!--<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Left"
        android:textSize="20sp"
        android:background="#0091D4"
        android:layout_alignParentLeft="true">
    </TextView>-->

    <!-- layout_alignParentRight:与上级视图右边对齐 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Right"
        android:textSize="20sp"
        android:background="#43EDC6"
        android:layout_alignParentRight="true">
    </TextView>

    <!-- layout_alignParentRight与layout_centerVertical合并 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="and"
        android:textSize="20sp"
        android:background="#AA4AF8"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true">
    </TextView>

    <!-- alignParentRight与layout_alignParentBottom合并 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="and"
        android:textSize="20sp"
        android:background="#FFC107"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true">
    </TextView>

    <!-- layout_centerHorizontal与layout_alignParentBottom合并 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="and"
        android:textSize="20sp"
        android:background="#FF9800"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true">
    </TextView>

</RelativeLayout>
效果图:

Android的用户登录页面_app_02

activity_relative_others.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--
        位置:
            layout_above:指定视图的上方
            layout_below:指定视图的下方
            layout_toLeftOf:指定视图的左侧
            layout_toRightOf:指定视图的右侧
        对齐方式:
            layout_alignTop:指定视图右顶部对齐
            layout_alignBottom:指定视图右底部对齐
            layout_alignLeft:指定视图右侧对齐
            layout_alignRight:指定视图左侧对齐
    -->

    <!-- 上方 -->
    <View
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="#ED4242"
        android:layout_above="@+id/baseView">
    </View>
    <!-- 下方 -->
    <View
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="#FF6C22"
        android:layout_below="@+id/baseView">
    </View>
    <!-- 左方 -->
    <View
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="#FFFF22"
        android:layout_toLeftOf="@+id/baseView">
    </View>
    <!-- 右方 -->
    <View
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="#61FF22"
        android:layout_toRightOf="@+id/baseView">
    </View>

    <!-- 合并 -->
    <View
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#124EBD"
        android:layout_marginTop="20dp"
        android:layout_below="@+id/baseView"
        android:layout_centerHorizontal="true">
    </View>

    <!-- 基准View -->
    <View
        android:id="@+id/baseView"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="#9B3E0C59"
        android:layout_centerInParent="true">
    </View>

</RelativeLayout>
效果图:

Android的用户登录页面_app_03

activity_check_box.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25sp"
        android:textColor="#000000"
        android:text="请选择兴趣爱好:">
    </TextView>

    <CheckBox
        android:id="@+id/basketball"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打篮球"
        android:layout_marginTop="10dp"
        android:layout_below="@+id/title">
    </CheckBox>

    <CheckBox
        android:id="@+id/football"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="踢足球"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/basketball"
        android:layout_below="@+id/title">
    </CheckBox>

    <CheckBox
        android:id="@+id/playGame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打王者"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@+id/football"
        android:layout_below="@+id/title">
    </CheckBox>

    <Button
        android:id="@+id/submitButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提交"
        android:layout_centerInParent="true">
    </Button>

</RelativeLayout>
效果图:

Android的用户登录页面_android studio_04

activity_radio_button.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="演示RadioButton"
        android:textSize="30sp"
        android:gravity="center">
    </TextView>

    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/manRadioButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="男"
            android:textSize="20sp">
        </RadioButton>
        <RadioButton
            android:id="@+id/womanRadioButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="女"
            android:textSize="20sp">
        </RadioButton>
    </RadioGroup>

</LinearLayout>
效果图:

Android的用户登录页面_移动开发_05

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/logo"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/logo"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp">
    </ImageView>

    <!-- 按钮/输入框设置的高度不低于44dp -->
    <EditText
        android:id="@+id/mobile"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:hint="请输入手机号"
        android:layout_below="@+id/logo"
        android:layout_marginTop="30dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:paddingLeft="10dp"
        android:inputType="number"
        android:background="@drawable/input_shape">
    </EditText>

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:hint="请输入密码"
        android:inputType="textPassword"
        android:layout_below="@+id/mobile"
        android:layout_marginTop="30dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:paddingLeft="10dp"
        android:background="@drawable/input_shape">
    </EditText>

    <Button
        android:id="@+id/loginButton"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:text="登        录"
        android:textSize="20sp"
        android:background="@drawable/button_state"
        android:textColor="#FFFFFF"
        android:layout_below="@+id/password"
        android:layout_marginTop="50dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp">
    </Button>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册账户"
        android:background="#00FFFFFF"
        android:textColor="#55E45B"
        android:layout_below="@+id/loginButton"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp">
    </Button>

</RelativeLayout>
效果图:

Android的用户登录页面_app_06

part2:

input_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 圆角 -->
    <corners android:radius="5dp"></corners>

    <!-- 填充色 -->
    <!--<solid android:color="#800D8A"></solid>-->

    <!-- 边框 -->
    <stroke android:color="#686565" android:width="0.5dp"></stroke>

</shape>
效果图:

Android的用户登录页面_android studio_07

button_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="8dp"></corners>

    <solid android:color="#07AE74"></solid>

</shape>
效果图:

Android的用户登录页面_Android的用户登录页面_08

button_state.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="8dp"></corners>

    <solid android:color="#07AE74"></solid>

</shape>
效果图:

Android的用户登录页面_Android的用户登录页面_09

logo.png

Android的用户登录页面_android_10

part3:

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //跳转相对父级布局的界面
        findViewById(R.id.relativeParent).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, RelativeParentActivity.class);
                startActivity(intent);
            }

        });

        //跳转相对其他控件布局的界面
        findViewById(R.id.relativeOthers).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, RelativeOthersActivity.class);
                startActivity(intent);
            }

        });

        //跳转checkbox的界面
        findViewById(R.id.checkboxButton).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, CheckBoxActivity.class);
                startActivity(intent);
            }

        });

        //跳转radioButton界面
        findViewById(R.id.radioButton).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, RadioButtonActivity.class);
                startActivity(intent);
            }

        });

        //跳转登录界面
        findViewById(R.id.loginButton).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                startActivity(intent);
            }

        });
    }

}

RelativeParentActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class RelativeParentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_relative_parent);
    }

}

RelativeOthersActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class RelativeOthersActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_relative_others);
    }

}

CheckBoxActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class CheckBoxActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {

    private List<String> hobbies = new ArrayList<>();
    private static final String TAG = "CheckBoxActivity"; //log如果多次使用,每次使用都创建一次tag,故定义常量且名字一般为类名

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_check_box);

        //1.监听checkbox,并将兴趣爱好收集起来
        final CheckBox checkBox = findViewById(R.id.basketball);
        checkBox.setOnCheckedChangeListener(this);
        CheckBox checkBox1 = findViewById(R.id.football);
        checkBox1.setOnCheckedChangeListener(this);
        CheckBox checkBox2 = findViewById(R.id.playGame);
        checkBox2.setOnCheckedChangeListener(this);

        //2.点击按钮提示所选的内容
        findViewById(R.id.submitButton).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d(TAG, hobbies.toString()); //tag为前缀;Logcat中查看(Debug级别)
                Toast.makeText(CheckBoxActivity.this, hobbies.toString(), Toast.LENGTH_SHORT).show();
            }

        });
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        //判断是否选中,选中添加到集合中去,没选中移除集合
        if (isChecked) {
            hobbies.add(buttonView.getText().toString());
        } else {
            hobbies.remove(buttonView.getText().toString());
        }
    }

}
效果图:

Android的用户登录页面_移动开发_11


Android的用户登录页面_android studio_12

RadioButtonActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.Toast;
public class RadioButtonActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio_button);

        RadioButton radioButton = findViewById(R.id.manRadioButton);
        radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //RadioButton radioButton1 = (RadioButton) buttonView;
                //提示操作
                if (isChecked) {
                    String sex = buttonView.getText().toString();
                    Toast.makeText(RadioButtonActivity.this, "您选择的是:" + sex, Toast.LENGTH_SHORT).show();
                }
            }
        });

        RadioButton radioButton1 = findViewById(R.id.womanRadioButton);
        radioButton1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //提示操作
                if (isChecked) {
                    String sex = buttonView.getText().toString();
                    Toast.makeText(RadioButtonActivity.this, "您选择的是:" + sex, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

}
效果图:

Android的用户登录页面_android_13


Android的用户登录页面_Android的用户登录页面_14

LoginActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    }

}
效果图:

Android的用户登录页面_android studio_15


按压登录按钮,效果如下:

Android的用户登录页面_android_16