Android常见控件(一)

news2024/9/27 19:22:06

目录

前言

一、TextView控件

常用属性

二、Button控件

设置点击事件的方式

1.在布局文件中指定onClick的值

2.使用匿名内部类

3.通过实现onClickListener接口

三、ImageView控件

常见属性

src与background的区别

scaleType

1.ScaleType.FIT_CENTER默认

2.ScaleType.FIT_START

3.ScaleType.FIT_END

4.ScaleType.FIT_XY

5.Scale.CENTER

6.ScaleType.CENTER_CROP

7.ScaleType.CENTER_INSIDE


前言

在上一篇中,我们讲解了android中一些常见的界面布局,那么本章我们就来讲解一下在android的一些常用的界面控件。几乎每一个应用程序都是通过界面控件与用户进行交互的,android中给我们提供了丰富的界面控件。

一、TextView控件

TextView控件用于显示文本信息。我们可以在XML布局文件中通过添加属性的方式来控件TextView控件。

常用属性

属性说明
android:layout_width设置TextView控件的宽度
android:layout_height设置TextView控件的高度
android:id设置TextView控件的唯一标识
android:background设置控件的背景
android:layout_margin设置当前控件与屏幕边界或者周围控件、布局的距离
android:padding设置控件与该控件的内容的距离
android:textColor设置文本中文字显示的颜色
android:textSize设置文本大小,推荐使用sp。
android:gravity设置文本内容的文职,如设置成“center”,文本将居中显示
android:maxLength设置文本最大长度,超出此长度的文本不显示。
android:lines设置文本的行数,超出行数的文本不显示
android:maxLines设置文本的最大行数,超出行数的文本不显示
android:ellipsize设置当文本超出TextView控件规定的范围时的显示方式。属性值可选为“start”、“middle”、“end”,分别表示当文本超出TextView控件规定的范围时,在文本开始、文本中间或者末尾显示省略号“...”
android:drawableTop在文本顶部显示图像,该图像资源可以放在res/drawable文件夹中相应分辨率的目录下,通过 “@drawable/文件名” 调用。类似的属性还有android:drawableLeft、android:drawableRight、android:drawableBotton,分别表示在文本左侧、文本右侧和文本底部
android:lineSpacingExtra设置文本的行间距
android:textStyle设置文本的样式,bold(粗体)、italic(斜体)、normal(正常)

对于这些TextVIiew属性,我们同样可以使用java中的方法来设置。控件的每一个属性在java中都会有对应的一个方法,例如,TextView控件中的android:text,对于java中的setText()方法。

我们可以来练习一下如何使用。

<?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">

    <TextView
        android:id="@+id/v1"
        android:text="这是一个粗体的文本"
        android:textSize="20sp"
        android:background="#4CAF50"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20sp"
        android:textStyle="bold"/>
    <TextView
        android:id="@+id/v2"
        android:text="这是一个斜体的文本"
        android:textSize="20sp"
        android:background="#FFEB3B"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20sp"
        android:textStyle="italic"/>

    <TextView
        android:id="@+id/v3"
        android:text="这是一个正常字体的文本"
        android:textSize="20sp"
        android:background="#00BCD4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20sp"
        android:textStyle="normal"/>
</LinearLayout>

二、Button控件

Button控件表示按钮,继承于TextView控件, 既可以显示文本,又可以显示图片,同时允许用户通过点击来进行操作,当Button控件被点击后,被按下与弹起的背景会有一个动态切换的效果,这个效果就是点击效果。

通常情况下,对所有的控件都可以设置点击事件,Button也不例外,Button控件最重要的作用就是响应用户的一系列点击事件。

设置点击事件的方式

1.在布局文件中指定onClick的值

在布局文件中加上android:onClick="方法名",对于有些控件(比如TextView)需要兼容旧的SDK API,还需要加上android:clickable="true"

    <Button
        ....
        android:clickable="true"
        android:onClick="click"/>

2.使用匿名内部类

在java文件中,可以使用匿名内部类的方法为Button控件设置点击事件。

当然前提我们需要通过findViewById方法来找到控件。

 btn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               //实现点击事件的代码
           }
       });

Button控件设置setOnClickListener()方法来实现堆Button控件点击事件的监听。此处setOnClickListener()方法传递的参数是一个匿名内部类。如果监听到控件被点击,那么程序就会调用匿名内部类中的onClick()方法来实现Button控件的点击事件。

