Android佈局優化是一個課題,本文僅從實際中的使用介紹一些優化的技巧。平常的項目中使用的一些佈局,第一眼看上去像是多個空間搭建出來的,但其實只需要一個原生控件就可以。
-
個人中心的設置佈局
優化之前的佈局可以使用一個
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"/>
-
詳情頁裏的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())));
-
類似默寫升級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
的區別