学习Android的第二十一天

目录

Android ProgressDialog (进度条对话框)

例子

Android DatePickerDialog 日期选择对话框

例子

Android TimePickerDialog 时间选择对话框

Android PopupWindow 悬浮框

构造函数

方法

例子

官方文档

Android OptionMenu 选项菜单

例子

官方文档


Android ProgressDialog (进度条对话框)

Android ProgressDialog 已经在 API 26+ 中被废弃,ProgressDialog 不能直接从 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"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_show_normal_progress_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示普通ProgressDialog" /><Buttonandroid:id="@+id/btn_show_indeterminate_progress_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示不确定结束的ProgressDialog" /><Buttonandroid:id="@+id/btn_show_determinate_progress_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示确定结束的ProgressDialog" /></LinearLayout>
package com.example.myapplication;import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private ProgressDialog progressDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btnShowNormal = findViewById(R.id.btn_show_normal_progress_dialog);Button btnShowIndeterminate = findViewById(R.id.btn_show_indeterminate_progress_dialog);Button btnShowDeterminate = findViewById(R.id.btn_show_determinate_progress_dialog);btnShowNormal.setOnClickListener(v -> {showProgressDialog(ProgressDialog.STYLE_SPINNER); // 普通ProgressDialog});btnShowIndeterminate.setOnClickListener(v -> {showProgressDialog(ProgressDialog.STYLE_HORIZONTAL); // 不确定结束的ProgressDialog});btnShowDeterminate.setOnClickListener(v -> {showDeterminateProgressDialog(); // 确定结束的ProgressDialog});}private void showProgressDialog(int style) {progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setTitle("软件更新中");progressDialog.setMessage("软件正在更新中,请稍后...");progressDialog.setProgressStyle(style);progressDialog.setCancelable(false); // 防止用户取消progressDialog.show();// 模拟操作new Handler().postDelayed(() -> {progressDialog.dismiss();}, 3000); // 模拟3秒后关闭对话框}private void showDeterminateProgressDialog() {progressDialog = new ProgressDialog(MainActivity.this);progressDialog.setTitle("软件更新中");progressDialog.setMessage("软件正在更新中,请稍后...");progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);progressDialog.setMax(100); // 设置最大值progressDialog.setCancelable(false);progressDialog.show();// 模拟下载进度更新new Thread(() -> {int progress = 0;while (progress <= 100) {progressDialog.setProgress(progress);progress += 10;try {Thread.sleep(500); // 模拟下载延迟} catch (InterruptedException e) {e.printStackTrace();}}progressDialog.dismiss();}).start();}
}

Android DatePickerDialog 日期选择对话框

当用户点击一个按钮,弹出日期选择对话框是一个常见的需求。

例子

<?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"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_pick_date"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="选择日期"/></LinearLayout>
package com.example.myapplication;import android.app.DatePickerDialog;
import android.os.Bundle;
import android.widget.Button;import androidx.appcompat.app.AppCompatActivity;import java.util.Calendar;public class MainActivity extends AppCompatActivity {private Button btnPickDate;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnPickDate = findViewById(R.id.btn_pick_date);btnPickDate.setOnClickListener(v -> showDatePickerDialog());}private void showDatePickerDialog() {// 获取当前日期Calendar calendar = Calendar.getInstance();int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);int day = calendar.get(Calendar.DAY_OF_MONTH);// 创建并显示日期选择对话框DatePickerDialog datePickerDialog = new DatePickerDialog(this, (view, selectedYear, selectedMonth, selectedDay) -> {// 处理选择的日期String selectedDate = selectedYear + "-" + (selectedMonth + 1) + "-" + selectedDay;btnPickDate.setText(selectedDate); // 在按钮上显示选择的日期}, year, month, day);datePickerDialog.show();}
}

Android TimePickerDialog 时间选择对话框

Android TimePickerDialog ( 时间选择对话框 ) 会弹出一个对话框形式的时间选择器。

<?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"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_pick_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="选择时间"/></LinearLayout>
package com.example.myapplication;import android.app.TimePickerDialog;
import android.os.Bundle;
import android.widget.Button;import androidx.appcompat.app.AppCompatActivity;import java.util.Calendar;
import java.util.TimeZone;public class MainActivity extends AppCompatActivity {private Button btnPickTime;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnPickTime = findViewById(R.id.btn_pick_time);btnPickTime.setOnClickListener(v -> showTimePickerDialog());}private void showTimePickerDialog() {// 获取中国的当前时间Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")); // 设置时区为中国标准时间int hour = calendar.get(Calendar.HOUR_OF_DAY);int minute = calendar.get(Calendar.MINUTE);// 创建并显示时间选择对话框TimePickerDialog timePickerDialog = new TimePickerDialog(this, (view, selectedHour, selectedMinute) -> {// 处理选择的时间String selectedTime = String.format("%02d:%02d", selectedHour, selectedMinute);btnPickTime.setText(selectedTime); // 在按钮上显示选择的时间}, hour, minute, true); // 最后一个参数表示是否为24小时制timePickerDialog.show();}
}

Android PopupWindow 悬浮框

PopupWindow 是一个弹出窗口控件,可以显示任意 View,并且浮动在当前 Activity 的顶部。通常用于悬浮在其他 UI 控件旁边,提供额外的信息或操作选项。与 AlertDialog 不同,PopupWindow 的位置可以自由设置,可以根据需要显示在屏幕的任何位置。

构造函数

PopupWindow 类的构造函数如下:

  1. PopupWindow(): 创建一个空的 PopupWindow 对象。
  2. PopupWindow(Context context): 使用指定的上下文创建 PopupWindow 对象。
  3. PopupWindow(Context context, AttributeSet attrs): 使用指定的上下文和属性集创建 PopupWindow 对象。
  4. PopupWindow(Context context, AttributeSet attrs, int defStyleAttr): 使用指定的上下文、属性集和样式资源创建 PopupWindow 对象。
  5. PopupWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes): 使用指定的上下文、属性集、样式资源和主题资源创建 PopupWindow 对象。
  6. PopupWindow(View contentView): 使用指定的内容视图创建 PopupWindow 对象。
  7. PopupWindow(int width, int height): 创建指定宽高的 PopupWindow 对象。
  8. PopupWindow(View contentView, int width, int height): 使用指定的内容视图以及宽高创建 PopupWindow 对象。
  9. PopupWindow(View contentView, int width, int height, boolean focusable): 使用指定的内容视图、宽高和焦点设置创建 PopupWindow 对象。