3.通过实现onClickListener接口

使用当前Activity类去实现View.OnClickListener接口。


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.text_viw);
       Button btn=findViewById(R.id.btn_1);
       btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        //实现点击事件的代码
    }
}

在上述的这三种实现点击事件的方法中,我们推荐使用第三种来实现控件的点击事件,提高了代码的复用性,减少了代码的冗余。

示例:

创建一个XML布局文件btn_text.xml,增加3个Button控件。

<?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">

    <Button
        android:id="@+id/btn_1"
        android:text="按钮1"
        android:textSize="20sp"
        android:layout_marginTop="20sp"

        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


    <Button
        android:id="@+id/btn_2"
        android:text="按钮2"
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/btn_3"
        android:text="按钮3"
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

那么接下来,我们想要实现的功能就是,当我们点击按钮之后,按钮内的文本显示为“该按钮?已经被点击”。那么我们就需要来实现点击事件。

这里我们选用第三种方法,实现接口。


import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn1;
    private Button btn2;
    private Button btn3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.btn_text);
        //按钮1的点击事件
        btn1 = findViewById(R.id.btn_1);
        btn1.setOnClickListener(this);

        //按钮2的点击事件
        btn2 = findViewById(R.id.btn_2);
        btn2.setOnClickListener(this);

        //按钮3的点击事件
        btn3 = findViewById(R.id.btn_3);
        btn3.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
       if(view.getId()==R.id.btn_1){
           btn1.setText("按钮1已被点击");
       } else if (view.getId()==R.id.btn_2) {
           btn2.setText("按钮2已被点击");
       }else if (view.getId()==R.id.btn_3){
           btn3.setText("按钮3已被点击");
       }
    }
}

当我们运行之后,就可以得到:

三、ImageView控件

ImageView表示图片,继承于View,可以加载各种图片资源。

常见属性

属性

说明

android:src设置图片资源
android:scaleType设置图片缩放类型
android:maxHeight最大高度
android:maxWidth最大宽度
android:adjustViewBounds调整view的界限
android:tint图片的着色颜色
android:tintMode用于图像色调的混合模式
android:cropToPadding若为true,则图片将被剪切以适应期填充物
android:baselineAlignBottom若为true,则图像视图将根据基线对齐底部边缘
android:baseline视图中基线的偏移量

src与background的区别

background是View的背景,会把图片拉大放满整个view,而src是ImageView的属性,接受要展示的图片资源。

我们来看个例子:

可以看到,我们设置为背景的,如果控件的宽高够大,对于设置src的控件,并没有铺满整个控件,而设置为background的控件,我们可以看到,图片会铺满整个控件。

那么对于src的控件,我们有没有办法来控制图片的位置和大小呢,我们可以通过scaleType来设置。

scaleType

通过scaleType,能够对图片进行缩放、等比例缩放、缩放后展示位置等。android提供了8种scaleType的属性值。

在测试之前,我们需要在drawable中添加一张测试图片

<?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"
    android:layout_margin="50dp"
    android:gravity="center"
    android:background="#8BC34A">

    <ImageView
        android:src="@drawable/back"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:background="#EFE7E7"/>
</LinearLayout>

在android中不添加scaleType属性时:

8个scaleType属性值,其实可以分为3类:

  1. 以 FIT_开头的4中,共同点是都会对图片进行缩放
  2. 以 CENTER_开头的3种,共同点是居中显示,图片的中心点会与ImagView的中心点重叠。
  3. ScaleType.MATRIX

1.ScaleType.FIT_CENTER默认

默认情况下就是该值,会将图片等比缩放到能够填充控件大小,并居中显示。

  android:scaleType="fitCenter"

2.ScaleType.FIT_START

图片等比缩放到控件大小,并防止在控件的顶部或左边进行展示。此模式下ImageView的下半部分会留白。如果图片高度大于宽,那么就会在ImageView的有半部分留白。

 android:scaleType="fitStart"

3.ScaleType.FIT_END

图片等比缩放到控件大小,并放置在控件的下边或右边进行展示。与start相反。

android:scaleType="fitEnd"

4.ScaleType.FIT_XY

图片会缩放到控件大小,完全填充控件大小展示。该模式不是等比缩放,会填充整个ImageView控件。

android:scaleType="fitXY"

 

5.Scale.CENTER

