Android Textview Button 等基础组件学习

news2025/1/20 7:16:40

一 Textview

1 基本使用

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:text = "@string/tv_one"
        android:textColor = "#FF000000"
        android:textSize="30sp"
        android:background = "#FFFFFFFF"
        android:shadowColor="@color/purple_200"
        android:shadowRadius="3.0"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:gravity = "center_vertical"
        android:id="@+id/tv_one" android:layout_width="200dp" android:layout_height="200dp"
        android:layout_gravity="center_vertical"
        />

</LinearLayout>

 

 

2  跑马灯效果

 

要实现跑马灯效果  文字一定要够长。

设置 重复次数   获取焦点

记得 放<requestFocus />标签,表示将当前控件设为焦点,然后跑马灯就起效果了

android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"

    <TextView
        android:text = "@string/tv_one"
        android:textColor = "#FF000000"
        android:textSize="30sp"
        android:background = "#FFFFFFFF"
        android:shadowColor="@color/purple_200"
        android:shadowRadius="3.0"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:gravity = "center_vertical"
        android:id="@+id/tv_one"
        android:layout_width="200dp"
        android:layout_height="80dp"
        android:layout_gravity="center_vertical"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
       >
        <requestFocus/>

    </TextView>

二  Button

1 使用

系统会对Button中所有的英文字母自动进行大写转换,可以配置属性禁用

设置按钮背景色无效的话 去themes.xml 文件修改style,加一个.Bridge

<style name="Theme.LeonardoDay1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
    <Button
        android:id="@+id/btn"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="ClickMe"
        android:textAllCaps="false"
        android:background="@drawable/btn_selector"
        android:backgroundTint="@color/btn_color_selector"
        android:onClick="leoClick"
        >

    </Button>

 Button btn = findViewById(R.id.btn);
        btn.setText("ClickOK");

        // 点击事件
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 收到点击效果

                Log.e(TAG, "onClick: ");
            }
        });
        // 长按事件
        btn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                Log.e(TAG, "onLongClick: ");
                return false;
            }
        });

        // 触摸事件
        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                Log.e(TAG, "onTouch: ");
                // 返回为True 的话 点击事件就会到此结束了
                return false;
            }
        });
 public void leoClick(View view) {
        Log.e(TAG, "leoClick " );

    }

三  EditText

获取输入的文本

String s =  et.getText().toString();

<EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:hint="please type something"
        android:textColorHint="#ffeeaaee"
        android:inputType="numberPassword"
        android:drawableLeft="@drawable/baseline_account_circle_24"
        android:drawableRight="@drawable/baseline_access_alarm_24"
        android:drawablePadding="20dp"
        android:paddingLeft="10dp"
        android:background="#ffffffff"
        />

 

四 ImageView


src 图片资源 

scaleType 缩放类型

maxHeight 最大高度 maxWidth 最大宽度


        <ImageView
            android:id="@+id/img_view"
            android:layout_width="300dp"
            android:layout_height="150dp"
            android:src="@drawable/baseline_account_circle_24"
            />

        imgView = findViewById(R.id.img_view);
        imgView.setImageResource(R.drawable.demo2);

        // 默认值 缩放后放置于中间
        imgView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        // 最主要的目的是把图片显示在里面
        imgView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        // 不改变 原图的大小 从左上角开始绘制 ,超过的部分做剪裁处理
        imgView.setScaleType(ImageView.ScaleType.MATRIX);

 

五 ProgressBar

用于界面上显示一个进度条,表示我们的程序在加载一些数据。

有两种形式 progress_horizontal 和 progress_circular 形式

显示与隐藏的可以通过visiable invisiable 和 gone  进行设定

所有的安卓控件都有这个属性 Visiablity 这个属性

 

        <ProgressBar
            android:id="@+id/pb"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:max="80"
            />

        <ProgressBar
            android:id="@+id/pb_h"
            style="?android:progressBarStyleHorizontal"
            android:layout_width="200dp"
            android:layout_height="50dp"
            android:max="100"/>

 if(pb.getVisibility() == View.GONE){
                    pb.setVisibility(View.VISIBLE);
                }else {
                    pb.setVisibility(View.GONE);
                }
                int progress = pb2.getProgress();
                progress += 10;
                pb2.setProgress(progress);

六 Notification

创建一个通知 并且发送·



    private NotificationManager manager;
    private Notification notification;



 // 1 创建通知管理
        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        //2 创建一个通知 channel
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            NotificationChannel channel = new NotificationChannel("leo","测试下",NotificationManager.IMPORTANCE_HIGH);
            manager.createNotificationChannel(channel);
        }
        // 3 创建一个通知
        // 3.1 创建一个跳转的意图 点击通知进行跳转
        Intent intent = new Intent(this, NotificationActivity.class);
        PendingIntent p_intent  = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        // context
        notification = new NotificationCompat.Builder(this,"leo").setContentTitle("温馨提示")
                .setContentText("这是一个通知哦")
                .setSmallIcon(R.drawable.baseline_access_alarm_24)
                .setColor(Color.parseColor("#ff0000"))
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.demo2))
                .setContentIntent(p_intent)
                .setAutoCancel(true)
                .build();

        Button sendBtn = findViewById(R.id.send_noti);
        sendBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 发送通知
                manager.notify(1,notification);
            }
        });

        Button cancelBtn = findViewById(R.id.cancel_noti);
        cancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 取消发送通知
                manager.cancel(1);
            }
        });

 

