標籤:android android開發 控制項 自動換行 linearlayout
轉載請註明出處: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 控制項自動換行