方法

以下是一些重要的 PopupWindow 方法的说明:

  1. setContentView(View contentView): 设置 PopupWindow 显示的 View。
  2. getContentView(): 获取 PopupWindow 显示的 View。
  3. showAsDropDown(View anchor): 在指定控件正下方显示 PopupWindow,无偏移。
  4. showAsDropDown(View anchor, int xoff, int yoff): 在指定控件位置显示 PopupWindow,并可以设置偏移量。
  5. showAtLocation(View parent, int gravity, int x, int y): 在父控件指定位置显示 PopupWindow,可以设置具体位置、偏移量等。需要传入 Activity 中的任意一个 View 作为 parent 参数。
  6. setWidth(int width) / setHeight(int height): 设置 PopupWindow 的宽度和高度,也可以在构造方法中指定。
  7. setFocusable(true): 设置 PopupWindow 是否具有焦点。当设置为 true 时,PopupWindow 弹出后会处理触摸事件和物理按键事件,必须先让 PopupWindow 消失才能响应其他事件。
  8. setAnimationStyle(int style): 设置 PopupWindow 弹出和消失的动画效果。

例子

1、创建 res/layout/popup_content.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:padding="16dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="弹出内容"android:textSize="16sp"android:textColor="@android:color/black" /><Buttonandroid:id="@+id/close_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="关闭"android:textColor="@android:color/white"android:background="@color/purple" />
</LinearLayout>

2、修改 res/layout/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"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><Buttonandroid:id="@+id/show_popup_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示弹出菜单" /></LinearLayout>

3、修改 MainActivity.java:

package com.example.myapplication;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private PopupWindow popupWindow;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 创建一个 View 作为 PopupWindow 的内容视图View contentView = LayoutInflater.from(this).inflate(R.layout.popup_content, null);// 创建 PopupWindow 对象并设置内容视图、宽高popupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);// 设置焦点,让 PopupWindow 弹出后处理触摸事件和物理按键事件popupWindow.setFocusable(true);// 找到触发弹出 PopupWindow 的按钮Button showPopupButton = findViewById(R.id.show_popup_button);showPopupButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在按钮下方显示 PopupWindow,无偏移popupWindow.showAsDropDown(v);}});// 找到关闭 PopupWindow 的按钮Button closeButton = contentView.findViewById(R.id.close_button);closeButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 关闭 PopupWindowpopupWindow.dismiss();}});}
}

官方文档

  1. Android PopupWindow

Android OptionMenu 选项菜单

在Android中,OptionMenu(选项菜单)的创建和管理不是通过XML直接实例化或某个类的实例化方法实现的,而是通过Activity提供的几个生命周期方法进行动态创建和控制。