不使用缩放,Image会展示图片的中心部分,即图片的中心点和ImageView的中心点重叠。看下图,如果图片的大小 小于 控件的宽高,那么图片就会被居中显示。

android:scaleType="center"

6.ScaleType.CENTER_CROP

该模式下的图片会被等比缩放完全填充整个ImageView,并居中显示。

android:scaleType="centerCrop"

7.ScaleType.CENTER_INSIDE

该模式会以完全展示图片的内容为目的。图片将被等比缩放到能够完整展示在ImageView中并居中显示。如果图片大小 小于 控件大小,那么就直接居中显示。

这里大家看到这个模式的效果与ScaleType.FIT_CENTER的效果相同,这是因为所用图片是是大于ImageView的大小的。如果图片是小于控件的,那么就能看出区别。

android:scaleType="centerInside"

8.ScaleType.MATRIX

此模式是重点,需要搭配 ImageView.setImageMatrix(Matrix matrix)使用,该模式需要指定一个变换矩阵用于指定图片如何显示,其实前面的7种模式都是通过ImageView在内部生成了相应的变换矩阵,等于是提供了该模式的一种特定值,使用这个模式只要传入相应矩阵,也就能实现上述七种显示效果。

在使用的时候,需要先调用

image.setScaleType(ImageView.ScaleType.MATRIX);

再调用

 image.setImageMatrix(matrix);       //设置并应用矩阵
  ImageView image = findViewById(R.id.imageView);
        image.setScaleType(ImageView.ScaleType.MATRIX);  //设置为矩阵模式

        Matrix matrix = new Matrix();           //创建一个单位矩阵
        matrix.setTranslate(20, 20);          //平移x和y各20单位
        matrix.preRotate(10);                   //顺时针旋转10度
        image.setImageMatrix(matrix);       //设置并应用矩阵


本篇我们就先讲3个控件,下篇接着讲~

若有不足,欢迎指正~

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

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

相关文章

Java学习高级五

API 常用API Object类 Object类的常见方法

数据结构与算法 - 双指针

一、移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12]输出: [1,3,12,0,0]示例 2: 输入: nums …

Linux文件传输命令介绍(非常详细)零基础入门到精通,收藏这一篇就够了

文件传输命令 1 ftp&#xff1a;传统的文件传输协议,使用广泛但安全性较低。 sftp&#xff1a;基于SSH的安全文件传输协议,提供交互式的文件管理功能。 tftp&#xff1a;简单的文件传输协议,主要用于网络设备的固件升级。 lftp&#xff1a;功能强大的FTP客户端,支持多种文件…

2024最新外卖霸王餐小程序系统源码|霸王餐美团/饿了么系统 粉丝裂变+私域运营+持续稳定

前言&#xff1a; 外卖霸王餐小程序是一种结合了外卖点餐和优惠返利功能的微信小程序&#xff0c;为用户提供了一种便捷的点餐体验和优惠福利。 一、霸王餐系统小程序是什么&#xff1f; 霸王餐系统是指一种特殊的营销活动平台&#xff0c;商家通过该平台提供免费或大幅度折…

【深度学习】嘿马深度学习笔记第3篇:TensorFlow介绍,学习目标【附代码文档】

本教程的知识点为&#xff1a;深度学习介绍 1.1 深度学习与机器学习的区别 TensorFlow介绍 2.4 张量 2.4.1 张量(Tensor) 2.4.1.1 张量的类型 TensorFlow介绍 1.2 神经网络基础 1.2.1 Logistic回归 1.2.1.1 Logistic回归 TensorFlow介绍 总结 每日作业 神经网络与tf.keras 1.3 …

Netty深度剖析(2)— 事件调度

我们在上一节已经简单的介绍了一下 Netty 的事件调度&#xff0c;可以说 Netty 高性能的奥秘主要就在于其核心的事件循环和任务处理引擎&#xff0c;那么它究竟是如何实现的呢&#xff1f;这一节我们来详细探讨一下 Reactor 线程模型 在解释 Netty 事件循环的实现原理前&#…

C语言enum枚举

目录 开头1.什么是枚举?2.枚举的优缺点优点缺点 3.枚举的实际用途(这里只列举其一)简易计算器枚举版…… 结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们要学关于C语言枚举的一些知识。 1.什么是枚举? 枚举&#xff0c;就是一一列举的意思&#xff0c;比…

