Android --- 常见UI组件

TextView 文本视图

设置字体大小:android:textSize="20sp" 用sp
设置颜色:android:textColor="#00ffff"
设置倍距(行距):android:lineSpacingMultiplier="2"
设置具体行距:android:lineSpacingExtra="15sp" 与倍距只可取其一
过长文本的处理方式:1.在外面添加滚动条,注意,一个滚动条里面只能添加一个子控件2.省略过长部分,取消换行部分
省略过长部分:1.android:singleLine="true" 后面加省略号  android:ellipsize="middle" 设置省略号的位置2.android:lines="1"  设置单行  后面加句号
 <TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:textSize="20sp"android:textColor="#00ffff"android:lineSpacingMultiplier="2"android:text="@string/long_text"/>

eg:跑马灯 

跑马灯,一个页面只有一个跑马灯生效,因为它需要获取焦点
    android:ellipsize="marquee" 设置跑马灯形式
    android:focusable="true" 设置可以获取焦点
    android:focusableInTouchMode="true" 设置在触摸时获取焦点
    android:marqueeRepeatLimit="marquee_forever" 设置跑马灯时长

<TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:textSize="20sp"android:textColor="#00ffff"android:singleLine="true"android:ellipsize="marquee"android:focusable="true"android:focusableInTouchMode="true"android:marqueeRepeatLimit="marquee_forever"android:text="@string/long_text"/>

string类中定义的长文本 

<string name="long_text"> 洞穴昏暗潮湿,被植物发出的微弱荧光照亮。石壁上缠绕着藤蔓,墨绿,深紫,浓黑,像大团的、纠缠的蛇。一只黑色的飞虫跌跌撞撞闯入,它长着六只坚硬的翅膀,有三个口器。下一秒,纠缠的藤蔓间忽然出现一个巨大的深紫色膨起,它迅速裂开,像张开了一张嘴,在下一刻瞬间合拢,将飞虫吞入腹中。藤蔓群缓缓蠕动起来,膨起的那部分逐渐回收,恢复到原本的状态。洞穴里响起仿佛翅膀扇动的声音,一滴粘液拖曳着半透明的细丝从洞穴顶端落下来,啪嗒一声落进地面黏腻的苔藓里,它们细微地蠕动起来,这滴闪光的粘液很快被吸收殆尽,在地面消失了踪影。角落——被绿色真菌发出的荧光照亮的角落。岩石与土壤的缝隙里,白色像潮水一样涌出来,覆盖了大片的区域,是雪白的菌丝。它生长,蔓延,伸出数以亿计的触角,最后向着中央蠕动而去,合拢,聚集,拉长,一个形体出现。一只脚踏上厚重软腻的苔藓,苔藓陷下去吞没了它,只露出雪白的脚踝。安折看自己的脚踝——属于人类的肢体,由骨架、肌肉和血管支撑起来的肢体,关节可以活动,但因骨骼的限制并不灵活。角质层构成指甲,圆润透明,是退化的产物,来自兽类锋利的爪尖。他抬起腿,迈出一步,先前因被踩而凹陷的苔藓湿凉且富有弹性,在他离开后重新聚拢起来,像竖立的蚯蚓。这一次,他脚下踩到了别的东西,是一具人类骨骼的手臂。昏暗中,安折望向那具骷髅。</string>

ImageView

  • android:adjustViewBounds:设置ImageView是否调整自己的边界来保持所显示图片的长宽比。
  • android:maxHeight:设置ImageView的最大高度。
  • android:maxWidth:设置ImageView的最大宽度。
  • android:scaleType:设置所显示的图片如何缩放或移动以适应ImageView的大小。

•matrix:使用matrix方式进行缩放。
•fitXY:横向、纵向独立缩放,以适应该ImageView。
•fitStart:保持纵横比缩放图片,并且将图片放在ImageView的左上角。
•fitCenter:保持纵横比缩放图片,缩放完成后将图片放在ImageView的中央。
•fitEnd:保持纵横比缩放图片,缩放完成后将图片放在ImageView的右下角。
•center:把图片放在ImageView的中央,但是不进行任何缩放。
•centerCrop:保持纵横比缩放图片,以使图片能完全覆盖ImageView。
•centerInside:保持纵横比缩放图片,以使得ImageView能完全显示该图片。

  • android:src:设置ImageView所显示的Drawable对象的ID。 

