Android:<8>自动填充、单选对话框、复选对话框和登录对话框

2023-11-07 12:30

本文主要是介绍Android:<8>自动填充、单选对话框、复选对话框和登录对话框,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在我们使用百度搜索资料的时候,输入一两个字符的时候就会自动弹出一些相关的高频词:

我们把这个叫做自动填充,在我们的安卓上有一个专门的组件用来做这个效果,不过不是经常用:aotucompletetextview

<AutoCompleteTextViewandroid:layout_width="260dp"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:completionHint="城市推荐"android:id="@+id/actv_city"android:dropDownWidth="260dp"android:dropDownHeight="wrap_content"android:completionThreshold="2"/>

该组件含有两个宽度和两个高度,它们分别是自动填充组件自己的,和推荐列表的:

 android:completionHint="城市推荐"就是推荐列表的左下角的提示文字;

android:completionThreshold="2"是设定如果输入两个字符就会弹出提示列表,,当然你想设计几个就写几个;

我们从布局文件上看不到我们所写的数据,因为我们放在了后台的数据处理类里面,使用的是自定义的本地数据,但是我们在浏览器弹出的是服务器下载的,我这里为了简单就使用自定义数据:

废话不多说,我们直接创建一个数组标签,在values的String.xml 文件里面

<resources><string name="app_name">DialogTextActivity</string><array name="acpt_city"><item >shanghai</item><item >jiangxi</item><item >shandong</item><item >zhejiang</item><item >liaoning</item><item >shanxi</item></array>
</resources>

很明显,我们要将后台的数据显示到页面布局上,所以要使用到基础的适配器之一(ArrayAdapter)这个适配器我们之前讲过:

public class MainActivity extends AppCompatActivity {//1.1 使用自动填充程序,我们定义好布局文件和相关属性在创建一个变量AutoCompleteTextView actv_city ;//由于匿名内部类成员的级数和外部方法相等,所以我们需要将变量定义为全局int index = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1.2 初始化这个组件,新建一个数列适配器将我们定义好的数列值放到布局显示actv_city=findViewById(R.id.actv_city);ArrayAdapter arrayAdapter = ArrayAdapter.createFromResource(this,R.array.acpt_city, android.R.layout.simple_dropdown_item_1line);//1.3 使用这个适配器actv_city.setAdapter(arrayAdapter);}
}

要想将数据显示到组件上面,我们只需要创建一个数列适配器,拿到我们定义好的数据然后放在组件上面就可以了( actv_city.setAdapter(arrayAdapter););

代码还是挺简单,所以我们也就不过多赘述,现在让我们来看看今天我们要做的程序,我们常见的对话框(AlertDialog):

视频演示:

Alerdialog

1、单选对话框的制作:

也就是在对话框里面放一个单选框,在这之前我们先了解一下什么是对话框?

AlertDialog()就是我们常见的消息弹窗,有只弹出信息的当然也有弹出选项的,对话框一般分为三个部分:标题部分、内容部分、按钮部分;这几个部分含有相关的方法对其设定,我们通常用在按钮的监听当中,是我们学到现在遇到的第一个只用Java代码就可以显示的一个组件:

 含有:

setTitle():设置标题;setView():设置视图;setSinglechoiceItems():设置单选框

setIcon():设置图标;setCancelable():设置不可点击取消,也就是当我们点击出对话框以外的部分时对话框不会消失;setNegativeButton():设置取消按钮;setPositiveButton():设置确定按钮;

我们现在布局文件中设置好按钮,然后添加一个单击监听属性然后布置一下对话框的内容:

<TextViewandroid:layout_marginTop="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="单选框"android:textSize="30dp"android:layout_gravity="center_horizontal"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击弹出"android:textSize="20dp"android:onClick="btn_single"android:layout_gravity="center_horizontal"/>

设置好之后,我们创建一个对话框对象,还有数组数据,因为我们需要吐司出我们所选择的数据故 创建一个变量来存储 我们选择的子项:index(数组下标)

