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的區別

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