七 ToolBar

显示自己的ToolBar,在theme 中设置NoActionBar

<style name="Theme.LeonardoDay1" parent="Theme.MaterialComponents.DayNight.NoActionBar">

      <androidx.appcompat.widget.Toolbar
            android:id="@+id/tb"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="#ddaaee"

            app:navigationIcon="@drawable/baseline_access_alarm_24"
            app:titleTextColor="@color/btn_color_selector"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="你好"
                android:textSize="25sp"
                android:layout_gravity="center"
                android:gravity="center"
                />
        </androidx.appcompat.widget.Toolbar>
     Toolbar tb =  findViewById(R.id.tb);
        tb.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

 八  AlertDialog

在当前的界面演出一个对话框。

   // 弹出对话框
                // 1构造器
                AlertDialog.Builder  dialog = new AlertDialog.Builder(MainActivity.this);
                // 设置内容
                dialog.setTitle("This is My oscillator")
                        .setMessage("Something I know")
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                // 确认的点击

                            }
                        })
                        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {

                            }
                        });

                // 显示
                dialog.show();

九 PopupWindow

弹出框如下

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">

       <Button
           android:id="@+id/pop_btn_1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="加油"
           />
       <Button
           android:id="@+id/pop_btn_2"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="奥利给"
           />


    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

    void showPopWindow(View view){
        // 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。
        // 不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
        View popView = getLayoutInflater().inflate(R.layout.popup,null);

        // focusable 最后的一个参数 点击空白处可以退出
        PopupWindow popUpWindow = new PopupWindow(popView, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
        // 后面两个参数为宽高
        //显示在view 的下方 后面两个参数为X Y 轴的偏移
        popUpWindow.showAsDropDown(view,90,20);

        // 按钮的监听
        Button btn1 =  popView.findViewById(R.id.pop_btn_1);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 消失
                popUpWindow.dismiss();
            }
        });
        Button btn2 =  popView.findViewById(R.id.pop_btn_2);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 消失
                popUpWindow.dismiss();
            }
        });
    }

 

 

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

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

相关文章

vue中的pinia使用和持久化 - 粘贴即用

学习关键语句&#xff1a; pinia怎么用 写在前面 pinia 作为 vuex 的替代品好像变得不得不学习了&#xff0c;学起来一用发现 vuex 是什么麻烦的东西&#xff0c;我不认识 这篇文章一共包含的内容有&#xff1a; 安装 pinia读取数据修改数据数据持久化 其中&#xff0c;修…

代码不熟没关系,让AI替你写

程序员早已不是一个陌生的群体&#xff0c;但程序、代码相对普通人而言&#xff0c;看着还是比较深奥难懂&#xff0c;但自从有了ChatGPT&#xff0c;不少对此有兴趣的外行人士&#xff0c;也能轻松写出代码了&#xff0c;比如让ChatGPT写一个贪吃蛇游戏&#xff0c;按它给出的…

C++入门(2)

C入门1.缺省参数1.1. 缺省参数举例和概念1.2. 函数的传参是从左到右给参数的1.3.缺省参数分类1.4. 缺省参数的函数声明与定义2.函数重载2.1.函数重载的概念2.2. 函数重载的情况2.3.剖析C语言不能函数重载而C却可以的原因2.3.1. 编译链接过程2.3.2. 函数名修饰规则3.引用3.1. 引…

Java并行流:一次解决多线程编程难题,让你的程序飞起来

前言 在日常的工作中&#xff0c;为了提高程序的处理速度&#xff0c;充分利用多核处理器的性能&#xff0c;我们需要手动编写多线程代码。但是多线程编程非常复杂&#xff0c;容易出现死锁、竞态条件等问题&#xff0c;给我们带来了很大的困扰。而 Java 并行流则提供了一种更加…

python机器学习和深度学习在气象中的应用

查看原文>>> Python人工智能在气象中的实践技术应用 Python 是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得 Python 在气象、海洋、地理、…

14:24面试,14:32就出来了 ,问的实在是太...

从外包出来&#xff0c;没想到算法死在另一家厂子&#xff0c;自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到8月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有…

PythonFlash+MySQL实现简单管理系统的增删改查

今天简单分享一下用Python的flash框架结合MySQL来实现信息管理系统的增删改查&#xff01; ps&#xff1a;该博客只完成了信息的添加和查看&#xff0c;删除和修改按照该方法下推即可&#xff01; 实现功能之前我们先在数据库里设置数据&#xff0c;例如&#xff1a; 我们创…