//2.1 单选按钮逻辑处理public void btn_single(View view) {//2.2 先创建一个对话框,最普通的,参数为上下文AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);//2.3 对单选框进行单选按钮的设计,穿件一个数据数组和一个变量用来存储我们的数据下标String[] fruit = new String[]{"苹果","香蕉","西瓜","橘子"};alertDialog.setTitle("选择你喜欢的水果");alertDialog.setIcon(R.drawable.icon);alertDialog.setSingleChoiceItems(fruit, index, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//2.4 在设置单选按钮的时候需要将我们的下表存储index = i;}});alertDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Toast.makeText(MainActivity.this, "你喜欢的水果是:"+fruit[index], Toast.LENGTH_SHORT).show();}});//2.5 我们为了体验好,需要设置不可点击空白取消属性alertDialog.setCancelable(false);alertDialog.show();}

因为是使用纯Java代码,所以这里一些属性要注意,设置按钮的时候第一个参数的名称,第二个是单击响应函数,我们需要在后面的匿名内部类里面处理我们的对象,当我们选择了一个选项,点击确定按钮的时候,我们通过index来确定我们选择的是哪一个数据;

在设置单选框内容的时候,我们使用的方法有三个参数,第一个是我们的数据列表,第二个是默认选择的数据,第三个也是个单击响应函数,主要是监听我们选择了哪一个选项,然后负责将我们选择的选项的索引存储到index之中,方便后面的toast;

2、复选框:

 其实这一些类型的对话框都是一个普通对话框,内容分别不同而已,从对话框的布局可以看到,就是开头说的三个部分,所以我们只需要更改内容和一些单击响应函数就可以了,这里我们需要设置一个多选框的属性,有三个参数:

在这之前,我们需要将主布局的按钮写出来,我们可以复制前面的,这里我们设置的按钮单击响应函数为btn_multipy;

 //3.1 对复选框的逻辑处理,按钮响应函数public void btn_multipy(View view) {//3.2 我们使用联级操作来做//3.3 首先创建好我们的数据数组String[] city = new String[]{"上海","北京","杭州","成都","浙江"};//3.4 然后创建我们的默认选择项,注意这里长度一定要和数据数组一致boolean[] booleans = new boolean[]{true,true,false,false,false};Dialog dialog = new AlertDialog.Builder(this).setTitle("你喜欢哪几个城市").setIcon(R.drawable.icon).setMultiChoiceItems(city, booleans, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i, boolean b) {//3.5 通过用户的选项来获取数据booleans[i] = b;}}).setCancelable(false).setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//3.6 将获取的数据利用toast输出String strcity = "";for(int j = 0 ;j < city.length;j++){if(booleans[j]){strcity += city[j] + " ";}}Toast.makeText(MainActivity.this, "你喜欢的城市有:"+strcity, Toast.LENGTH_SHORT).show();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {}}).create();dialog.show();}

补充一个知识点,我们这里用了联级操作,也就是一直点,这是kotlin的特点,毕竟以后的代码就不用Java写了;

其实关于联级操作我们可以看成就是给属性赋值,只是可以帮我们省去很多的冗余,就是每次都要使用对象点,我们可以直接点到底,像上面的操作,同样,我们使用数列,不过这里我们用了两个,一个存了数据,另一个就是存的选择的状态,我们利用这个状态可以得到我们选择的哪一些数据,方便后面的toast;

3、登录选项:

这个想必大家猜到了,同样是改的内容部分,只不过是改成了view,就和上面一样,我们写好setView()方法就可以了;

 还记得我们之前是怎么做的spinner的子选项布局的吗?

需要在layout之中新建一个布局,就是上面图片显示的布局:

<?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"><EditTextandroid:layout_width="260dp"android:layout_height="wrap_content"android:hint="请输入用户名"android:layout_gravity="center_horizontal"android:textSize="20sp"android:id="@+id/et_username"/><EditTextandroid:layout_width="260dp"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:hint="请输入密码"android:layout_gravity="center_horizontal"android:inputType="textPassword"android:textSize="20sp"android:id="@+id/et_password"/></LinearLayout>