ImageButton

ImageButton继承与ImageView;

Button可以显示图片也可以显示文本,而ImageButton只能显示图片;

ImageButton中的图片可以按比例缩放;

Button只能设置一张图片,而ImageButton可以设置前景和背景两张图片重叠的效果

EditView

<EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="20dp"android:background="@color/design_default_color_secondary"android:gravity="center"android:inputType="number"android:maxLength="12"android:hint="账号"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="20dp"android:gravity="center_horizontal"android:background="@color/design_default_color_secondary"android:inputType="textPassword"android:hint="密码"/>

Button

CheckBox 多选按钮

CheckBox继承CompoundButton,是多选按钮。
android:checked设置按钮是否选中。

  • setOnCheckedChangeListener(OnCheckedChangeListener)来对多选按钮进行监听。
  • boolean isChecked() 判断当前按钮是否选中
  • void.setChecked(boolean checked) 设置按钮是否勾选
 CheckBox checkBox = findViewById(R.id.checkBox1);// 设置选中状态checkBox.setChecked(false);// checkBox.isChecked() 获取选中状态boolean isChecked = checkBox.isChecked();Log.e("isChecked","当前复选框选中状态:"+isChecked);// 监听状态变化 setOnCheckedChangeListener() 方法checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {Log.e("isChecked","当前复选框选中状态:"+isChecked);}});

RadioButton 单选按钮

单选控件和 RadioGroup 一起使用, 在一个 RadioGroup 中只能选中一个

android:checkedButton指定初始选项。

RadioGroup 添加监听器:setOnCheckedChangeListener(OnCheckedChangeListener)

<?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"tools:context=".RadioButtonActivity"><RadioGroupandroid:layout_width="match_parent"android:layout_height="400dp"android:background="@color/cardview_shadow_start_color"><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="111"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="222"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="333"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="444"/></RadioGroup></LinearLayout>
radioGroup = findViewById(R.id.radioGroupId);radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Override// checkedId 是选中的 RadioButton 的idpublic void onCheckedChanged(RadioGroup group, int checkedId) {// 找到选中的 RadioButtonRadioButton radioButton = findViewById(checkedId);Toast.makeText(RadioButtonActivity.this, "当前选中的单选项:"+radioButton.getText(), Toast.LENGTH_SHORT).show();}});

 

ToggleButton 开关触发器

<ToggleButtonandroid:id="@+id/toggleButton1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textOff="关闭了"android:textOn="打开了"android:checked="true"android:text="ToggleButton" />

SeekBar 滑动条

android:max=“255” (最大的滑动值,从0开始)

android:progress=“255”(初始时滑动条的位置)

<SeekBarandroid:id="@+id/seekBar"android:max="100"android:progress="30"android:layout_width="match_parent"android:layout_height="wrap_content" />
public class RadioButtonActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_radio_button);SeekBar seekBar = findViewById(R.id.seekBar);// 设置最大值seekBar.setMax(50);// 设置当前进度seekBar.setProgress(40);seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {// 进度改变时(过程中)的回调方法@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {Log.e("seekBar change","当前seekBar的进度:"+progress);}// 开始时回调的方法@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {Log.e("seekBar开始了","当前seekBar的进度:"+seekBar.getProgress());}// 结束时回调的方法@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {Log.e("seekBar结束了","当前seekBar的进度:"+seekBar.getProgress());}});}
}

 ProgressBar 进度条

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".ProgressBarActivyty"><!--ProgressBar 的默认形式是转圈圈style="?android:attr/progressBarStyleHorizontal" style 设置风格android:max="100"  进度条的最大值android:indeterminate="true" 永恒滚动android:progress="10" 已完成进度--><ProgressBarandroid:layout_width="wrap_content"android:layout_height="wrap_content"/><ProgressBarandroid:layout_width="300dp"android:layout_height="wrap_content"android:progress="10"android:max="100"style="?android:attr/progressBarStyleHorizontal"/><ProgressBarandroid:id="@+id/progress"android:layout_width="300dp"android:layout_height="wrap_content"android:progress="10"android:max="100"android:indeterminate="true"style="?android:attr/progressBarStyleHorizontal"/><ProgressBarandroid:id="@+id/progress1"android:layout_width="300dp"android:layout_height="wrap_content"android:max="100"style="?android:attr/progressBarStyleHorizontal"/></LinearLayout>
public class ProgressBarActivyty extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_progress_bar);ProgressBar progressBar1 = findViewById(R.id.progress1);// 设置progressBar进度// progressBar1.setProgress(80);// 通过代码控制进度--- 利用线程// 但是在Android 4.0 之后不能在线程中直接操纵控件,会崩溃。progressBar是一个特例new Thread(){public void run(){for (int i = 1; i <= 100 ; i++) {progressBar1.setProgress(i);try {// 休眠一下Thread.sleep(30);} catch (InterruptedException e) {throw new RuntimeException(e);}}}}.start();}
}

