Android布局优化,没有理论,只有实践

Android布局优化是一个课题,本文仅从实际中的使用介绍一些优化的技巧。平常的项目中使用的一些布局,第一眼看上去像是多个空间搭建出来的,但其实只需要一个原生控件就可以。

  1. 个人中心的设置布局

    优化之前的布局可以使用一个LinearLayout或者RelativeLayout加两个个ImageView,但是其实只需要一个TextView即可,下面是使用方式

    <TextView
        android:id="@+id/tvExit"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_60"
        android:gravity="center_vertical"
        style="@style/itemMargin"
        android:textSize="@dimen/contentSize"
        android:textColor="@color/colorAccent"
        android:text="@string/exit"
        android:drawablePadding="@dimen/dp_13"
        android:drawableStart="@mipmap/sign_out_icon"
        android:drawableEnd="@mipmap/right_icon"/>
    
  2. 详情页里的item布局

    优化之前这种布局可以用一个LinearLayout加两个TextView实现

    同样,优化之后使用一个TextView

    //布局文件
    <TextView
        android:id="@+id/tvPlanLeader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="@dimen/textSmall"
        android:textColor="@color/textGray"
        android:text="@string/planLeader"/>
    //资源文件,这种适合文字颜色一样
    <string name="planLeader">负责人:%s</string>
    //java代码
    tvPlanLeader.setText(mContext.getString(R.string.planLeader,item.getLeaderName()))
            
    //还有一种情况:文字颜色不一样,布局文件同上
    //资源文件
    <string name="htmlItem"><![CDATA[
        <font color="#272829">%s</font>
    ]]><![CDATA[
       <font color="#515354">%s</font>
    ]]></string>
    //java代码--format(String, Object...) 和 getString(int, Object...) 方法会删除字符串中的所有样式信息
    tvDevelopProjectName.setText(Html.fromHtml(
            String.format(
                    getString(R.string.htmlItem),
                  getString(R.string.tvProjectName),developPlan.getProjectName())));
    
  3. 类似默写升级Dialog里的说明布局

    这种情况和案例2差不多,优化之前可以用3个TextView,优化之后只需要一个TextView,只不过这里用SpannableString更方便一些

    //布局文件
    <TextView
        android:gravity="center_horizontal"
        android:id="@+id/tvNoReportDetail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="@dimen/contentSize"
        android:textColor="@color/colorAccent"
        android:lineSpacingExtra="@dimen/dp_10"/>
    //android:lineSpacingExtra控制行间距
    //资源文件
    <string name="noReportDetail">你当天的工作内容\n未汇报\n请点击下方按钮申请重新汇报</string>
    //java代码
    SpannableString spannableString = new SpannableString(getString(R.string.noReportDetail));
    ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.textBright));//设置字体颜色
    spannableString.setSpan(foregroundColorSpan,9,12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//最后一个参数在这里没意义
    AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(20, true);//设置字体大小,不使用px,看文档是dip,不过和sp差不多
    spannableString.setSpan(absoluteSizeSpan, 9, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    tvNoReportDetail.setText(spannableString);
    

    下面是使用一个TextView和3个TextView的区别

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章