Verilog刷题笔记53

题目&#xff1a; Fsm serialdata See also: Serial receiver Now that you have a finite state machine that can identify when bytes are correctly received in a serial bitstream, add a datapath that will output the correctly-received data byte. out_byte needs …

Identity IdCard OCR API 对接说明

Identity IdCard OCR API 对接说明 本文将介绍一种通过输入身份证图片 或 姓名和身份证号码&#xff0c;来校验姓名和身份证号的真实性和一致性。本接口用于校验姓名和身份证号的真实性和一致性&#xff0c;您可以通过输入姓名和身份证号或传入身份证人像面照片提供所需验证信…

消息系统-WebSocket消息推送

消息系统-WebSocket消息推送 接口层使用消息通知 1.数据库设计: 1.消息通知表 2.消息记录表 3.用户表和角色表及用户角色记录表 2.设计: 未使用消息中间件 ,利用接口层调用消息通知接口工具类 3.前端:消息通知页面 1.消息通知列表 2.消息通知标签 3.消息通知未读抽屉列表 一.…

【C#】虚部与实部

实数是数学中的一个基本概念&#xff0c;它包括了所有的有理数和无理数。实数集合是连续的&#xff0c;可以表示为数轴上的每一个点。 复数是实数的扩展&#xff0c;它允许进行除零以外的所有基本算术运算。复数由两部分组成&#xff1a;实部和虚部。 实部&#xff08;Real P…

计算机毕业设计选题推荐-springboot 基于SpringBoot的家电销售展示平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

迪杰斯特拉(Dijkstra)算法(C/C++)

迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻&#xff08;Edsger Dijkstra&#xff09;在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉算法主…

k8s上部署ingress-controller

一、安装helm仓库 # helm pull ingress-nginx/ingress-nginx 二、修改 三、运行 # kubectl label nodes node01.110111.cn ingresstrue# kubectl label nodes node02.110112.cn ingresstrue# helm upgrade --install ingress-nginx -n ingress-nginx . -f values.yaml 四、检…

布局管理(Layouts)-Qt-思维导图-学习笔记

布局管理(Layouts) Qt 提供了非常丰富的布局类&#xff0c;主要包括以下基本布局管理类 QBoxLayout 提供了水平和垂直的布局管理&#xff0c;可以将子部件按行或列排列。根据排列方向的不同&#xff0c;QBoxLayout 分为 QHBoxLayout&#xff08;水平布局&#xff09;和 QVBox…

宏定义———C语言

*符号代表全部的意思*.i代表的是全部的点i文件 宏定义 &#xff1a; 1.定义&#xff1a; #define 宏名 常量功能&#xff1a;宏名代替常量&#xff0c;宏名要求全大写且见名知义 2.示例&#xff1a; #include <stdio.h> #define PI 3.14 #define Q 4 #define P QQi…

Ubuntu系统+宝塔面板部署Frp内网穿透服务

一、搭建目的 上次在局域网中搭建了自己的个人网盘之后&#xff0c;上传文件、照片都很方便&#xff0c;但是只能限制在内网中访问&#xff01;所以这次再搭建一个内网穿透服务器&#xff0c;这样不管在哪里都能访问到家里的云盘&#xff01; 二、内网穿透Frp是什么&#xff1…

连接一切:Web3如何推动物联网的发展

物联网面临的挑战 物联网&#xff08;IoT&#xff09;作为现代科技的重要组成部分&#xff0c;通过将各种智能设备和系统互联&#xff0c;正在以惊人的速度改变我们的生活方式。从智能家居到智慧城市&#xff0c;物联网的应用无处不在。然而&#xff0c;随着设备数量的急剧增加…

华为---端口隔离简介和示例配置

目录 1. 端口隔离概念 2. 端口隔离作用 3. 端口隔离优点 4. 端口隔离缺点 5. 端口隔离的方法和应用场景 6. 端口隔离配置 6.1 端口隔离相关配置命令 6.2 端口隔离配置思路 7. 示例配置 7.1 示例场景 7.2 网络拓扑图 7.3 基本配置 7.4端口隔离配置与验证 7.4.1 双…

初识--树(1)

下面就是这篇博客要讲的内容 树 二叉树堆 树概念及结构二叉树的概念及结构二叉树的实现堆的概念及运用 这篇博客主要以二叉树为主要内容。 1、树的概念及结构 1.1树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限…