【Android】高端的UI,往往只需要最朴素的控件组成

【Android】高端的UI,往往只需要最朴素的控件组成

Android 作为全球最流行的移动操作系统之一,提供了一套丰富的 UI 控件,使开发者能够构建功能强大、交互性强的应用。本博客系列将探讨 Android UI 控件的功能,介绍最常见的六种控件。

TextView

<TextViewandroid:id="@+id/text_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:textSize="24sp"android:textColor="@color/white"android:text="Hello World!" />

基本属性

  • android:id: 控件的唯一标识符。
  • android:layout_widthandroid:layout_height: 控件的宽度和高度,可以是 wrap_content、具体数值或 match_parent

文本显示属性

  • android:text: 要显示的文本内容。
  • android:textSize: 文本的字体大小。
  • android:textColor: 文本的颜色。
  • android:textStyle: 文本的风格,如加粗 (bold)、斜体 (italic)。
  • android:typeface: 设置字体类型,如正常 (normal)、粗体 (sans)、等宽 (monospace)。

文本对齐和布局

  • android:gravity: 文本在 TextView 中的对齐方式,如 leftcenterright
  • android:lines: 指定 TextView 可以显示的行数。
  • android:maxLines: 指定 TextView 可以显示的最大行数。
  • android:minLines: 指定 TextView 可以显示的最小行数。

Button

<Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button"/>

可以写一个事件监听器来设置点击事件的逻辑

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//添加逻辑}
});

基本属性

  • android:id: 控件的唯一标识符,在代码中通过这个ID来引用控件。
  • android:layout_width: 控件的宽度,可以是固定值(如 wrap_content 或具体数值如 100dp),也可以是 match_parent(填充父容器的宽度)。
  • android:layout_height: 控件的高度,与宽度类似,可以是固定值或 match_parent
  • android:text: 按钮上显示的文本。
  • android:onClick: 点击按钮时触发的方法名,在 Java 或 Kotlin 代码中定义。

样式和外观

  • android:background: 控件的背景,可以是颜色或图形。
  • android:textColor: 文本颜色。
  • android:textSize: 文本大小。
  • android:textStyle: 文本风格,如加粗(bold)、斜体(italic)等。
  • android:padding: 控件内边距,影响文本与按钮边缘的距离。
  • android:enabled: 控件是否可用,不可用的按钮通常显示为灰色。

事件处理

在 Android 中,按钮的点击事件通常通过两种方式处理:

XML 中指定 android:onClick 属性:

<Buttonandroid:id="@+id/myButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Click Me"android:onClick="onMyButtonClick" />

在这种方式中,android:onClick 属性的值是按钮点击时将要调用的 Activity 中的方法名称。

  1. 方法签名
    1. 方法必须在绑定该按钮的 ActivityFragment 中定义。
    2. 方法名必须与 android:onClick 属性中指定的名称完全匹配。
    3. 方法应该公开(public)可见性,以便Android系统可以调用它。
    4. 方法必须接受一个参数,通常是 View 类型的。这个参数代表被点击的视图。
  2. 参数类型
    1. 该方法的唯一参数应该是 View 类型(在Java中是 View view,在Kotlin中是 view: View)。
    2. 这个参数是触发事件的视图的引用,允许你在事件处理器中访问和操作该视图。
  3. 返回类型
    1. 事件处理器方法的返回类型必须是 void

在 Java 代码中设置监听器:

Button myButton = findViewById(R.id.myButton);
myButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 处理点击事件}
});

在这种方式中,通过调用 setOnClickListener 方法并传入一个新的 OnClickListener 实现来处理点击事件。

EditText

<EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="Enter text here"android:textSize="16sp"android:inputType="text"android:maxLength="50" />

基本属性

  • android:hint: 显示在 EditText 中的提示文本,当没有文本输入时显示。
  • android:text: EditText 的初始文本内容。

文本相关属性

  • android:inputType: 定义文本输入类型,例如文本、数字、密码等。
  • android:maxLength: 输入文本的最大长度限制。
  • android:ems: 控件的宽度以“行”为单位,一行文本的宽度。
  • android:selectAllOnFocus: 当 EditText 获得焦点时是否全选已有文本。

相关操作

EditText editText = findViewById(R.id.editText);
editText.setText("Hello World"); // 设置文本
String text = editText.getText().toString(); // 获取文本
editText.setHint("Type something..."); // 设置提示文本
editText.setInputType(InputType.TYPE_CLASS_TEXT); // 设置输入类型为文本

