Adroid 硬布局item的高级写法

2024-04-03 13:38
文章标签 布局 高级 写法 item adroid

本文主要是介绍Adroid 硬布局item的高级写法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果:

在这里插入图片描述

这种布局应该是非常常见了,且写的比较多。

今天简单探讨一下效果图中上下两种布局的写法。

比较

上下效果一致行数层级
上部分1213
下部分552
下部分继续精简282

可以看出,对比还是很明显的,精简到最后只有最开始的四分之一。

上部分

先看常规item写法,横向的LinearLayout嵌套三个子View,分别是

  • 左边的ImageView,
  • 中间的TextView,
  • 和右边的ImageView。

然后每个横向的LinearLayout之间添加一个高度1dp的View来作为横线。

    <LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginStart="@dimen/dp_15"android:layout_marginTop="@dimen/dp_20"android:layout_marginEnd="@dimen/dp_15"android:layout_marginBottom="@dimen/dp_20"android:background="@drawable/shape_bg_white"android:orientation="vertical"><LinearLayoutandroid:id="@+id/ll1"android:layout_width="match_parent"android:layout_height="wrap_content"android:foreground="?android:attr/selectableItemBackground"android:gravity="center_vertical"android:orientation="horizontal"android:padding="@dimen/dp_20"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/app_name"android:src="@mipmap/ic_agreement" /><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="@dimen/dp_20"android:layout_weight="1"android:includeFontPadding="false"android:text="删除个人信息"android:textColor="@color/color_505258"android:textSize="@dimen/sp_14" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/app_name"android:src="@mipmap/ic_arrow_right" /></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_marginStart="@dimen/dp_50"android:background="@color/color_F6F6F6" /><LinearLayoutandroid:id="@+id/ll2"android:layout_width="match_parent"android:layout_height="wrap_content"android:foreground="?android:attr/selectableItemBackground"android:gravity="center_vertical"android:orientation="horizontal"android:padding="@dimen/dp_20"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/app_name"android:src="@mipmap/ic_agreement" /><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="@dimen/dp_20"android:layout_weight="1"android:includeFontPadding="false"android:text="注销账户"android:textColor="@color/color_505258"android:textSize="@dimen/sp_14" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/app_name"android:src="@mipmap/ic_arrow_right" /></LinearLayout><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_marginStart="@dimen/dp_50"android:background="@color/color_F6F6F6" /><LinearLayoutandroid:id="@+id/ll3"android:layout_width="match_parent"android:layout_height="wrap_content"android:foreground="?android:attr/selectableItemBackground"android:gravity="center_vertical"android:orientation="horizontal"android:padding="@dimen/dp_20"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/app_name"android:src="@mipmap/ic_agreement" /><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="@dimen/dp_20"android:layout_weight="1"android:includeFontPadding="false"android:text="关于"android:textColor="@color/color_505258"android:textSize="@dimen/sp_14" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/app_name"android:src="@mipmap/ic_arrow_right" /></LinearLayout></LinearLayout>
复制代码

可以看到嵌套虽然不深,但是已经拉的很长,不易阅读修改。

且 哪怕是一层的嵌套优化,也是优化,积少成多。

下部分

利用TextView的drawableStart和drawableEnd属性,来做简化,可以直接去掉左右两边的ImageView。

