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

相关文章

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re