Android 硬布局item的高级写法

在这里插入图片描述

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

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

比较

=============================================================

| 上下效果一致 | 行数 | 层级 |

| :-: | :-: | :-: |

| 上部分 | 121 | 3 |

| 下部分 | 55 | 2 |

| 下部分继续精简 | 28 | 2 |

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

上部分

==============================================================

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

  • 左边的ImageView,

  • 中间的TextView,

  • 和右边的ImageView。

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

<LinearLayout

android: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”>

<LinearLayout

android: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”>

<ImageView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:contentDescription=“@string/app_name”

android:src=“@mipmap/ic_agreement” />

<TextView

android: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” />

<ImageView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:contentDescription=“@string/app_name”

android:src=“@mipmap/ic_arrow_right” />

<View

android:layout_width=“match_parent”

android:layout_height=“1dp”

android:layout_marginStart=“@dimen/dp_50”

android:background=“@color/color_F6F6F6” />

<LinearLayout

android: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”>

<ImageView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:contentDescription=“@string/app_name”

android:src=“@mipmap/ic_agreement” />

<TextView

android: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” />

<ImageView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:contentDescription=“@string/app_name”

android:src=“@mipmap/ic_arrow_right” />

<View

android:layout_width=“match_parent”

android:layout_height=“1dp”

android:layout_marginStart=“@dimen/dp_50”

android:background=“@color/color_F6F6F6” />

<LinearLayout

android: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”>

<ImageView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:contentDescription=“@string/app_name”

android:src=“@mipmap/ic_agreement” />

<TextView

android: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” />

<ImageView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:contentDescription=“@string/app_name”

android:src=“@mipmap/ic_arrow_right” />

最外层LinearLayout的background:

<?xml version="1.0" encoding="utf-8"?>

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

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

下部分

==============================================================

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

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

<LinearLayout

android: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”>

<TextView

android: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” />

<TextView

android: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” />

<TextView

android: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”

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

同时我经过多年的收藏目前也算收集到了一套完整的学习资料以及高清详细的Android架构进阶学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。

下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。

不论遇到什么困难,都不应该成为我们放弃的理由!

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

同时我经过多年的收藏目前也算收集到了一套完整的学习资料以及高清详细的Android架构进阶学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。

下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。

[外链图片转存中…(img-OYciSb06-1713152135150)]

不论遇到什么困难,都不应该成为我们放弃的理由!

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flexbox 是 CSS3 中的一种新的布局模式,它可以使容器中的子元素能够自动地排列,并且能够根据容器的大小调整元素的尺寸和位置。Flexbox 布局非常灵活,可以应用于很多场景,比如网站导航菜单、相册、表单等。 Flexbox 布局有以下几种写法: 1. 容器属性法:通过设置容器的 display 属性为 flex 或 inline-flex 来启用 Flexbox 布局。 ```css .container { display: flex; } ``` 2. 项目属性法:通过设置子元素的 flex 属性来控制其在容器中的排列方式。 ```css .item { flex: 1; /* 项目占据剩余空间的比例 */ } ``` 3. 弹性盒子法:通过将子元素的 display 属性设置为 flex 或 inline-flex 来将其转换为弹性盒子。 ```css .item { display: flex; } ``` 4. flex-direction 属性:通过设置容器的 flex-direction 属性来指定项目的排列方向。 ```css .container { flex-direction: row | row-reverse | column | column-reverse; } ``` 5. justify-content 属性:通过设置容器的 justify-content 属性来控制项目在主轴上的对齐方式。 ```css .container { justify-content: flex-start | flex-end | center | space-between | space-around; } ``` 6. align-items 属性:通过设置容器的 align-items 属性来控制项目在交叉轴上的对齐方式。 ```css .container { align-items: flex-start | flex-end | center | baseline | stretch; } ``` 7. align-self 属性:通过设置子元素的 align-self 属性来控制其在交叉轴上的对齐方式。 ```css .item { align-self: auto | flex-start | flex-end | center | baseline | stretch; } ``` 8. order 属性:通过设置子元素的 order 属性来指定其在容器中的排列顺序。 ```css .item { order: <integer>; } ``` 以上就是 Flexbox 布局的各种写法,如果您还有其他问题或需要更详细的解释,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值