ImageView

<ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/image_name"android:scaleType="centerCrop" />

Java 代码操作 ImageView

ImageView imageView = findViewById(R.id.imageView);
imageView.setImageResource(R.drawable.another_image); // 设置图像资源
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); // 设置缩放类型
imageView.setContentDescription("Description of image"); // 设置辅助功能描述
imageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 处理点击事件}
});

图像资源

  • android:src: 要显示的图像资源。这可以是引用应用程序资源(如 @drawable/ic_launcher)的字符串。

缩放和对齐

  • android:scaleType: 控件如何缩放和对齐图像。常见的值有:
    • center: 居中显示图像,不缩放。
    • fitCenter: 居中显示图像,按比例缩放以适应 ImageView
    • matrix: 使用 Matrix 对象来缩放和旋转图像。

交互特性

  • android:contentDescription: 为辅助功能提供图像的描述,提高应用的可访问性。
  • android:focusable: 控件是否可以获取焦点。
  • android:clickable: 控件是否可点击。

样式和外观

  • android:background: ImageView 的背景。
  • android:padding: 控件的内边距。

ProgressBar

<ProgressBarandroid:id="@+id/progressBar"android:layout_width="wrap_content"android:layout_height="wrap_content"android:indeterminate="false"android:progress="0"android:max="100" />

java代码操作

ProgressBar progressBar = findViewById(R.id.progressBar);// 设置进度
progressBar.setProgress(50);// 以动画形式更新进度
progressBar.setProgress(75, true);// 设置最大值
progressBar.setMax(200);// 启用不确定模式
progressBar.setIndeterminate(true);// 停止不确定动画
progressBar.setIndeterminate(false);

基本属性

  • android:id: 控件的唯一标识符。
  • android:layout_widthandroid:layout_height: 控件的宽度和高度。通常宽度可以是 wrap_content 或者具体数值,高度较小,以适应进度条的显示。

进度条样式

  • android:indeterminate: 布尔值,设置为 true 时进度条会显示不确定的进度(例如,一个无限旋转的圆圈)。
  • android:progress: 当进度条是确定性的时候,这个属性表示当前的进度值。
  • android:max: 进度条的最大值,默认为 100。

进度条类型

  • android:progressDrawable: 定义进度条的外观,可以是自定义的 drawable 资源。
  • android:indeterminateDrawable: 定义不确定进度时的动画 drawable。
  • android:animationResolution: 控制不确定进度动画的帧率。

交互特性

  • android:visibility: 控件的可见性,可以是 visibleinvisiblegone

AlertDialog

// 创建 AlertDialog.Builder 实例
AlertDialog.Builder builder = new AlertDialog.Builder(this); // 'this' 是 Activity 或者 Context
builder.setTitle("提示");
builder.setMessage("你确定要执行这个操作吗?");
// 添加“是”和“否”按钮
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {// 点击“是”时的操作}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {// 点击“否”时的操作}
});
// 创建 AlertDialog 对话框
AlertDialog dialog = builder.create();
// 显示对话框
dialog.show();

AlertDialog.Builder 方法

  • setTitle(CharSequence title): 设置对话框标题。
  • setMessage(CharSequence message): 设置对话框显示的消息。
  • setIcon(int iconResId): 设置对话框的图标。
  • setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener): 添加一个“确定”按钮,并设置点击时的事件监听器。
  • setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener): 添加一个“取消”按钮,并设置点击时的事件监听器。
  • setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener): 添加一个中间按钮,通常用于提供额外选项。
  • setCancelable(boolean flag): 设置对话框是否可以通过点击外部区域或按返回键取消。
  • setOnKeyListener(DialogInterface.OnKeyListener onKeyListener): 设置键盘监听器。

按钮点击事件

  • 当按钮被点击时,DialogInterface.OnClickListeneronClick 方法会被触发,参数 id 通常用来区分按钮。

自定义视图

  • setView(int layoutResId): 设置对话框的自定义视图。
  • setView(View view): 直接设置一个视图实例。

注意事项

  • AlertDialog 应该在用户需要做出决定时使用,而不是作为常规的 UI 元素。
  • 避免滥用模态对话框,因为这会中断用户的正常操作流程。

ProgressDialog的替代方案

  1. 创建自定义布局:首先,在 res/layout 目录下创建一个新的 XML 文件,例如 progress_dialog.xml。这个文件定义了对话框的布局,包括一个 ConstraintLayout 作为根布局和一个 ProgressBar 控件。
