Android开发之那些好用的数据结构与API(二)

简介: 在 Android开发之那些好用的数据结构与API 一文中提到了Android中一些好用的数据结构和API,这次继续补充几个我在项目中用到的好用的但是不是人人都知道的东东 ~~1、android:digits在Android开发中,经常要设置EditText为密码显示,但是通常要求密码只能是 **字母和数字 .

Android开发之那些好用的数据结构与API 一文中提到了Android中一些好用的数据结构和API,这次继续补充几个我在项目中用到的好用的但是不是人人都知道的东东 ~~

</br>

1、android:digits

在Android开发中,经常要设置EditText为密码显示,但是通常要求密码只能是 **字母和数字 . _ **的组合,此时就可以用该属性进行过滤


<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:digits="0123456789abcdefghigklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM._" />

测试效果

img_da7703f05d3665db1abfbe5bd678a886.gif
digits.gif

2、setKeyListener()

接着上面说,还有一种方法也可以限定EditText输入字符,那就是给EditText设置KeyListener

et.setKeyListener(new NumberKeyListener() {

            //限制弹出的键盘类型
            public int getInputType() {

                return InputType.TYPE_CLASS_NUMBER;

            }

            //限定输入的字符
            protected char[] getAcceptedChars() {

                char[] numbers = new char[]{'.', '1', '3', '5', '7', '9'};

                return numbers;

            }

        });

测试效果

img_e9595cc1929aedea8c1ab2416992b8c9.gif
setKeyListener.gif

3、ListView 的 setEmptyView

该方法可以为没有数据的ListView 设置一个提示View,常常用在ListView没有加载到数据或加载数据失败时提示

布局 (需要准备一个背景透明的提示图片)

<RelativeLayout 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"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#123456" />

    <ImageView
        android:id="@+id/empty"
        android:layout_width="match_parent "
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:src="@mipmap/nomorenomal" />

</RelativeLayout>

Activity

public class MainActivity extends AppCompatActivity {

    private ListView mliListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mliListView = (ListView) findViewById(R.id.list);

        mliListView.setEmptyView(findViewById(R.id.empty));
    }

}

测试效果

img_2c9b4bc9a5c88fc1d7e8a998e778d8bd.png
setEmptyView.png

注意
经过本人测试,如果ListView包含在某些下拉刷新框架中,这样做是没有效果的,应该是冲突了。

4、android:duplicateParentState="true"

该属性可以让子View跟随其Parent的状态。常见的使用场景是某个按钮特别小,为了设置点击事件,给其包裹一层Parent布局,将点击事件写到Parent上,如果希望被包裹按钮的点击效果对应的Selector继续生效的话,就可以使用它了,来个有说服力的测试案例。

准备好4个图片,做成2个 StateListDrawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 触摸模式下单击时的背景图片-->
    <item android:drawable="@drawable/backp" android:state_pressed="true" />
    <!-- 默认时的背景图片-->
    <item android:drawable="@drawable/bacn" />
</selector>


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/press" android:state_pressed="true" />
    <item android:drawable="@drawable/nomal" />
</selector>

布局

<RelativeLayout 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"
    tools:context=".MainActivity">

    <RelativeLayout
        android:id="@+id/content"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_centerInParent="true"
        android:background="@drawable/selector_back">

        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:background="@drawable/selector"
            android:duplicateParentState="true" />

    </RelativeLayout>

</RelativeLayout>

此时直接运行测试,只有按钮有点击事件,直接点击按钮

img_5caac2591d8704562ad7f71bd005a274.gif
测试1.gif

给RelativeLayout添加点击事件

RelativeLayout rl = (RelativeLayout) findViewById(R.id.content);

rl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

此时运行测试,按钮和相对布局都有点击事件,点击相对布局,发现按钮并没有变化

img_0052e36f1ab242df87f87665757f1a1d.gif
测试2.gif

给Button添加 android:duplicateParentState="true

<Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:background="@drawable/selector"
            android:duplicateParentState="true" />

再次运行测试,再次点击相对布局,发现按钮也跟着变化了

img_22cc31966081606d4bf3e537853d027d.gif
测试3.gif
目录
相关文章
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
265 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
226 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
561 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
513 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
137 0
|
3月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
207 6
|
5月前
|
存储 机器学习/深度学习 API
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
810 31
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
|
5月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
365 11
|
5月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
186 0
|
6月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
276 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡

热门文章

最新文章