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

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目