至于分割线,利用LinearLayout的divider和showDividers属性,写个shape,来做简化,去掉item之间做横线的View。

    <LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginHorizontal="@dimen/dp_15"android:layout_marginVertical="@dimen/dp_20" android:background="@drawable/shape_bg_white"android:divider="@drawable/shape_divider_my"android:orientation="vertical"android:showDividers="middle"><TextViewandroid:id="@+id/tv_delete_user"android:layout_width="match_parent"android:layout_height="wrap_content"android:drawablePadding="@dimen/dp_16"android:foreground="?android:attr/selectableItemBackground"android:gravity="center_vertical"android:includeFontPadding="false"android:padding="@dimen/dp_20"android:text="删除个人信息"android:textColor="@color/color_505258"android:textSize="@dimen/sp_14"app:drawableEndCompat="@mipmap/ic_arrow_right"app:drawableStartCompat="@mipmap/ic_agreement" /><TextViewandroid:id="@+id/tv_logout_user"android:layout_width="match_parent"android:layout_height="wrap_content"android:drawablePadding="@dimen/dp_16"android:foreground="?android:attr/selectableItemBackground"android:gravity="center_vertical"android:includeFontPadding="false"android:padding="@dimen/dp_20"android:text="注销账户"android:textColor="@color/color_505258"android:textSize="@dimen/sp_14"app:drawableEndCompat="@mipmap/ic_arrow_right"app:drawableStartCompat="@mipmap/ic_agreement" /><TextViewandroid:id="@+id/tv_about"android:layout_width="match_parent"android:layout_height="wrap_content"android:drawablePadding="@dimen/dp_16"android:foreground="?android:attr/selectableItemBackground"android:gravity="center_vertical"android:includeFontPadding="false"android:padding="@dimen/dp_20"android:text="关于"android:textColor="@color/color_505258"android:textSize="@dimen/sp_14"app:drawableEndCompat="@mipmap/ic_arrow_right"app:drawableStartCompat="@mipmap/ic_agreement" /></LinearLayout>
复制代码

shape:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:left="@dimen/dp_50" ><shape android:shape="rectangle"><solid android:color="@color/color_F6F6F6" /><size android:height="1dp" /></shape></item>
</layer-list>
复制代码

可以看到,层级减少了,行数也减少了,看起来清爽多了。

style简化

尽管如此,我们还是有可以简化的空间。

TextView有一些共同属性,可以抽取做一个style。

    <style name="MyTextView"><item name="android:layout_width">match_parent</item><item name="android:layout_height">wrap_content</item><item name="android:drawablePadding">@dimen/dp_16</item><item name="android:foreground">?android:attr/selectableItemBackground</item><item name="android:gravity">center_vertical</item><item name="android:includeFontPadding">false</item><item name="android:padding">@dimen/dp_20</item><item name="android:textColor">@color/color_505258</item><item name="android:textSize">@dimen/sp_14</item><item name="drawableEndCompat">@mipmap/ic_arrow_right</item></style>
复制代码

再看简化后的代码

    <LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginHorizontal="@dimen/dp_15"android:layout_marginVertical="@dimen/dp_20" android:background="@drawable/shape_bg_white"android:divider="@drawable/shape_divider_my"android:orientation="vertical"android:showDividers="middle"><TextViewandroid:id="@+id/tv_delete_user"style="@style/MyTextView"android:text="删除个人信息"app:drawableStartCompat="@mipmap/ic_agreement" /><TextViewandroid:id="@+id/tv_logout_user"style="@style/MyTextView"android:text="注销账户"app:drawableStartCompat="@mipmap/ic_agreement" /><TextViewandroid:id="@+id/tv_about"style="@style/MyTextView"android:text="关于"app:drawableStartCompat="@mipmap/ic_agreement" /></LinearLayout>
复制代码

更加精简了,只有简化前的一半,共同属性封装,只需要关注业务参数。

核心属性

LinearLayout

  • divider,分割线
  • showDividers,分割线的显示方式
  • layout_marginVertical,代替原来的layout_marginTop、layout_marginBottom
  • layout_marginHorizontal,代替原来的layout_marginStart、layout_marginEnd

题外话,LinearLayout的android:animateLayoutChanges="true",可以在其子view添加移除的时候添加简单的动画。

TextView

  • drawableEndCompat,即原来的drawableEnd,设置右边的drawable,其他方向同理
  • drawablePadding,drawable与文字之前的内边距
  • includeFontPadding,TextView默认top是有6dp的padding的,false可去掉,小细节
  • foreground,添加这个属性会有水波纹的点击效果,省了写selector

 

ok,到此结束,无聊的知识又增加了。

这篇关于Adroid 硬布局item的高级写法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873061

相关文章

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.