Android 控件自動換行

轉載請註明出處: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深度文章和移動前沿技術分享



發佈了35 篇原創文章 · 獲贊 6 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章