具体来说:

  • onCreateOptionsMenu(Menu menu):这是用于初始化选项菜单的方法,在这个方法里,我们可以调用getMenuInflater().inflate(R.menu.menu_main, menu);来加载预定义在XML文件中的菜单项,或者通过调用menu对象的add()方法动态添加菜单项。
  • onOptionsItemSelected(MenuItem item):当用户点击选项菜单中的某一项时,系统会调用此方法,我们可以在其中根据item的id进行相应的操作处理。
  • onPrepareOptionsMenu(Menu menu):在每次菜单即将显示前,系统都会调用此方法,以便我们可以根据当前应用的状态动态修改菜单项的状态或可见性等属性。
  • onOptionsMenuClosed(Menu menu):当选项菜单关闭后,系统会调用此回调方法,可以在此处执行菜单关闭后的清理工作。
  • onMenuOpened(int featureId, Menu menu):如果我们的应用支持旧版的API(如ActionBar的子菜单),当选项菜单打开时,系统可能会调用此方法通知我们菜单已打开。

例子

1、在 res/menu/menu_main.xml 菜单文件中定义要显示的菜单项:

<!-- menu_main.xml -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/menu_item1"android:title="选项 1" /><itemandroid:id="@+id/menu_item2"android:title="选项 2" />
</menu>

2、修改 res/layout/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"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><Buttonandroid:id="@+id/open_popup_menu_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示弹出菜单" /></LinearLayout>

3、修改 MainActivity.java:

package com.example.myapplication;import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button openPopupMenuButton = findViewById(R.id.open_popup_menu_button);openPopupMenuButton.setOnClickListener(v -> {PopupMenu popupMenu = new PopupMenu(MainActivity.this, openPopupMenuButton);popupMenu.getMenuInflater().inflate(R.menu.menu_main, popupMenu.getMenu());popupMenu.setOnMenuItemClickListener(item -> {int id = item.getItemId();if (id == R.id.menu_item1) {// 处理选中 选项 1 的事件Toast.makeText(MainActivity.this, "选择了选项1", Toast.LENGTH_SHORT).show();return true;} else if (id == R.id.menu_item2) {// 处理选中 选项 2 的事件Toast.makeText(MainActivity.this, "选择了选项2", Toast.LENGTH_SHORT).show();return true;}return false;});popupMenu.show();});}
}

官方文档

  1. Android menus

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java实战:Spring Boot中各类参数校验机制

引言 在开发Web应用程序时&#xff0c;对客户端传入的参数进行有效校验是保证系统安全性和稳定性的重要环节。Spring Boot作为一个现代化的Java开发框架&#xff0c;提供了多种参数校验的方法和工具&#xff0c;以满足不同场景下的需求。本文将深入探讨Spring Boot中实现各种参…

typescript 的常用方式

文章目录 前言一、绑定props 默认值的方式&#xff1a;withDefaults1.vue2 的props设置默认值2.vue3 的props设置默认值(1) 不设置默认值的写法(2) 设置默认值的写法&#xff08;分离模式&#xff09;(3) 设置默认值的写法&#xff08;组合模式&#xff09; 二、定义一个二维数…

Matlab在同一张图中如何加入多个图例

根据代码最终画出的图片如下&#xff1a; 其实原理很简单&#xff0c;就是在一张figure中画多个坐标轴&#xff0c;每个坐标轴都有对应的图例&#xff0c;之后再将多余坐标轴隐藏&#xff0c;只保留一个即可。 代码如下&#xff1a; clear all; close all;dd_linewidth 1;a …

maven archetype 项目原型

拓展阅读 maven 包管理平台-01-maven 入门介绍 Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的详细对比表格 maven 包管理平台-02-windows 安装配置 mac 安装配置 maven 包管理平台-03-maven project maven 项目的创建入门 maven 包管理平台-04-maven archetype 项目原型 ma…

Spring学习笔记(六)利用Spring的jdbc实现学生管理系统的用户登录功能

一、案例分析 本案例要求学生在控制台输入用户名密码&#xff0c;如果用户账号密码正确则显示用户所属班级&#xff0c;如果登录失败则显示登录失败。 &#xff08;1&#xff09;为了存储学生信息&#xff0c;需要创建一个数据库。 &#xff08;2&#xff09;为了程序连接数…

洛谷P1927防护伞

题目描述 据说 20122012 的灾难和太阳黑子的爆发有关。于是地球防卫小队决定制造一个特殊防护伞&#xff0c;挡住太阳黑子爆发的区域&#xff0c;减少其对地球的影响。由于太阳相对于地球来说实在是太大了&#xff0c;我们可以把太阳表面看作一个平面&#xff0c;中心定为(0,0…

C 基本语法

我们已经看过 C 程序的基本结构&#xff0c;这将有助于我们理解 C 语言的其他基本的构建块。 C 的令牌&#xff08;Token&#xff09; C 程序由各种令牌组成&#xff0c;令牌可以是关键字、标识符、常量、字符串值&#xff0c;或者是一个符号。例如&#xff0c;下面的 C 语句…

30天自制操作系统(第23天)

23.1 编写malloc 参考第22天的内容&#xff0c;在绘制窗口前先分配了150*50个字节大小的内存&#xff0c;所以导致该文件经编译后有7.6k左右&#xff0c;能否在其中使用指针呢&#xff1f;当需要开辟空间时&#xff0c;移动指针即可。在之前的章节中也有函数memman_alloc函数可…

php源码 单色bmp图片取模工具 按任意方式取模 生成字节数组 自由编辑点阵

http://2.wjsou.com/BMP/index.html 想试试chatGPT4生成&#xff0c;还是要手工改 php 写一个网页界面上可以选择一张bmp图片&#xff0c;界面上就显示这张bmp图片&#xff0c; 点生成取模按钮&#xff0c;在图片下方会显示这张bmp图片的取模数据。 取模规则是按界面设置的&a…

Linux 的交换空间(swap)是什么?有什么用?

目录 swap是什么&#xff1f;swap有什么用&#xff1f;swap使用典型场景如何查看你的系统是否用到交换空间呢&#xff1f;查看系统中swap in/out的情况 swap是什么&#xff1f; swap就是磁盘上的一块区域。它和Windows系统中的交换文件作用类似&#xff0c;但是它是一段连续的…

03、MongoDB -- MongoDB 权限的设计

目录 MongoDB 权限的设计演示前准备&#xff1a;启动 mongodb 服务器 和 客户端 &#xff1a;1、启动单机模式的 mongodb 服务器2、启动 mongodb 的客户端 MongoDB 权限的设计1、MongoDB 的每个数据库都可以保存用户&#xff0c;不止admin数据库可以保存用户。2、保存用户的数据…

Linux 学习笔记(8)

八、 启动引导 1 、 Linux 的启动流程 1) BIOS 自检 2) 启动 GRUB/LILO 3) 运行 Linux kernel 并检测硬件 4) 挂载根文件系统 5) 运行 Linux 系统的第一个进程 init( 其 PID 永远为 1 &#xff0c;是所有其它进程的父进程 ) 6) init 读取系统引导配置文件…

GD25Q32驱动

GD25Q32是一款基于SPI的Flash芯片&#xff0c;容量为32/84M bytes。它的引脚如下&#xff1a; 该芯片支持多种SPI操作方式&#xff0c;包括&#xff1a;Standard SPI(标准SPI)、Dual SPI(双线 SPI)和Quad SPI(四线 SPI) 。有关SPI的介绍可以参考&#xff1a; SPI通信原理-CSDN…

flutter 文字一行显示,超出换行

因为app有多语言&#xff0c;中文和其他语言长度不一致&#xff0c;可能导致英文会很长。 中文样式 英文样式 代码 Row(mainAxisAlignment: MainAxisAlignment.end,crossAxisAlignment: CrossAxisAlignment.end,children: [Visibility(visible: controller.info.fee ! null,ch…

探寻2024年国内热门低代码平台排行!| 功能特点一览

低代码开发是一项革命性的技术&#xff0c;主要目的是尽量避免程序研发的复杂性&#xff0c;让外行开发者也能加入到应用程序的搭建中。低代码平台的核心概念和构成部分通常包括用户界面和拖拽设计、预构件和模块、自动化工作内容与数据库集成和扩展应用&#xff0c;应用低代码…

web前端css基本内容

web前端css 当我们用html的语法给内容规划布局样式时&#xff0c;可能会出现许多个相似的内容需要运用同一种样式&#xff0c;复制粘贴太麻烦而且如果后期要改动的话比如把许多个地方从红色改成蓝色&#xff0c;就需要一个一个改了&#xff0c;这时候就需要引入css来操作了 把…

java-使用jacob删除指定文件夹的邮件

总结见文章最后,具体代码如下: ActiveXComponent outlook = new ActiveXComponent("Outlook.Application");Dispatch myNamespace = Dispatch.call(outlook, "GetNamespace", "MAPI").toDispatch();//指定搜索特定的文件Dispatch allFolders =…

我耀学IT—day05-Bootstrap下拉菜单与导航

一、Bootstrap5 下拉菜单 下拉菜单是可切换的&#xff0c;是以列表格式显示链接的上下文菜单。 例&#xff1a; <div class"dropdown"><button type"button" class"btn btn-primary dropdown-toggle" data-bs-toggle"dropdown&…

U盘弹出提示“该设备正在使用中”:原因与解决方案

在日常使用U盘时&#xff0c;我们可能会遇到一个问题&#xff1a;当尝试安全弹出U盘时&#xff0c;系统提示“该设备正在使用中”。这种情况可能会让用户感到困惑&#xff0c;担心数据是否安全或是否会导致U盘损坏。本文旨在探讨这一现象背后的原因&#xff0c;并提供相应的解决…

【前端素材】推荐优质后台管理系统网页Stisla平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功能。后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;通常由管理员使…