我们之前做过相关的布局,其实就和用户注册页面差不多;

在设置逻辑处理函数的时候,为了方便我们依然使用联级操作:

//4.1 登录布局对话框的逻辑处理public void btn_login(View view) {//4.2 我们使用联级更简单一点//4.3 在设置之前,我们需要获取到布局对象,是注册页面的View  v = LayoutInflater.from(this).inflate(R.layout.myloginlayout,null);EditText et_username,et_password;et_username = v.findViewById(R.id.et_username);et_password = v.findViewById(R.id.et_password);Dialog dialog = new AlertDialog.Builder(this).setTitle("登录").setIcon(R.drawable.icon).setView(v).setPositiveButton("登录", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//4.4 当我们点击的时候需要获取到我们的用户名和密码String name ,password;name = et_username.getText().toString();password = et_password.getText().toString();//4.5 使用我们的toast来提高我们的可玩性Toast.makeText(MainActivity.this, "用户名:"+name+"\n密码:"+password, Toast.LENGTH_SHORT).show();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {}}).setCancelable(false).create();dialog.show();

除了加了一个布局v和改了按钮中的单击响应函数之外,都差不多和之前一样,标题什么的写登录就行,最后一个函数是.create()这个要注意,show();方法要分开,不然是会报错的;

至于我们获取v的方法,其实就和之前我们做spinner练习里面一样,这已经是第三次,我想你们都已经很熟悉了,

LayoutInflater.from(this).inflate(R.layout.myloginlayout,null);使用这个方法可以获取我们刚刚创建的登录布局,然后创建变量来存储里面的组件对象,方便我们吐司出去,如果用在网络之中,那就更需要了,记得我们如何获取组件里面的数据吗:

et_username.getText().toString();

好了,其他地方就差不多了,这些属性比较人性化,英语懂得人应该看到这些属性就知道要怎么写,下面分享这一期的所有代码:

主布局部分:

<?xml version="1.0" encoding="utf-8"?>
<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"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="自动填充输入框"android:textSize="30dp"android:layout_gravity="center_horizontal"/><AutoCompleteTextViewandroid:layout_width="260dp"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:completionHint="城市推荐"android:id="@+id/actv_city"android:dropDownWidth="260dp"android:dropDownHeight="wrap_content"android:completionThreshold="2"/><TextViewandroid:layout_marginTop="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="单选框"android:textSize="30dp"android:layout_gravity="center_horizontal"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击弹出"android:textSize="20dp"android:onClick="btn_single"android:layout_gravity="center_horizontal"/><TextViewandroid:layout_marginTop="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="复选框"android:textSize="30dp"android:layout_gravity="center_horizontal"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击弹出"android:textSize="20dp"android:onClick="btn_multipy"android:layout_gravity="center_horizontal"/><TextViewandroid:layout_marginTop="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="登录页面"android:textSize="30dp"android:layout_gravity="center_horizontal"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击弹出"android:textSize="20dp"android:onClick="btn_login"android:layout_gravity="center_horizontal"/></LinearLayout>

登录布局部分:

<?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"><EditTextandroid:layout_width="260dp"android:layout_height="wrap_content"android:hint="请输入用户名"android:layout_gravity="center_horizontal"android:textSize="20sp"android:id="@+id/et_username"/><EditTextandroid:layout_width="260dp"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:hint="请输入密码"android:layout_gravity="center_horizontal"android:inputType="textPassword"android:textSize="20sp"android:id="@+id/et_password"/></LinearLayout>

数组部分:

<resources><string name="app_name">DialogTextActivity</string><array name="acpt_city"><item >shanghai</item><item >jiangxi</item><item >shandong</item><item >zhejiang</item><item >liaoning</item><item >shanxi</item></array>
</resources>

所有逻辑函数处理部分:

package com.example.dialogtextactivity;import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.AndroidException;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {//1.1 使用自动填充程序,我们定义好布局文件和相关属性在创建一个变量AutoCompleteTextView actv_city ;//由于匿名内部类成员的级数和外部方法相等,所以我们需要将变量定义为全局int index = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1.2 初始化这个组件,新建一个数列适配器将我们定义好的数列值放到布局显示actv_city=findViewById(R.id.actv_city);ArrayAdapter arrayAdapter = ArrayAdapter.createFromResource(this,R.array.acpt_city, android.R.layout.simple_dropdown_item_1line);//1.3 使用这个适配器actv_city.setAdapter(arrayAdapter);}//2.1 单选按钮逻辑处理public void btn_single(View view) {//2.2 先创建一个对话框,最普通的,参数为上下文AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);//2.3 对单选框进行单选按钮的设计,穿件一个数据数组和一个变量用来存储我们的数据下标String[] fruit = new String[]{"苹果","香蕉","西瓜","橘子"};alertDialog.setTitle("选择你喜欢的水果");alertDialog.setIcon(R.drawable.icon);alertDialog.setSingleChoiceItems(fruit, index, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//2.4 在设置单选按钮的时候需要将我们的下表存储index = i;}});alertDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {Toast.makeText(MainActivity.this, "你喜欢的水果是:"+fruit[index], Toast.LENGTH_SHORT).show();}});//2.5 我们为了体验好,需要设置不可点击空白取消属性alertDialog.setCancelable(false);alertDialog.show();}//3.1 对复选框的逻辑处理,按钮响应函数public void btn_multipy(View view) {//3.2 我们使用联级操作来做//3.3 首先创建好我们的数据数组String[] city = new String[]{"上海","北京","杭州","成都","浙江"};//3.4 然后创建我们的默认选择项,注意这里长度一定要和数据数组一致boolean[] booleans = new boolean[]{true,true,false,false,false};Dialog dialog = new AlertDialog.Builder(this).setTitle("你喜欢哪几个城市").setIcon(R.drawable.icon).setMultiChoiceItems(city, booleans, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i, boolean b) {//3.5 通过用户的选项来获取数据booleans[i] = b;}}).setCancelable(false).setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//3.6 将获取的数据利用toast输出String strcity = "";for(int j = 0 ;j < city.length;j++){if(booleans[j]){strcity += city[j] + " ";}}Toast.makeText(MainActivity.this, "你喜欢的城市有:"+strcity, Toast.LENGTH_SHORT).show();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {}}).create();dialog.show();}//4.1 登录布局对话框的逻辑处理public void btn_login(View view) {//4.2 我们使用联级更简单一点//4.3 在设置之前,我们需要获取到布局对象,是注册页面的View  v = LayoutInflater.from(this).inflate(R.layout.myloginlayout,null);EditText et_username,et_password;et_username = v.findViewById(R.id.et_username);et_password = v.findViewById(R.id.et_password);Dialog dialog = new AlertDialog.Builder(this).setTitle("登录").setIcon(R.drawable.icon).setView(v).setPositiveButton("登录", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//4.4 当我们点击的时候需要获取到我们的用户名和密码String name ,password;name = et_username.getText().toString();password = et_password.getText().toString();//4.5 使用我们的toast来提高我们的可玩性Toast.makeText(MainActivity.this, "用户名:"+name+"\n密码:"+password, Toast.LENGTH_SHORT).show();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {}}).setCancelable(false).create();dialog.show();}
}

都是很基础的语法,相信大家都能看懂,最后一个循环的意思就是取得用户选择的选项;

关注我,更多分享。

这篇关于Android:<8>自动填充、单选对话框、复选对话框和登录对话框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/363590

相关文章

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

IDEA如何让控制台自动换行

《IDEA如何让控制台自动换行》本文介绍了如何在IDEA中设置控制台自动换行,具体步骤为:File-Settings-Editor-General-Console,然后勾选Usesoftwrapsin... 目录IDEA如何让控制台自http://www.chinasem.cn动换行操作流http://www

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用