Android Studio 制作一个app_学习记录6

Android Studio 制作一个app_学习记录6

Scrollview和单选框、复选框

  1. scrollview
  • 不同于linearlayout,srollview布局可以滑动,适合屏幕长度显示不完全的界面
  • 注意:除了设置orientation之外,scrollview里面只能有一个主要的空间
  • 解决方法: 用一个总的linearlayout来盛放所有的控件
  • 注意:
    • 如果android:orientation="vertical" ,则高度应该设置为wrap_content,表示需要多高就有多高
    • 如果android:orientation="horizontal" ,则宽度应该设置为wrap_content,表示需要多宽就有多宽

2. radiobutton单选框

用RadioGroup来实现单选框, radiobutton是在RadioGroup中。

<RadioGroup
            android:id="@+id/rg_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            <RadioButton
                android:id="@+id/rb_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="健身"
                android:textColor="@color/colorRed"
                android:textSize="20sp"/>
            <RadioButton
                android:id="@+id/rb_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="读书"
                android:textColor="@color/colorRed"
                android:textSize="20sp"/>
        </RadioGroup>

3. checkbox复选框

用CheckBox来实现复选框

<CheckBox
            android:id="@+id/cb_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="小米"
            android:layout_marginTop="10dp"
            android:textSize="30sp"/>
            <CheckBox
                android:id="@+id/cb_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="面食"
                android:layout_marginTop="10dp"
                android:textSize="30sp"/>
            <CheckBox
                android:id="@+id/cb_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="火锅"
                android:layout_marginTop="10dp"
                android:textSize="30sp"/>
            <CheckBox
                android:id="@+id/cb_4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="大米"
                android:layout_marginTop="10dp"
                android:textSize="30sp"/>

4. 对应监听事件

表示用来监听哪个被选中。

...
        mRG1 = findViewById(R.id.rg_1);
        mCB1 = findViewById(R.id.cb_1);
        mCB2 = findViewById(R.id.cb_2);
       //单选框radiogroup的监听事件
        mRG1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                RadioButton radioButton = radioGroup.findViewById(i);
                Toast.makeText(StudyActivity.this,radioButton.getText(),Toast.LENGTH_SHORT).show();
       //复选框checkbox的监听事件
    mCB1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                Toast.makeText(StudyActivity.this,b?"选中":"未选中",Toast.LENGTH_SHORT).show();
        });



具体代码讲解

以上一节的activity_study.xml为例。

<ScrollView 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="wrap_content"
    android:orientation="vertical"
    tools:context=".StudyActivity">
</ScrollView>

例如在<ScrollView>控件中,这里的android:orientation="vertical"设置为了vertical,那么对应的高度应该设置为wrap_content,这样就可以实现垂直方向上的无限滑动。


<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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="wrap_content"
    android:orientation="vertical"
    tools:context=".StudyActivity">
<!--这里的android:layout_height="wrap_content" ,同时下面的linearLayout的布局
高度也应该设置为 android:layout_height="wrap_content" -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
     <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="This is StudyActivity"
            android:textColor="@color/colorRed"
            android:textSize="30sp"
            android:layout_gravity="center"/>
    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="center_horizontal"
        android:layout_margin="20dp"
        android:src="@mipmap/ic_launcher"/>
        <ImageView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="center_horizontal"
            android:layout_margin="20dp"
            android:src="@mipmap/ic_launcher"/>
        <ImageView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="center_horizontal"
            android:layout_margin="20dp"
            android:src="@mipmap/ic_launcher"/>
        <ImageView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="center_horizontal"
            android:layout_margin="20dp"
            android:src="@mipmap/ic_launcher"/>
        <ImageView
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="center_horizontal"
            android:layout_margin="20dp"
            android:src="@mipmap/ic_launcher"/>
<!-- 单选框放在了RadioGroup中-->
        <RadioGroup
            android:id="@+id/rg_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical" # 表示选项是垂直排列的
            android:layout_gravity="center"
            android:layout_marginTop="20dp" # 距离上一个控件20dp
            <RadioButton
                android:id="@+id/rb_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="健身"
                android:textColor="@color/colorRed"
                android:textSize="20sp"/> #文字大小
            <RadioButton
                android:id="@+id/rb_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="读书"
                android:textColor="@color/colorRed"
                android:textSize="20sp"/>
            <RadioButton
                android:id="@+id/rb_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="游泳"
                android:textColor="@color/colorRed"
                android:textSize="20sp"/>
            <RadioButton
                android:id="@+id/rb_4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="吃饭"
                android:textColor="@color/colorBlack"
                android:textSize="20sp"
                android:checked="true"/> # checked=True表示默认是选上的
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_gravity="center_horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="午餐是?"
            android:textColor="@color/colorBlack"
            android:textSize="30sp"
            android:layout_marginTop="20dp"
            android:layout_gravity="center"/>
        <CheckBox # 复选框
            android:id="@+id/cb_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="小米"
            android:layout_marginTop="10dp"
            android:textSize="30sp"/>
            <CheckBox
                android:id="@+id/cb_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="面食"
                android:layout_marginTop="10dp"
                android:textSize="30sp"/>
            <CheckBox
                android:id="@+id/cb_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="火锅"
                android:layout_marginTop="10dp"
                android:textSize="30sp"/>
            <CheckBox
                android:id="@+id/cb_4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="大米"
                android:layout_marginTop="10dp"
                android:textSize="30sp"/>
        </LinearLayout>
    </LinearLayout>
</ScrollView>

activity_study.xml对应的StudyActivity.java如下。

package com.example.demo1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
public class StudyActivity extends AppCompatActivity {
    private RadioGroup mRG1;
    private CheckBox mCB1;
    private CheckBox mCB2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_study);
        mRG1 = findViewById(R.id.rg_1);
        mCB1 = findViewById(R.id.cb_1);
        mCB2 = findViewById(R.id.cb_2);
        mRG1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                RadioButton radioButton = radioGroup.findViewById(i);
                Toast.makeText(StudyActivity.this,radioButton.getText(),Toast.LENGTH_SHORT).show();
        mCB1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                Toast.makeText(StudyActivity.this,b?"选中":"未选中",Toast.LENGTH_SHORT).show();
        mCB2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {