如下图个人中心UI所示:
个人中心.png
针对这样的一个界面,很多初学者都会使用控件的组合来实现,例如:最外层使用相对布局,从左到右依序是ImageView(钱包左侧图片),TextView(钱包文字本身) , ImageView(最右边的箭头) 再加上一个View,作为分割线,最后设置下相对位置属性,即可完成布局,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Cf1f5f6"
android:orientation="vertical">
<include layout="@layout/widget_title_bar" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rl_head"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginTop="@dimen/px20dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<ImageView
android:id="@+id/iv_head"
android:layout_width="@dimen/px120dp"
android:layout_height="@dimen/px120dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px30dp"
android:scaleType="fitXY"
android:src="@drawable/default_header" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px12dp"
android:layout_toRightOf="@+id/iv_head">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_333"
android:textSize="@dimen/px32dp" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_name"
android:layout_marginTop="@dimen/px30dp"
android:textColor="@color/text_666"
android:textSize="@dimen/px28dp" />
</RelativeLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
</RelativeLayout>
<!--钱包福利通知-->
<LinearLayout
android:id="@+id/ll_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/rl_head"
android:layout_marginTop="@dimen/px30dp"
android:background="@color/white"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_money"
android:layout_width="match_parent"
android:layout_height="@dimen/px100dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<ImageView
android:id="@+id/iv_money"
android:layout_width="@dimen/px60dp"
android:layout_height="@dimen/px60dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:src="@drawable/icon_qb" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:layout_toRightOf="@+id/iv_money"
android:text="钱包"
android:textColor="@color/text_333"
android:textSize="@dimen/px30dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/px1dp"
android:layout_marginLeft="@dimen/px30dp"
android:layout_marginRight="@dimen/px30dp"
android:background="@color/bg_mian" />
<RelativeLayout
android:id="@+id/rl_welfare"
android:layout_width="match_parent"
android:layout_height="@dimen/px100dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<ImageView
android:id="@+id/iv_welfare"
android:layout_width="@dimen/px60dp"
android:layout_height="@dimen/px60dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:src="@drawable/icon_fl" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:layout_toRightOf="@+id/iv_welfare"
android:text="福利"
android:textColor="@color/text_333"
android:textSize="@dimen/px30dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/px1dp"
android:layout_marginLeft="@dimen/px30dp"
android:layout_marginRight="@dimen/px30dp"
android:background="@color/bg_mian" />
<RelativeLayout
android:id="@+id/rl_notification"
android:layout_width="match_parent"
android:layout_height="@dimen/px100dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<ImageView
android:id="@+id/iv_notification"
android:layout_width="@dimen/px60dp"
android:layout_height="@dimen/px60dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:src="@drawable/icon_tz" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:layout_toRightOf="@+id/iv_notification"
android:text="通知"
android:textColor="@color/text_333"
android:textSize="@dimen/px30dp" />
<ImageView
android:id="@+id/iv_arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
<ImageView
android:id="@+id/iv_new_msg"
android:layout_width="@dimen/px10dp"
android:layout_height="@dimen/px10dp"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/iv_arrow"
android:src="@drawable/shape_red_circle" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/px1dp"
android:layout_marginLeft="@dimen/px30dp"
android:layout_marginRight="@dimen/px30dp"
android:background="@color/bg_mian"
android:visibility="visible" />
<RelativeLayout
android:id="@+id/rl_flow_transaction_order"
android:layout_width="match_parent"
android:layout_height="@dimen/px100dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true"
android:visibility="visible">
<ImageView
android:id="@+id/iv_flow"
android:layout_width="@dimen/px60dp"
android:layout_height="@dimen/px60dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:padding="@dimen/px8dp"
android:src="@drawable/perso_traffi" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:layout_toRightOf="@+id/iv_flow"
android:text="流量交易订单"
android:textColor="@color/text_333"
android:textSize="@dimen/px30dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
</RelativeLayout>
</LinearLayout>
<!--帮助中心,邀请好友,设置-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_mark"
android:layout_marginTop="@dimen/px30dp"
android:background="@color/white"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_help"
android:layout_width="match_parent"
android:layout_height="@dimen/px100dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<ImageView
android:id="@+id/iv_help"
android:layout_width="@dimen/px60dp"
android:layout_height="@dimen/px60dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:src="@drawable/icon_bzzx" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:layout_toRightOf="@+id/iv_help"
android:text="帮助中心"
android:textColor="@color/text_333"
android:textSize="@dimen/px30dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/px1dp"
android:layout_marginLeft="@dimen/px30dp"
android:layout_marginRight="@dimen/px30dp"
android:background="@color/bg_mian" />
<RelativeLayout
android:id="@+id/rl_invited_friend"
android:layout_width="match_parent"
android:layout_height="@dimen/px100dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<ImageView
android:id="@+id/iv_invited_friend"
android:layout_width="@dimen/px60dp"
android:layout_height="@dimen/px60dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:src="@drawable/icon_yqhy" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:layout_toRightOf="@+id/iv_invited_friend"
android:text="邀请好友"
android:textColor="@color/text_333"
android:textSize="@dimen/px30dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/px1dp"
android:layout_marginLeft="@dimen/px30dp"
android:layout_marginRight="@dimen/px30dp"
android:background="@color/bg_mian" />
<RelativeLayout
android:id="@+id/rl_setting"
android:layout_width="match_parent"
android:layout_height="@dimen/px100dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<ImageView
android:id="@+id/iv_setting"
android:layout_width="@dimen/px60dp"
android:layout_height="@dimen/px60dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:src="@drawable/icon_sz" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px40dp"
android:layout_toRightOf="@+id/iv_setting"
android:text="设置"
android:textColor="@color/text_333"
android:textSize="@dimen/px30dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
缺点:控件太多了,没有使用style
下面对该界面进行优化,优化过程中会使用到LinearLayout布局的android:divider和android:showDividers属性,准备写下分割线文件和style文件
1、在drawable文件下创建分割线文件inset_linearlayout_divider.xml
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/px30dp"
android:insetRight="@dimen/px30dp">
<shape android:shape="rectangle">
<solid android:color="#e5e5e5" />
<size android:height="@dimen/px1dp" />
</shape>
<!--
android:insetLeft="@dimen/px30dp" 距离左侧30dp
android:insetRight="@dimen/px30dp" 距离右侧30dp
android:color="@color/bg_mian" 分割线颜色
android:height="@dimen/px1dp" 分割线高度
-->
</inset>
2、创建TextView的style
item_textview_style
<style name="item_textview_style">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/px100dp</item>
<item name="android:layout_centerVertical">true</item>
<item name="android:clickable">true</item>
<item name="android:drawablePadding">@dimen/px40dp</item>
<item name="android:drawableRight">@drawable/icon_rightarrow</item>
<item name="android:gravity">center_vertical</item>
<item name="android:paddingLeft">@dimen/px40dp</item>
<item name="android:paddingRight">@dimen/px30dp</item>
<item name="android:textColor">@color/text_333</item>
<item name="android:textSize">@dimen/px30dp</item>
</style>
3、布局文件中使用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Cf1f5f6"
android:orientation="vertical"
android:showDividers="">
<include layout="@layout/widget_title_bar" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rl_head"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginTop="@dimen/px20dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<ImageView
android:id="@+id/iv_head"
android:layout_width="@dimen/px120dp"
android:layout_height="@dimen/px120dp"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px30dp"
android:scaleType="fitXY"
android:src="@drawable/default_header" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/px12dp"
android:layout_toRightOf="@+id/iv_head">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_333"
android:textSize="@dimen/px32dp" />
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_name"
android:layout_marginTop="@dimen/px30dp"
android:textColor="@color/text_666"
android:textSize="@dimen/px28dp" />
</RelativeLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px30dp"
android:src="@drawable/icon_rightarrow" />
</RelativeLayout>
<!--钱包福利通知-->
<LinearLayout
android:id="@+id/ll_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/rl_head"
android:layout_marginTop="@dimen/px30dp"
android:background="@color/white"
android:divider="@drawable/inset_linearlayout_divider"
android:orientation="vertical"
android:showDividers="middle">
<TextView
android:id="@+id/tv_money"
style="@style/item_textview_style"
android:drawableLeft="@drawable/icon_qb"
android:text="钱包" />
<TextView
android:id="@+id/tv_welfare"
style="@style/item_textview_style"
android:drawableLeft="@drawable/icon_fl"
android:text="福利" />
<RelativeLayout
android:id="@+id/rl_notification"
android:layout_width="match_parent"
android:layout_height="@dimen/px100dp"
android:background="@drawable/rl_bg_selector"
android:clickable="true">
<TextView
android:id="@+id/tv_notification"
style="@style/item_textview_style"
android:drawableLeft="@drawable/icon_tz"
android:text="通知" />
<ImageView
android:id="@+id/iv_new_msg"
android:layout_width="@dimen/px10dp"
android:layout_height="@dimen/px10dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/px70dp"
android:src="@drawable/shape_red_circle" />
</RelativeLayout>
<TextView
android:id="@+id/tv_flow_order"
style="@style/item_textview_style"
android:drawableLeft="@drawable/perso_traffi"
android:text="流量交易订单" />
</LinearLayout>
<!--帮助中心,邀请好友,设置-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_mark"
android:layout_marginTop="@dimen/px30dp"
android:background="@color/white"
android:divider="@drawable/inset_linearlayout_divider"
android:orientation="vertical"
android:showDividers="middle">
<TextView
android:id="@+id/tv_help"
style="@style/item_textview_style"
android:drawableLeft="@drawable/icon_bzzx"
android:text="帮助中心" />
<TextView
android:id="@+id/tv_invited_friend"
style="@style/item_textview_style"
android:drawableLeft="@drawable/icon_yqhy"
android:text="邀请好友" />
<TextView
android:id="@+id/tv_setting"
style="@style/item_textview_style"
android:drawableLeft="@drawable/icon_sz"
android:text="设置" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
最终的效果.png
和原来的对比,效果一致,但是去掉了很多控件,看起来也简洁了许多,LinearLayout分割线可用的情况特别多,例如个人中心页面,关于我们界面,设置页面等等,赶快试一试吧!
网友评论