Android 易忽略小知识

news2024/11/26 0:25:54

1.设置hint的字体大小 

在Android xml文件中并没有直接设置hint字体大小的属性。如果hint文字的大小不希望跟正常字体的大小一样,就只能通过代码的方式来进行处理。

提供两种方式:

//设置"用户名"提示文字的大小

EditText etUserName = (EditText)findViewById(R.id.et_usernanme);

SpannableString s = new SpannableString("请输入用户名");

AbsoluteSizeSpan textSize = new AbsoluteSizeSpan(14,true);

s.setSpan(textSize,0,s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

etUserName.setHint(s);

 

//设置"密码"提示文字的大小

EditText etPassword = (EditText)findViewById(R.id.et_password);

//用html的方式来设置这个属性,毕竟都是String

etPassword.setHint(Html.fromHtml("<font color=\"#cbccd1\"><small>请输入密码</small></font>"));

//etPassword.setHint(Html.fromHtml("<font color=\"#cbccd1\"><small><small>请输入密码</small></small></font>"));

 

2.定时器

①延迟处理

TimerTask task = new TimerTask() {

    @Override

    public void run() {

        //要执行的操作

    }

};

Timer timer = new Timer();

timer.schedule(task, 2000);//2秒后执行TimeTask的run方法

②指定日期运行一次

String sdate = "2018-02-14";

SimpleDateFormat sf = new SimpleDateFormat("yy-MM-dd");

Date date = sf.parse(sdate);

Timer timer = new Timer();

timer.schedule(new TimerTask() {

    @Override

    public void run() {

        System.out.println("系统正在运行……");

    }

}, date); //在指定的日期运行一次定时任务

注:如果date日期在今天之前,则启动定时器后,立即运行一次定时任务run方法;如果date日期在今天之后,则启动定时器后,会在指定的将来日期运行一次任务run方法

③在距当前时刻的一段指定距离后,每隔指定时间运行一次定时器任务

Timer timer = new Timer();

timer.schedule(new TimerTask() {

    @Override

    public void run() {

        System.out.println("系统正在运行……");

    }

}, 5000, 2000);

当启动定时器后,5s之后开始每隔2s执行一次定时器任务。

停止的方法:

timer.cancel();

 

3.ScrollView fillViewport属性

为了屏幕适配,包含多元素的布局一般都会使用ScrollView,以便小屏手机滑动查看,但是在大屏手机上内容全部加载,导致下方空白。

android:fillViewport="true" 是一个布局属性,它用于在ScrollView中填充视图的高度,以便在内容不足以填满屏幕时也能填充整个屏幕。这个属性只适用于ScrollView或其子类。当ScrollView中的内容小于屏幕高度时,如果不设置该属性,ScrollView不会填充整个屏幕,而是只显示其内容所占的部分。而当设置了该属性后,ScrollView会将其内容拉伸至填满整个屏幕,使得用户在浏览内容时不会出现界面空白的情况。

需要注意的是,android:fillViewport="true"只会在ScrollView的内容不足以填满整个屏幕时起作用,如果内容已经填满了整个屏幕,则该属性不会有任何作用。

比如下图,我们希望最后的Button是置底的,同时是可以跟随滑动的。

7809052ab9084a8a82118b4caec5a0df.png

由于子布局高度小于ScrollView的高度,定义子布局match_parent或者fill_parent不起作用,因此设置layout_gravity也不起作用。此时只需要在scrollview里添加属性android:fillViewport=”true” 就可以了,使得子布局高度和scrollview一样,而当子布局高度超过scrollview的高度时,这个属性就没有意义了。

 

4.按钮模拟点击performClick()无效

原因:开发过程中遇到button.performClick()无效,原因是View.performClick()需要在UI线程中调用才会有效执行。

响应系统调用的方法(比如报告用户动作的onKeyDown()或一个生命周期回调方法)永远在界面线程中进程,所以onCreate里面调用button的performClick没问题, 而通过code直接调用相当于是代码执行,并不会触发android的UI线程。

两个解决方法:

①View.post(Runnable)方法

View.postDelayed(new Runnable(){

    @Override

    public void run() {

        button.performClick();

    }

}, 1000);

在post(Runnable action)方法里,View获得当前线程(即UI线程)的Handler,然后将action对象post到Handler里。在Handler里,它将传递过来的action对象包装成一个Message(Message的callback为action),然后将其投入UI线程的消息循环中。在Handler再次处理该Message时,有一条分支(未解释的那条)就是为它所设,直接调用runnable的run方法。而此时,已经路由到UI线程里,因此,我们可以毫无顾虑的来更新UI。

②Activity.runOnUiThread(Runnable)方法

Activity.runOnUiThread(new Runnable() {

    @Override

    public void run() {

        button.performClick();

    }

});

把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 这样Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行;如果当前线程不是UI线程,操作是发布到事件队列的UI线程。

 

5.adb命令启动Activity 

①不带参数启动Activity

adb shell am start -n com.app.test/.MainActivity

②带参数的启动Activity

adb shell am start -n com.app.test/.MainActivity --ei start_index 1  --es str "hello"

表示启动Activity并传递两个参数:

第一个参数是start_index,整型,值为1;第二个参数是str,字符串,值为"hello"

等同于Java代码:

  Intent intent= new Intent();

  intent.setComponent(new ComponentName("com.app.test", "com.app.test.MainActivity"));

  intent.putExtra("start_index", 1); 

③指定Action

adb shell am start -a android.intent.action.MAIN -n com.app.test/.MainActivity --ei start_index 1

4.指定category

adb shell am start -c android.intent.category.LAUNCHER -n com.app.test/.MainActivity --ei start_index 1

5.同时指定action和category都可以

adb shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -n com.app.test/.MainActivity --ei start_index 1

对应命令的介绍:

-a action;activity对应的action;

--es key stringValue; 传递 String 参数;

--ez key booleanValue; 传递 Boolean 参数;

--ei key intValue; 传递 int 参数;

--el key longValue; 传递 long 参数;

--ef key floatValue; 传递 float 参数;

 

 

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

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

相关文章

教育硬件“老玩家”进入智能手机新赛道,小度胜算几何?

从5月8日有传言称“百度旗下小度将进军智能手机市场”&#xff0c;到5月17日小度官宣将推出旗下新物种产品——小度青禾学习手机&#xff0c;小度在短短10天时间成为市场关注的焦点。 而5月22日&#xff0c;其也拿出了真正的成果&#xff0c;这部专门为青少年打造的学习手机正…

MySQL——在Linux环境下安装(在线安装)

MySQL的安装&#xff08;在线安装&#xff09; mysql的安装并不是比赛的内容&#xff0c;所以我们用比较方便的在线安装的方法&#xff0c;比起安装&#xff0c;我们更要知道如何去使用&#xff1a; 首先看一下自己有没有安装MySQL的服务&#xff0c;或者自己的服务器上有没有…

application.yml中的配置怎么写

1.问题 application.yml中可以做很多组件的配置,比如redis,mongo, 但是这些的key是什么,value怎么写呢? 2.分析问题 为了搞清楚这个问题,我们需要先了解application.yml中的配置是怎么加载的,以MongoProperties配置加载为例, 在Spring Boot中,可以使用application.y…

【OJ比赛日历】快周末了,不来一场比赛吗? #06.03-06.09 #18场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-06-03&#xff08;周六&#xff09; #7场比赛2023-06-04…

【数据结构】---二叉树类型部分练习解析让你更深程度了解二叉树

文章目录 前言&#x1f31f;一、第一种&#xff1a;二叉树性质类型&#xff1a;&#x1f30f;1.1 第一题&#xff1a;&#x1f4ab;1.1.1 理论&#xff1a;&#x1f4ab;1.1.2 图解&#xff1a;&#x1f4ab;1.1.3 解析&#xff1a; &#x1f30f;1.2 第二题&#xff1a;&#…

小明给大家分享几个CSDN涨粉小技巧,期待大家多多涨粉

今天和大家一起来聊聊CSDN涨粉相关几个的技巧&#xff0c;希望对热爱技术分享&#xff0c;并且想快速涨粉提升自身曝光度的朋友们提供一些经验&#xff0c;本文都是自己的一些想法&#xff0c;有说的不对的地方希望大家指正&#xff01; 一、个人介绍 我叫小明&#xff0c;我的…

京东国际销售数据查询(京东国际行业/品牌数据分析)

根据京东平台官方数据显示&#xff0c;今年京东国际的贡献力度也高于以往。 京东618开门红5分钟&#xff0c;京东国际成交额已突破去年开门红前两小时的成交额&#xff0c;跨境酒水、跨境手机通讯、跨境箱包皮具等3个品类成交额同比增长超100%。&#xff0c;开门5分钟&#xff…

Unreal5 第三人称射击游戏 角色基础制作2

接上一篇 Unreal5 第三人称射击游戏 角色基础制作1 角色蹲伏效果 上面是需要的操作映射&#xff0c;蹲伏实现&#xff0c;首先要开启相应功能&#xff0c;你需要在角色移动组件上面开启可蹲伏 蹲伏还有一些其它设置&#xff0c;比如蹲下角色高度&#xff0c;蹲下以后行走的…

MySQL基础2

一.常见数据类型 数值类型&#xff1a; TINYINT&#xff1a;占用1字节&#xff0c;默认为有符号 BIT(M)&#xff1a;位类型&#xff1a;M指定位数&#xff0c;默认值为1&#xff0c;范围为1-64&#xff0c;bit类型在显示时&#xff0c;按照ASCII码对应的值进行显示。 FLOAT[(M,…

华为OD机试(41-60)老题库解析Java源码系列连载ing

华为OD机试算法题新老题库练习及源码 41.寻找相同子串42.找出经过特定点的路径长度43.全量和已占用字符集44.密钥格式化45.数字字符串组合倒序 郑重声明&#xff1a; 1.博客中涉及题目为网上搜索而来&#xff0c;若侵权&#xff0c;请联系作者删除。 源码内容为个人原创&#…

git --- git merge用法

1 git merge介绍 在Git中,合并是一个连接分叉历史的过程。它将两个或多个开发历史连接在一起。git merge命令可以帮助你把git分支创建的数据整合到一个分支中。git merge会将一系列的提交关联到一个统一的历史。 在上图中,有两个分支 master 和 feature。我们可以看到,我们…

《priority_queue》

本文主要介绍优先级队列的使用&#xff0c;以及一个TOPK问题的OJ 文章目录 一、priority_queue的介绍二、priority_queue的使用三、[数组中第k个大的元素](https://leetcode.cn/problems/kth-largest-element-in-an-array/) 一、priority_queue的介绍 优先队列是一种容器适配器…

代码创造童话--Python为六一儿童节送专属礼物

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 六一儿童节到啦&#xff0c;祝所有的朋友们六一儿童节快乐&#xff01; 在这个节日里&#xff0c;孩子们可以接受父母、老师、社会各界人士的关爱和祝福&#xff0c;同时也可以享受到各种各样的礼物和活动。Python作为一门…

第十五篇、基于Arduino uno,获取mpu6050三轴加速度、角速度、温度的数据——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;第一个值是温度值&#xff0c;第二个值是X轴的加速度&#xff0c;第三个值是Y轴的加速度&#xff0c;第四个值是Z轴的加速度&#xff0c;第五个值是X轴的角速度&#xff0c;第六个值是Y轴的角速度&#xff…

C++库函数——string类

1. 简介 ①什么是string类 源文档 译&#xff1a; 1. 字符串是表示字符序列的类 2. 标准的字符串类提供了对此类对象的支持&#xff0c;其接口类似于标准字符容器的接口&#xff0c;但添加了专门用于操作单字节字符字符串的设计特性。 3. string 类是使用 char( 即作为它…

【六一】90后的你们还记得年少时的梦吗?还记得你们当初追的奥特曼吗?现在就让我们一起回味我们逝去的曾经吧!

迎面走来的是我们从未正式出过剧集&#xff0c;并附有“反派”盛名的大哥&#xff01;佐~~菲~~&#xff01; 还记得第一个登场&#xff0c;第一个进入我们的视野的那位吗&#xff1f;没错&#xff0c;那就是奥特曼 我的最爱~~~~~赛文&#xff01; 一度以为&#xff0c;曾经的那…

Bellhop 绘制传播损失

文章目录 前言一、相干传播损失&#xff08;TL&#xff09;基本算例1、环境文件2、绘制相干传播损失 二、相干、半相干和非相干传播损失&#xff08;TL&#xff09; 前言 上文我们讲述了 Bellhop 的使用以及使用 bellhop 绘制了声速剖面、声线轨迹及本证声线&#xff0c;本文我…

【SpringMVC】入门案例

前言: SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装。 对于SpringMVC我们主要学习如下内容: SpringMVC简介请求与响应REST风格SSM整合(注解版)拦截器 SpringMVC是处于Web层的框架&#xff0c;所以其主要的作用…

用户验证FTP实验

用户FTP实验 目录 匿名用户验证&#xff1a; 本地用户验证&#xff1a; 本地用户访问控制&#xff1a; 匿名用户验证&#xff1a; 例&#xff1a;&#xff08;前提配置&#xff0c;防火墙关闭&#xff0c;yum安装&#xff0c;同模式vmware11&#xff09; 现有一台计算机huy…

数据结构算法-图技术点(图的算法实现)

先看 定义邻接表 //边 struct Edge {int AdjVertex;//邻接顶点int Weight;//权值Edge* next;//下一条边 };using VertexValue use define//顶点 struct Vertex {VertexValue value; // 顶点数据Edge* First;//获取第一条边 }; //邻接顶点 using AdjVertex Vertex*; //邻接…