<?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"android:layout_width="match_parent"android:layout_height="match_parent"><ProgressBarandroid:id="@+id/progressBar"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>
  1. 定义 ProgressBar 属性
    1. android:id="@+id/progressBar": 为 ProgressBar 设置一个 ID,以便在代码中引用。
    2. android:layout_width="match_parent"android:layout_height="wrap_content": 设置 ProgressBar 的宽度填充父布局,高度根据内容自动调整。
    3. app:layout_constraint...: 使用约束布局属性将 ProgressBar 居中显示。
  2. 在 Activity 中创建 AlertDialog
    1. 使用 AlertDialog.Builder 构建一个新的对话框。
    2. setTitle 方法设置对话框的标题。
    3. setView 方法加载自定义的进度对话框布局(R.layout.progress_dialog)。
    4. setMessage 方法设置对话框显示的消息。
    5. show 方法显示对话框。
  3. 示例代码
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 创建 AlertDialog.Builder 实例AlertDialog.Builder builder = new AlertDialog.Builder(this);// 创建 AlertDialog 实例并设置其属性AlertDialog dialog = builder.create();dialog.setTitle("This is dialog");  // 设置标题dialog.setView(R.layout.progress_dialog);  // 加载自定义布局dialog.setMessage("Something important");  // 设置消息内容// 显示对话框dialog.show();
}

结语

参考文档:

Android Studio | 布局文件中使用onClick属性_android studio onclick和clickable一样吗-CSDN博客

【Android】Ui开发常见的7种控件_android ui控件-CSDN博客

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

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

相关文章

实战:Linux下静默安装DM达梦数据库

官方文档参考&#xff1a;安装前准备 | 达梦技术文档 静默安装DM达梦数据库&#xff0c;提前编写好安装脚本、下载好软件、配置好服务器的内核参数信息。 一、安装前的准备 1.操作系统环境检测 #查看服务器操作系统版本和型号 cat /etc/system-release cat /etc/os-releas…

【系统架构设计师】十一、系统架构设计(层次架构风格|MVC|面向服务的架构风格|ESB)

目录 五、层次架构风格 5.1 两层C/S架构 5.2 三层C/S架构 5.3 三层B/S架构 5.4 MVC架构 5.5 MVP架构 5.6 MVVM架构 六、面向服务的架构风格 6.1 SOA特征 6.2 Web Service 6.2.1 关键技术 6.2.2 WEB Service 6.3 企业服务总线ESB 相关推荐 历年真题练习 五、层次…

【MAUI】生命周期

.NET Multi-platform App UI (.NET MAUI) 应用通常有四种执行状态&#xff1a;“未运行”、“运行中”、“已停用”和“已停止”。 当应用从未运行状态转换为运行状态、从运行状态转换为已停用状态、从已停用状态转换为已停止状态、从已停止状态转换为运行状态&#xff0c;以及…

Java并发编程之如何正确的停止线程

在Java线程状态转换中&#xff0c;我们知道&#xff0c;线程最终的命运是Terminated&#xff0c;当然&#xff0c;也有永不停止一直干活的线程&#xff08;除非断电&#xff09;。线程的停止&#xff0c;正常来说是线程运行到结束&#xff0c;但也有程序出错或是用户关闭程序等…

