轉載請註明出處:http://blog.csdn.net/u011176685/article/details/47373503
一、問題描述
a.項目中獲取矩形框中從後臺獲取數據,而現在有些地區會有7,8個字。當遇到分辨率爲480*800時,瀏覽次數就會被擠壓掉。不能適配所有的分辨率,影響用戶體驗。
b.網上查了很多資料,其中Android LinearLayout 自動換行 自定義了一個view,然後把view添加進去就行了。但是因爲我的項目用的自動換行不多,而且感覺代碼能少還是少點。如果用的比較多的朋友,可以參考下。
二、解決問題
a.矩形框xml佈局文件
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/job_details_fixgl">
<!--招聘區域-->
<TextView
android:id="@+id/job_details_aty_area_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon_classify_coord"
android:drawablePadding="3dp"
android:textColor="#999999"
tools:text="渝北區渝北渝北" />
<!--發佈時間-->
<TextView
android:layout_toRightOf="@+id/job_details_aty_area_tv"
android:id="@+id/job_details_aty_date_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon_time"
android:drawablePadding="3dp"
android:layout_marginLeft="5dp"
android:textColor="#999999"
tools:text="2015.04.12" />
<!--瀏覽次數-->
<TextView
android:id="@+id/job_details_aty_views_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:drawableLeft="@drawable/icon_eye"
android:drawablePadding="3dp"
android:textColor="#999999"
tools:text="1233次" />
</RelativeLayout>
b.Activity裏面的代碼片段
String date = "2015.4.12";
String address ="江北區"
String count= "123"+"次";
//計算3個控件各自的寬度
float addWidth= tvArea.getPaint().measureText(address)+ DensityUtil.dip2px(JobDetailsActivity.this, 15);//地理位置
float dateWidth= dateTv.getPaint().measureText(date)+ DensityUtil.dip2px(JobDetailsActivity.this,15);//日期
float countWidth=viewsTv.getPaint().measureText(count)+ DensityUtil.dip2px(JobDetailsActivity.this,10);//瀏覽次數
int detailsWidth= llDetails.getWidth();
RelativeLayout.LayoutParams lp= (RelativeLayout.LayoutParams) viewsTv.getLayoutParams();
if(addWidth+dateWidth+countWidth>=detailsWidth){
//如果3個控件的寬度之和大於父容器的寬度則動態修改第3個控件的位置,調整到第1個控件下方
lp.addRule(RelativeLayout.BELOW,R.id.job_details_aty_area_tv);
lp.setMargins(0,0,0,0);
viewsTv.setLayoutParams(lp);
}else{
//如果3個控件的寬度之和小於父容器的寬度則動態修改第3個控件的位置調整到第2個右方
lp.addRule(RelativeLayout.RIGHT_OF,R.id.job_details_aty_date_tv);
viewsTv.setLayoutParams(lp);
}
tvArea.setText(address);
dateTv.setText(date);
viewsTv.setText(count);
簡單的解釋一下15,10 不是隨便設置的。textView左邊的圖片是14*20px的所以寬是7dp(1dp約等於2px) 圖片和文字之間間距3dp 距離右邊控件的margin 5dp 7+3+5=15dp。DensityUtil是工具類。關於dip轉px這裏就不講述了。
c.如果有不清楚的可以提出來。有寫的不對的地方也請指出。相互學習。程序猿是一個不斷學習的過程。
歡迎關注個人微信公衆號,專注於Android深度文章和移動前沿技術分享