共有属性

margin: 外边距,控件的外部边缘距离其父容器边缘的距离
padding: 内边距,控件内部的控件距离它边缘的边距
gravity:控件内部的控件相对于它的位置
layout_gravity:控件本身相对于父容器的位置
visibility: 可见状态 gone(不可见也不保留位置) visible(可见) invisible(不可见但保留位置)

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

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

相关文章

centos 7 yum install -y nagios

centos 7 systemctl disable firewalld --now vi /etc/selinux/config SELINUXdisabled yum install -y epel-release httpd nagios yum install -y httpd nagios systemctl enable httpd --now systemctl enable nagios --now 浏览器 IP/nagios 用户名&#xff1a;…

大白菜启动U盘想格式化但格式化不了

部分区域被修改分区表保护起来了。直接格式化的话&#xff0c;里面的文件夹都还在。根本格式化不了。特别是可用容量并未还原出来。 进入计算机管理》磁盘管理&#xff0c;看到U盘盘符。别搞错了。删除掉里面的已经分的区域和未分区区域&#xff0c;让它还原成一个整体。退出。…

「C++ 内存管理篇 1」C++动态内存分配

目录 〇、C语言的动态内存分配方式 一、C的动态内存分配方式 1. 什么是C的动态内存分配&#xff1f; 2. 为什么需要C的动态内存分配&#xff1f; a. new的优势 b. new的不足 c. delete的优势 d. 总结 3. 怎么使用new和delete? a. 对于内置类型 b. 对于自定义类型 c. 为什么ne…

prime1--vulnhub靶场通关教程

一. 信息收集 1. 探测目标主机IP地址 arp-scan -l //查看网段 vm 编辑--查看虚拟网络编辑器&#xff0c;看到靶机的网段 网段是&#xff1a; 192.168.83.0 是c段网络 2. 全面检测目标IP nmap -sP 192.168.83.1/24 靶机ip是&#xff1a; 192.168.83.145 攻击机的ip是&…

【Java难点】多线程终极

悲观锁和乐观锁 悲观锁 synchronized关键字和Lock的实现类都是悲观锁。 它很悲观&#xff0c;认为自己在使用数据的时候一定有别的线程来修改数据&#xff0c;因此在获取数据的时候会一不做二不休的先加锁&#xff0c;确保数据不会被别的线程修改。 适合写操作多的场景&…

【SpringBoot】00 Maven配置及创建项目

一、Maven配置 1、下载Maven 进入官网下载&#xff1a;Maven – Welcome to Apache MavenMaven – Download Apache Maven 本文以最新版为例&#xff0c;可按需选择版本 Maven – Welcome to Apache Maven 2、解压下载好的安装包 将安装包解压到自己设置的空文件夹中 3、…

7.Prism框架之对话框服务

文章目录 一. 目标二. 技能介绍① 什么是Dialog?② Prism中Dialog的实现方式③ Dialog使用案例一 (修改器)④ Dialog使用案例2(异常显示窗口) 一. 目标 1. 什么是Dialog?2. 传统的Dialog如何实现?3. Prism中Dialog实现方式4. 使用Dialog实现一个异常信息弹出框 二. 技能介…

《HCIP-openEuler实验指导手册》1.3Apache动态功能模块加载卸载练习

1.3.1 配置思路 mod_status 模块可以帮助管理员通过web界面监控Apache运行状态&#xff0c;通过LoadModule指令加载该模块&#xff0c;再配置相关权限&#xff0c;并开启ExtendedStatus后&#xff0c;即可使用该模块。 1.3.2 配置步骤 检查mod_status模块状态&#xff08;使…