new mars3d.graphic.FixedRoute({的position长度超过一百条浏览器会卡死的解决方案

问题场景描述&#xff1a; FixedRoute的position数据已经很精细时&#xff0c;会导致卡死的问题 解决方案&#xff1a; 1. 数据已经很精细时&#xff0c;可以不用autoSurfaceHeight来计算&#xff0c;如果非要用&#xff0c;可以加个minDistance: 200参数。 fixedRoute.auto…

ChatGPT 深度解析:技术驱动的智能对话

在当今科技飞速发展的时代&#xff0c;ChatGPT 无疑成为了最耀眼的明星之一。它以其令人惊叹的智能对话能力&#xff0c;引发了全球范围内的广泛关注和热议。 ChatGPT 背后的技术堪称精妙绝伦。它基于深度学习算法&#xff0c;通过对海量数据的学习和分析&#xff0c;从而能够理…

BasicSR项目(通用图像超分、修复、增强工具库)介绍

项目地址&#xff1a;https://github.com/XPixelGroup/BasicSR 文档地址&#xff1a;https://github.com/XPixelGroup/BasicSR-docs/releases BasicSR 是一个开源项目&#xff0c;旨在提供一个方便易用的图像、视频的超分、复原、增强的工具箱。BasicSR 代码库从2018年4月20日…

【Memcached】Memcached的工作原理

目录 ​编辑 第2章&#xff1a;Memcached工作原理 2.1 数据存储与访问 2.2 分布式架构 2.3 数据过期机制 第2章&#xff1a;Memcached工作原理 2.1 数据存储与访问 Memcached是一种键值存储系统&#xff0c;其中数据以键值对的形式存储。键是用于定位数据的唯一标识符&am…

MySQL架构详解

MySQL是一个广泛使用的开源关系数据库管理系统&#xff0c;以其可靠性、性能和易用性而闻名。了解MySQL的架构对于优化数据库性能、设计高效的数据库系统以及进行有效的数据库管理至关重要。本文将详细介绍MySQL的架构&#xff0c;包括其主要组件和功能。 1. 连接器&#xff0…

libyaml库的交叉编译

目录 1.Ubuntu环境中安装libyaml库 2.交叉编译 3.success 1.Ubuntu环境中安装libyaml库 官方地址&#xff1a;https://pyyaml.org/wiki/LibYAML 下载路径&#xff1a;http://pyyaml.org/download/libyaml/yaml-0.2.5.tar.gz 2.交叉编译 官方的下载路径为/usr/local下&am…

【unity实战】使用unity制作一个红点系统

前言 注意&#xff0c;本文是本人的学习笔记记录&#xff0c;这里先记录基本的代码&#xff0c;后面用到了再回来进行实现和整理 素材 https://assetstore.unity.com/packages/2d/gui/icons/2d-simple-ui-pack-218050 框架&#xff1a; RedPointSystem.cs using System.…

PHP全功能微信投票迷你平台系统小程序源码

&#x1f525;让决策变得超简单&#xff01;&#x1f389; &#x1f680;【一键创建&#xff0c;秒速启动】 嘿小伙伴们&#xff0c;你还在为组织投票而手忙脚乱吗&#xff1f;来试试这款全功能投票迷你微信小程序吧&#xff01;只需轻轻一点&#xff0c;无论是班级选举、社团…

Java创建对象除了new还有别的什么方式?

通过反射创建对象&#xff1a;通过 Java 的反射机制可以在运行时动态地创建对象。可以使用 Class 类的 newInstance() 方法或者通过 Constructor 类来创建对象 public class MyClass { public MyClass() { // Constructor } } public class Main { public…

初学者指南:如何搭建和配置 Nginx 服务器

初学者指南&#xff1a;如何搭建和配置 Nginx 服务器 Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。本文将详细介绍如何在 Linux 上安装、配置和管理 Nginx 服务器。 一、安装 Nginx Nginx 可以安装在多种操作系统上&#x…

c# 依赖注入-服务的生命周期

在 C# 中&#xff0c;依赖注入服务的生命周期指的是在应用程序中管理和控制依赖项注入服务对象的生命周期的方式。常见的生命周期包括瞬态&#xff08;transient&#xff09;、作用域&#xff08;scoped&#xff09;和单例&#xff08;singleton&#xff09;三种。 瞬态&#…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件&#xff0c;以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host&#xff1a;指定数据库服务器的主…

2024年大数据高频面试题(上篇)

文章目录 HDFS读流程和写流程HDFS读数据流程NameNode和Secondary NameNode工作机制FsimageEdits文件Seen_txidnamenode工作机制HA NameNode如何工作ZKFCHealthMonitorActiveStandbyElectorJouranlNode集群DataNode工作机制DataNode数据损坏压缩MapReduce工作流程MapTask工作流R…

Visual Studio远程调试工具

路径&#xff1a;Visual Studio安装路径/Common7/IDE/Remote Debugger/平台/msvsmon.exe。 平台有x86、x64&#xff0c;x64即可调试x86进程也可调试x64进程。 将平台路径下的所有文件拷贝至其他PC&#xff0c;运行msvsmon.exe。 工具栏选择“工具&#xff08;T&#xff09;”…

Ubuntu18.04安装ROS

1.添加ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.listcurl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc输入指令&#xff1a;curl -s https:…

密码学原理精解【6】

文章目录 置换密码密码体制加解密过程置换置换运算定义置换运算的例子集合与置换置换规则两行表示法轮换表示法置换运算的结果置换的性质注意事项 分组加解密 理论基础1. 准备工作2. 置换过程3. 置换密码的具体实现方式4. 安全性分析5. 置换密码的应用代换密码代换密码的工作原…