詳解Android 硬布局item的高級(jí)寫法
本文主要介紹了Android 硬布局item的高級(jí)寫法,分享給大家,具體如下:
效果:
這種布局應(yīng)該是非常常見了,且寫的比較多。
今天簡單探討一下效果圖中上下兩種布局的寫法。
比較
上下效果一致 | 行數(shù) | 層級(jí) |
---|---|---|
上部分 | 121 | 3 |
下部分 | 55 | 2 |
下部分繼續(xù)精簡 | 28 | 2 |
可以看出,對(duì)比還是很明顯的,精簡到最后只有最開始的四分之一。
上部分
先看常規(guī)item寫法,橫向的LinearLayout嵌套三個(gè)子View,分別是
- 左邊的ImageView,
- 中間的TextView,
- 和右邊的ImageView。
然后每個(gè)橫向的LinearLayout之間添加一個(gè)高度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="刪除個(gè)人信息" 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> <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" /> </LinearLayout> <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="關(guān)于" 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> </LinearLayout>
可以看到嵌套雖然不深,但是已經(jīng)拉的很長,不易閱讀修改。
且 哪怕是一層的嵌套優(yōu)化,也是優(yōu)化,積少成多。
下部分
利用TextView的drawableStart和drawableEnd屬性,來做簡化,可以直接去掉左右兩邊的ImageView。
至于分割線,利用LinearLayout的divider和showDividers屬性,寫個(gè)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="刪除個(gè)人信息" 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="關(guān)于" 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"> <item android:left="@dimen/dp_50" > <shape android:shape="rectangle"> <solid android:color="@color/color_F6F6F6" /> <size android:height="1dp" /> </shape> </item> </layer-list>
可以看到,層級(jí)減少了,行數(shù)也減少了,看起來清爽多了。
style簡化
盡管如此,我們還是有可以簡化的空間。
TextView有一些共同屬性,可以抽取做一個(gè)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>
再看簡化后的代碼
<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" style="@style/MyTextView" android:text="刪除個(gè)人信息" app:drawableStartCompat="@mipmap/ic_agreement" /> <TextView android:id="@+id/tv_logout_user" style="@style/MyTextView" android:text="注銷賬戶" app:drawableStartCompat="@mipmap/ic_agreement" /> <TextView android:id="@+id/tv_about" style="@style/MyTextView" android:text="關(guān)于" app:drawableStartCompat="@mipmap/ic_agreement" /> </LinearLayout>
更加精簡了,只有簡化前的一半,共同屬性封裝,只需要關(guān)注業(yè)務(wù)參數(shù)。
核心屬性
LinearLayout
- divider,分割線
- showDividers,分割線的顯示方式
- layout_marginVertical,代替原來的layout_marginTop、layout_marginBottom
- layout_marginHorizontal,代替原來的layout_marginStart、layout_marginEnd
題外話,LinearLayout的android:animateLayoutChanges="true",可以在其子view添加移除的時(shí)候添加簡單的動(dòng)畫。
TextView
- drawableEndCompat,即原來的drawableEnd,設(shè)置右邊的drawable,其他方向同理
- drawablePadding,drawable與文字之前的內(nèi)邊距
- includeFontPadding,TextView默認(rèn)top是有6dp的padding的,false可去掉,小細(xì)節(jié)
- foreground,添加這個(gè)屬性會(huì)有水波紋的點(diǎn)擊效果,省了寫selector
到此這篇關(guān)于詳解Android 硬布局item的高級(jí)寫法的文章就介紹到這了,更多相關(guān)Android 硬布局item內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- android為ListView每個(gè)Item上面的按鈕添加事件
- Android RecyclerView實(shí)現(xiàn)多種item布局的方法
- Android中RecyclerView的item寬高問題詳解
- Android item長按刪除功能
- Android中RecyclerView點(diǎn)擊Item設(shè)置事件
- Android使用ListView批量刪除item的方法
- Android實(shí)現(xiàn)取消GridView中Item選中時(shí)默認(rèn)的背景色
- Android使用RecycleView實(shí)現(xiàn)拖拽交換item位置
- Android開發(fā)之利用ListView動(dòng)態(tài)刷新某個(gè)Item
相關(guān)文章
Android?startActivityForResult的調(diào)用與封裝詳解
startActivityForResult?可以說是我們常用的一種操作了,目前有哪些方式實(shí)現(xiàn)?startActivityForResult?的功能呢?本文就來和大家詳細(xì)聊聊2023-03-03Android數(shù)據(jù)轉(zhuǎn)移之Launcher導(dǎo)出數(shù)據(jù)庫給另一臺(tái)機(jī)器加載
這篇文章主要介紹了Android系統(tǒng)中Launcher導(dǎo)出數(shù)據(jù)庫給另一臺(tái)機(jī)器加載的詳細(xì)流程,數(shù)據(jù)轉(zhuǎn)移是少見但早晚要用到的功能,感興趣的朋友快來提前掌握吧2021-11-11Android startActivityForResult()代替方案示例
這篇文章主要為大家介紹了Android startActivityForResult()代替方案示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Android打開淘寶客戶端(手淘)效果及實(shí)現(xiàn)代碼
這篇文章主要介紹了Android打開淘寶客戶端(手淘)效果及實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04Android中實(shí)現(xiàn)HashMap排序的方法
這篇文章主要介紹了Android中實(shí)現(xiàn)HashMap排序的方法,很經(jīng)典的一種排序算法,需要的朋友可以參考下2014-08-08Android直播系統(tǒng)平臺(tái)搭建之圖片實(shí)現(xiàn)陰影效果的方法小結(jié)
這篇文章主要介紹了Android直播系統(tǒng)平臺(tái)搭建, 圖片實(shí)現(xiàn)陰影效果的若干種方法,本文給大家?guī)砣N方法,每種方法通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08android webview中使用Java調(diào)用JavaScript方法并獲取返回值
這篇文章主要介紹了android webview中使用Java調(diào)用JavaScript方法并獲取返回值,本文直接給出代碼示例,需要的朋友可以參考下2015-03-03