C# Solidworks二次开发:访问平面、曲面相关API详解

大家好&#xff0c;今天要介绍的是关于平面、曲面相关的API。 下面是相关的API: &#xff08;1&#xff09;第一个为ISurfacePlanarFeatureData&#xff0c;这个API的含义为允许访问平面表面特征&#xff0c;下面是官方的具体解释&#xff1a; 下面是官方使用的例子&#xff…

【网络原理】IP协议的地址管理和路由选择

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

扭蛋机小程序带来了什么优势?扭蛋机收益攻略

在当下的潮流消费时代&#xff0c;人们对潮玩也日益个性化&#xff0c;扭蛋机作为一种新型的娱乐消费模式&#xff0c;深受大众喜爱。扭蛋机的价格低&#xff0c;各个年龄层的玩家都可以进行购买&#xff0c;潜在玩家量非常大。扭蛋机商品主打热门IP周边等&#xff0c;种类繁多…

大型零售企业,适合什么样的企业邮箱大文件解决方案?

大型零售企业通常指的是在全球或特定地区内具有显著市场影响力和知名度的零售商。这些企业不仅在零售业务收入上达到了惊人的规模&#xff0c;而且在全球范围内拥有广泛的销售网络和实体店铺。它们在快速变化的零售行业中持续创新&#xff0c;通过实体店、电商平台等多种渠道吸…

第十一章 Spring Boot 整合 WebSocket

第十一章 Spring Boot 整合 WebSocket 1. 为什么需要 WebSocket2. WebSocket 简介3. Spring Boot 整合 WebSocket3.1 实现消息群发1. 依赖2. 配置 WebSocket ************************************************************ 1. 为什么需要 WebSocket 2. WebSocket 简介 3. Spri…

QT支持多种开发语言

QT主要是一个C应用程序框架&#xff0c;但它也提供了对其他一些编程语言的官方或非官方支持。以下是QT支持的一些语言版本及其特点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Python (PyQt) &#xff1a; PyQt是QT的官方Pyth…

axios.get请求 重复键问题??

封装的接口方法&#xff1a; 数据&#xff1a; 多选框多选后 能得到对应的数组 但是请求的载荷却是这样的,导致会请求不到数据 departmentChecks 的格式看起来是一个数组&#xff0c;但是通常 HTTP 请求的查询参数不支持使用相同的键&#xff08;key&#xff09;名多次。如…

【Redis 开发】Redis哨兵

哨兵 作用和原理服务状态监控选举新的master 搭建哨兵集群RedisTemplate的哨兵模式 作用和原理 Redis提供了哨兵机制来实现主从集群中的自动故障恢复&#xff1a; 哨兵也是一个集群 监控&#xff1a;会不断检查master和slave是否按预期工作自动故障恢复&#xff1a;如果mast…

本地生活服务平台有哪些?哪个靠谱?

随着多家互联网大厂的本地生活服务布局日益展开&#xff0c;不少人都看到了其中的巨大市场缺口和广阔前景&#xff0c;想要入驻本地生活服务平台&#xff0c;瓜分这块巨大的蛋糕。而在当下这个选择大于努力的时代&#xff0c;能否分到蛋糕以及分到多少蛋糕的关键&#xff0c;就…

Vast+产品展厅 | Vastbase G100数据库是什么架构?(2)

Vastbase G100是海量数据融合了多年对各行业应用场景的深入理解&#xff0c;基于openGauss内核开发的企业级关系型数据库。 上一期&#xff0c;《Vast产品展厅》为您介绍了Vastbase G100的部署架构和物理架构。 本期&#xff0c;我们将为您详细讲解Vastbase G100的物理架构和…

基于Python实现心脏病数据可视化DEA+预测【500010103.1】

一、数据说明 该心脏病数据集是通过组合 5 个已经独立可用但以前未合并的流行心脏病数据集来策划的。在这个数据集中&#xff0c;5 个心脏数据集结合了 11 个共同特征&#xff0c;使其成为迄今为止可用于研究目的的最大心脏病数据集。 该数据集由 1190 个实例和 11 个特征组成…