日常记录:天梯赛练习集L1-046 整除光棍

题目&#xff1a; 这里所谓的“光棍”&#xff0c;并不是指单身汪啦~ 说的是全部由1组成的数字&#xff0c;比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如&#xff0c;111111就可以被13整除。 现在&#xff0c;你的程序要读入一个整数x&#x…

Mac环境下nvm的安装与环境配置

目录 1.nvm简介 2.nvm安装 3.配置nvm环境 1.nvm简介 nvm全称 Node Version Manager &#xff0c;意思为node版本控制&#xff1b;它是一个命令行应用&#xff0c;可以快速地更新、安装、使用、卸载本机的全局 node.js 版本。他可以在同一台电脑上进行多个node版本之间的切换…

redis基础(6.0)数据结构、事务、常用组件等

1 概述 1.1 redis介绍 Redis 是互联网技术领域使用最为广泛的存储中间件&#xff0c;它是「Remote Dictionary Service」的首字母缩写&#xff0c;也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、 简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。…

华为手表开发:WATCH 3 Pro(16)传感器订阅气压

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;16&#xff09;传感器订阅气压初环境与设备气压传感器介绍与说明鸿蒙开发文件夹&#xff1a;文件新增展示的文本标记index.hmlindex.cssindex.js初 希望能写一些简单的教程和案例分享给需要的人 鸿蒙可穿戴开发 环境与设备 …

【目标检测】YOLOv5:修改自己的网络结构

前言 YOLOv5就像一座金矿&#xff0c;里面有无数可以学习的东西。之前的博文一直将YOLOv5当作一个黑盒使用&#xff0c;只考虑模型的输入和输出&#xff0c;以此来对模型进行二次开发。 本篇博文将更近一层&#xff0c;深入到“金矿”内部&#xff0c;来尝试对模型结构进行替换…

高并发浅析

什么是高并发 高并发指通过设计保证系统能够同时并行处理很多请求&#xff0c;是分布式系统非常重要的概念 评价分布式系统性能的指标有&#xff1a; 响应时间&#xff1a;系统对请求做出响应的时间。吞吐量&#xff1a;单位时间内处理的请求数量。QPS&#xff08;和吞吐量基…

C++标准库 -- 顺序容器 (Primer C++ 第五版 · 阅读笔记)

C标准库 -- 顺序容器(Primer C 第五版 阅读笔记&#xff09;第9章 顺序容器------(持续更新)9.1、顺序容器概述9.2、容器库概览9.2.1 、迭代器9.2.2 、容器类型成员9.2.3 、begin 和 end 成员9.2.4 、容器定义和初始化9.2.5 、赋值和 swap9.2.6 、容器大小操作9.2.7 、关系运算…

电脑0x0000001A蓝屏错误怎么U盘重装系统教学

电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug&#xff0c;只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢&#xff1f;来看看以下的详细操作方法教学吧。 准备工作&…

ThinkPad-L480电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板ThinkPad-L480 处理器Intel Core i7-8550U已驱动 内存16GB DDR4 2400Mhz已驱动 硬盘Intel 760p 512GB已驱动 显卡Intel UHD 620已驱动 声卡瑞昱…

【探花交友】day06—即时通信

目录 1、即时通信 1.1、什么是即时通信&#xff1f;​编辑 1.2、功能说明 1.3、技术方案 2、环信 2.1、开发简介 2.2、环信Console 2.3、接口说明 3、抽取环信组件 3.1、编写HuanXinTemplate 3.2、编写Properties对象 3.3、配置 3.4、测试 4、用户体系集成 4.1、…

力扣刷题第一天:剑指 Offer 18. 删除链表的节点、LC206.反转链表

目录 零、前言 剑指 Offer 18. 删除链表的节点 一、题目描述 二、解题思路 三、完整代码 LC206.反转链表 一、题目描述 二、解题思路 三、完整代码 零、前言 这篇文章主要讲解两道链表相关的题目&#xff0c;分别是剑指 Offer 18和LC206。链表作为数据结构中重要的一…

Vue学习——【第五弹】

前言 上一篇文章 Vue学习——【第四弹】 中学到了数据代理&#xff0c;这篇文章接着学习 Vue中的事件处理。 事件处理 我们在学习JavaScript时就经常接触事件处理&#xff0c;比如在进行表单、按钮、列表折叠等操作时&#xff0c;我们就经常用到 click&#xff08;点击&…

Redis源码之Hash表实现

通常我们如果要设计一个 Hash 表&#xff0c;那么我们需要考虑这几个问题&#xff1a; 有没有并发操作Hash冲突如何解决以什么样的方式扩容对 Redis 来说&#xff0c;首先它是单线程的工作模式&#xff0c;所以不需要考虑并发问题。 想实现一个性能优异的 Hash 表&#xff0c…