Android编程基础

注:以下内容来自第三章

本篇用到的布局代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/msg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.592" />

    <Button
        android:id="@+id/btn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.28"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.405" />

    <Button
        android:id="@+id/btn_exit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="退出"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.75"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.405" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintLayout"
        android:layout_width="412dp"
        android:layout_height="65dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0">

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
View Code

 

一、匿名内部类和普通内部类

以按钮编程为例展示匿名内部类和普通内部类的写法

  • 匿名内部类
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //退出
        Button btn1 = (Button) findViewById(R.id.btn_exit);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        //测试
        Button btn2 = (Button) findViewById(R.id.btn_test);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TextView tv = (TextView) findViewById(R.id.msg);
                tv.setText("Hello");
            }
        });
    }
}

 

  • 普通内部类
public class MainActivity extends AppCompatActivity {
    class BtnClickListener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_test:
                    TextView tv = (TextView) findViewById(R.id.msg);
                    tv.setText("Hello");
                    break;
                case R.id.btn_exit:
                    finish();
                    break;
            }
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn1 = (Button) findViewById(R.id.btn_test);
        Button btn2 = (Button) findViewById(R.id.btn_exit);
        BtnClickListener listener = new BtnClickListener();
        btn1.setOnClickListener(listener);
        btn2.setOnClickListener(listener);
    }
}

 

二、常见的提示框、对话框写法

  • Toast消息提示框
  • Snackbar对话框
  • AlertDialog对话框

Toast消息提示框

写法
Toast.makeText(context, text, duration ),show()

解释:

1.context代表上下文参数,比如Activity,this

2.text填入你要显示的信息

3.duration表示显示时长

实例:

btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TextView tv = (TextView) findViewById(R.id.msg);
                tv.setText("Hello");
                Toast.makeText(MainActivity.this,"测试成功",Toast.LENGTH_LONG).show();
            }
        });

Snackbar对话框

 

 

 

注意:写之前要在布局中添加“ConstraintLayout”这个组件

写法:链式写法

Snackbar.make(view, text, duration )

        .setAction("按钮文字", new View. OnClickListener(){

          @Override

          public void onClick(View v){

          //操作

          }

        })

        .show();

解释:

1.“view”常用findViewById(R.id.xx)

 示例:

btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(findViewById(R.id.constraintLayout),"确定退出吗",Snackbar.LENGTH_LONG).setAction("确定",new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        finish();
                    }
                })
                .setActionTextColor(Color.RED)
                .setBackgroundTint(Color.BLUE)
                .show();
            }
        });

 

AlertDialog对话框

示例:

btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new AlertDialog.Builder(MainActivity.this)
                        .setIcon(R.drawable.alert)
                        .setTitle("提示")
                        .setMessage("确定退出吗?")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                finish();
                            }
                        })
                        .setNegativeButton("取消",null)
                        .show();
            }
        });

高级AlertDialog

  • 带列表项的对话框
  • 带单选列表项的对话框
  • 带多选列表项的对话框
  • 自定义布局的对话框

以上的内容在具体的项目实践中会提到,此处不详细说明

 

三、基于回调的事件处理机制

背景:如果按的是返回键,如何弹出退出提示

使用的方法:onKeyDown回调方法

两种常见的应用场景:

1.点击返回键,弹出对话框,询问是否退出

2.点击返回键,2秒内再次按返回键进行退出

 

四、对代码进行封装

借鉴下这种规范的写法

package com.dzh.review;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

public class MainActivity extends AppCompatActivity {
        private Button btn1;
        private Button btn2;
        private TextView tv;
        private View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()) {
                    case R.id.btn_test:
                        test();
                        break;
                    case R.id.btn_exit:
                        alert();
                        break;
                }
            }
        };

        public void test() {
            tv.setText("武汉科技大学");
            Toast.makeText(MainActivity.this, "设置完成", Toast.LENGTH_SHORT).show();
        }

        public void alert() {
            new AlertDialog.Builder(MainActivity.this)
                    .setIcon(R.drawable.alert)
                    .setTitle("提示")
                    .setMessage("确定退出吗?")
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    })
                    .setNegativeButton("取消", null)
                    .show();
        }

        public void init() {
            btn1 = (Button) findViewById(R.id.btn_test);
            btn2 = (Button) findViewById(R.id.btn_exit);
            tv = (TextView) findViewById(R.id.msg);
            btn1.setOnClickListener(listener);
            btn2.setOnClickListener(listener);
        }

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

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == event.KEYCODE_BACK) {
                alert();
            }
            return true;
        }
}

 

posted @ 2023-04-18 11:20  yonuyeung  阅读(34)  评论(0)    收藏  举报