Android 硬布局item的高级写法(1)

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

比较

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

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

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

| 上部分 | 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”

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

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

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

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

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。

dnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)

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

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-gEp6B8lb-1711914516388)]

最后

由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值