关于 AutoCompleteTextView 不输入文字就显示下拉
由于项目要做一个带有下拉提示的输入框,第一时间就想到了AutoCompleteTextView。但是需求和控件还是有一点出入,公司的需求为:点击输入框即可显示提示数据的数据。
我们知道 AutoCompleteTextView 有一个属性是 android:completionThreshold
,在代码中设置为 setThreshold(int))
,但是默认情况下为输入框输入 2 个字符的时候才会开始提示,最低可以把这两个属性调整为 1,即输入一个字就进行提示。
在查找大量的资料之后我采用了如下的方式进行操作:
public class MainActivity extends AppCompatActivity implements View.OnFocusChangeListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); AutoCompleteTextView tvDemo = findViewById (R.id.tv_demo); //设置弹出列表高度总高度 // tvDemo.setDropDownHeight (100); //设置弹出列表与输入框直接距离 tvDemo.setDropDownVerticalOffset (0); //设置下拉框颜色 tvDemo.setDropDownBackgroundResource (R.color.colorAccent); //设置弹出条目的每个条目高度 // tvDemo.setDropDownHeight (100); List<String> list = new ArrayList<> (); list.add ("aaa"); list.add ("bbb"); list.add ("ccc"); list.add ("ddd"); ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_expandable_list_item_1, list); tvDemo.setAdapter (adapter); tvDemo.setOnFocusChangeListener (this); } @Override public void onFocusChange(View v, boolean hasFocus) { AutoCompleteTextView view = (AutoCompleteTextView) v; if (hasFocus) { view.showDropDown (); } } }
但是细心的人会发现,进入界面就会弹出软键盘,看上去是不是感觉很不好,解决这个问题仅需要在 AutoCompleteTextView 的父布局内添加两个代码,即可解决问题
android:focusable="true" android:focusableInTouchMode="true"
完整的xml代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" android:focusable="true" android:focusableInTouchMode="true" tools:context=".MainActivity"> <AutoCompleteTextView android:id="@+id/tv_demo" android:layout_width="match_parent" android:layout_height="wrap_content" android:completionThreshold="1" android:hint="请输入内容" android:paddingEnd="10dp" android:paddingStart="10dp" /> </RelativeLayout>
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android插件化开发之动态加载技术学习
Android插件化开发之动态加载技术学习 为什么要插件化开发和动态加载呢?我认为原因有三点: 可以实现解耦 可以解除单个dex函数不能超过65535的限制 可以给apk瘦身,比如说360安全卫士,整个安装包才13.7M,对于一个用户量上亿的app这个大小已经很小了,它里面很多功能都是以插件的形式存在的 主要解决三个问题 如何加载插件apk的资源文件? 如何调用插件apk的方法? 如何加载插件中的activity,并且有生命周期? 第一个问题:如何加载插件apk的资源文件? 对于第一个问题我们假设有这么一个需求:我们有个app想做类似qq换肤的功能,但是这个皮肤文件很大,如果跟宿主app一起打包的话可能会导致apk包很大,希望通过插件的方式,在用户需要换肤的时候去下载各种皮肤插件,来完成换肤的需求。 首先要了解一个类: DexClassLoader DexClassLoader是一个类加载器,可以用来从.jar和.apk文件中加载class。可以用来加载执行没用和应用程序一起安装的那部分代码。 构造函数: DexClassLoader( String dexPath, //被解压的ap...
- 下一篇
ZipperDown漏洞简单分析及防护
0x00 序 盘古实验室在针对不同客户的iOS应用安全审计过程中,发现了一类通用的安全漏洞。该漏洞被发布在了[1]。经过盘古的分析,确认微博、陌陌、网易云音乐、QQ音乐、快手等流行应用受影响,另外还有大约10%的iOS应用应用可能受此漏洞的影响。 根据漏洞名称大概可以猜测出与zip文件有关,查询iOS上与解压相关资料可以看到,iOS并没有提供官方的unzip API函数,基本上现有的iOS app都是使用的SSZipArchive或ziparchive这两个第三方库来实现解压的功能。随后根据盘古在SSZipArchive项目的issue中提交的漏洞报告[2]可以大概确定漏洞原理是:使用第三方zip库在解压zip文件过程中没有考虑文件名中带有”../../”这样的情况,从而产生了目录穿越漏洞。因此,如果一个iOS应用下载了恶意的zip文件,并且使用ziparchive库解压,利用漏洞可以做到app container目录下的任意文件覆盖,如果覆盖了应用重要的文件会造成应用崩溃(DOS),如果覆盖了app的hotpatch文件则会造成代码执行。 0x01 构造恶意的ZIP文件(POC) (...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7安装Docker,走上虚拟化容器引擎之路