Android --- 常见UI组件

news2024/11/28 6:36:49

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"  设置单行  后面加句号
 <TextView
    android: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" 设置跑马灯时长

<TextView
   android: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

<EditText
        android: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="账号"/>

    <EditText
        android: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() {
            @Override
            public 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">
   
    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:background="@color/cardview_shadow_start_color">
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="111"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="222"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="333"/>

        <RadioButton
            android: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 的id
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // 找到选中的 RadioButton
                RadioButton radioButton = findViewById(checkedId);
                Toast.makeText(RadioButtonActivity.this, "当前选中的单选项:"+radioButton.getText(), Toast.LENGTH_SHORT).show();
            }
        });

 

ToggleButton 开关触发器

<ToggleButton
        android: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”(初始时滑动条的位置)

<SeekBar
    android:id="@+id/seekBar"
    android:max="100"
    android:progress="30"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
public class RadioButtonActivity extends AppCompatActivity {

    @Override
    protected 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() {
            // 进度改变时(过程中)的回调方法
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                Log.e("seekBar change","当前seekBar的进度:"+progress);

            }

            // 开始时回调的方法
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                Log.e("seekBar开始了","当前seekBar的进度:"+seekBar.getProgress());

            }

            // 结束时回调的方法
            @Override
            public 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" 已完成进度
    -->
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <ProgressBar
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:progress="10"
        android:max="100"
        style="?android:attr/progressBarStyleHorizontal"/>
    <ProgressBar
        android: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"/>
    <ProgressBar
        android: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 {
    @Override
    protected 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.coloradmin.cn/o/1631557.html

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

相关文章

闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法

前言 除了使用 ASP.NET Core 内置框架来校验数据&#xff0c;事实上&#xff0c;通过很多第三方框架校验数据&#xff0c;更具优势。 比如 FluentValidation&#xff0c;FluentValidation 是第三方的数据校验框架&#xff0c;具有许多优势&#xff0c;是开发人员首选的数据校验…

kyuubi、sparksql部署实战与连接

一、下载spark和kyuubi的软件包 spark官网下载 https://spark.apache.org/downloads.html kyuubi官网下载 https://www.apache.org/dyn/closer.lua/kyuubi/kyuubi-1.9.0/apache-kyuubi-1.9.0-bin.tgz 二、部署spark 1、spark配置spark-env.sh YARN_CONF_DIR/opt/cloudera…

大象机器人开源协作机械臂myCobot 630 全面升级!

1. 开篇概述 在快速发展的机器人技术领域中&#xff0c;Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂&#xff0c;myCobot 600以其600mm的工作半径和2kg的末端负载能力&#xff0c;满足了多样化的操作需求。…

paddleocr C++生成dll

目录 编译完成后修改内容: 新建ppocr.h头文件 注释掉main.cpp内全部内容&#xff0c;将下面内容替换进去。ppocr.h需要再环境配置中包含进去头文件 然后更改配置信息&#xff0c;将exe换成dll 随后右击重新编译会在根目录生成dll,lib文件。 注意这些dll一个也不能少。生成…

HTML5(2)

目录 一.列表、表格、表单 1.列表标签 2.表格 4.无语义的布局标签 5.字符实体 6.综合案例--1 7.综合案例--表单 一.列表、表格、表单 1.列表标签 1.1 无序列表 1.2 有序列表 1.3 定义列表 定义列表一般用于网页底部的帮助中心 2.表格 2.1 2.2 表格结构标签 shiftaltf 格…

计算机网络之传输层TCP\UDP协议

UDP协议 用户数据报协议UDP概述 UDP只在IP数据报服务之上增加了很少功能&#xff0c;即复用分用和差错检测功能 UDP的主要特点&#xff1a; UDP是无连接的&#xff0c;减少开销和发送数据之前的时延 UDP使用最大努力交付&#xff0c;即不保证可靠交付&#xff0c;可靠性由U…

《Fundamentals of Power Electronics》——全桥型隔离降压转换器

以下是关于全桥型隔离降压转换器的相关知识点&#xff1a; 全桥变压器隔离型降压转换器如下图所示。 上图展示了一个具有二次侧绕组中心抽头的版本&#xff0c;该电路常用于产生低输出电压。二次侧绕组的上下两个绕组可以看作是两个单独的绕组&#xff0c;因此可以看成是具有变…

#const成员

基于写的日期类的实现&#xff0c;去分析const成员的问题。 需要用到下面的两个函数。 这个时候我们去构建一个const Date,如下&#xff0c;这是不和法的&#xff0c;为什么呢&#xff1f; 其实这里涉及一个权限放大的问题&#xff0c;之前就说了&#xff0c;权限可以缩小&…

项目部署总结

1、安装jdk 第一步&#xff1a;上传jdk压缩安装包到服务器 第二步&#xff1a;将压缩安装包解压 tar -xvf jdk-8uXXX-linux-x64.tar.gz 第三步&#xff1a;配置环境变量 编辑/etc/profile文件&#xff0c;在文件末尾添加以下内容&#xff1a; export JAVA_HOME/path/to/j…

应急学院物联网应急安全产教融合基地解决方案

第一章 背景 1.1物联网应急安全产教融合发展概况 物联网应急安全产教融合发展是当前社会发展的重要趋势。随着物联网技术的广泛应用&#xff0c;应急安全领域对人才的需求日益迫切。因此&#xff0c;产教融合成为培养高素质、专业化人才的关键途径。在这一背景下&#xff0c;…

Kotlin泛型之 循环引用泛型(A的泛型是B的子类,B的泛型是A的子类)

IDE(编辑器)报错 循环引用泛型是我起的名字&#xff0c;不知道官方的名字是什么。这个问题是我在定义Android 的MVP时提出来的。具体是什么样的呢&#xff1f;我们看一下我的基础的MVP定义&#xff1a; interface IPresenter<V> { fun getView(): V }interface IVie…

云原生Kubernetes: K8S 1.29版本 部署Sonarqube

一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注masterK8S master节点1.29.0192.168.204.8 node1K8S node节点1.29.0192.168.204.9node2K8S node节点1.29.0192.168.204.10已部署Kuboard &#xff08;2&#xff09;master节点查看集群 1&…

【已解决】Python Selenium chromedriver Pycharm闪退的问题

概要 根据不同的业务场景需求&#xff0c;有时我们难免会使用程序来打开浏览器进行访问。本文在pycharm中使用selenium打开chromedriver出现闪退问题&#xff0c;根据不断尝试&#xff0c;最终找到的问题根本是版本问题。 代码如下 # (1) 导入selenium from selenium import …

RDD算子使用----transformation转换操作

RDD算子使用 transformation转换操作 map算子 rdd.map(p: A > B):RDD&#xff0c;对rdd集合中的每一个元素&#xff0c;都作用一次该func函数&#xff0c;之后返回值为生成元素构成的一个新的RDD。 val sc new SparkContext(conf)//map 原集合*7val list 1 to 7//构建…

纯血鸿蒙APP实战开发——全局状态保留能力弹窗

全局状态保留能力弹窗 介绍 全局状态保留能力弹窗一种很常见的能力&#xff0c;能够保持状态&#xff0c;且支持全局控制显隐状态以及自定义布局。使用效果参考评论组件 效果图预览 使用说明 使用案例参考短视频案例 首先程序入口页对全局弹窗初始化&#xff0c;使用Globa…

Redis基本數據結構 ― List

Redis基本數據結構 ― List 介紹常用命令範例1. 將元素推入List中2. 取得List內容3. 彈出元素 介紹 Redis中的List結構是一個雙向鏈表。 LPUSH LPOP StackLPUSH RPOP QueueLPUSH BRPOP Queue(消息隊列) 常用命令 命令功能LPUSH將元素推入列表左端RPUSH將元素推入列表右…

ZooKeeper 环境搭建详细教程之三(真集群)

ZooKeeper 搭建详细步骤之三(真集群) ZooKeeper 搭建详细步骤之二(伪集群模式) ZooKeeper 搭建详细步骤之一(单机模式) ZooKeeper 及相关概念简介 真集群搭建 搭建 ZooKeeper 真集群涉及多个步骤,包括准备环境、配置文件设置、启动服务以及验证集群状态。 以下是一个简…

如何基于Zookeeper实现注册中心模型?

在分布式系统中&#xff0c;通常会存在几十个甚至上百个服务&#xff0c;开发人员可能甚至都无法明确系统中到底有哪些服务正在运行。另一方面&#xff0c;我们很难同时确保所有服务都不出现问题&#xff0c;也很难保证当前的服务部署方式不做调整和优化。由于自动扩容、服务重…

天冕科技亮相第十七届深圳国际金融博览会!

第十七届深圳国际金融博览会在深圳会展中心正式开幕&#xff0c;天冕科技跟随南山区组团集体亮相&#xff0c;充分展现金融活力。此次金博会&#xff0c;南山区政府共遴选了包括天冕科技在内的三家优秀金融科技企业组团参展&#xff0c;以特色与创新的案例展示了辖区金融业发展…

Power BI:如何将文件夹批量Excel(多sheet页)文件导入?

故事背景&#xff1a; 业务同事想用Power BI分析近两年市场费用。 数据源全部是Excel文件&#xff0c;并且以每月一个Excel文件的方式&#xff0c;统一存放到同一文件夹下面。 重点&#xff0c;每张Excel文件会有多张sheet页&#xff0c;用区分每家分公司的费用信息。 目前…