1. 程式人生 > >Android 控制元件自動換行

Android 控制元件自動換行

一、問題描述

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深度文章和移動前沿技術分享


相關推薦

Android 控制元件自動

一、問題描述 a.專案中獲取矩形框中從後臺獲取資料,而現在有些地區會有7,8個字。當遇到解析度為480*800時,瀏覽次數就會被擠壓掉。不能適配所有的解析度,影響使用者體驗。 b.網上查了很多資料,其中Android LinearLayout 自動換行 自定義了一個v

android自定義控制元件自動效果實現

     第一篇部落格裡面有介紹一篇關於自動換行實現諸多自定義控制元件跟各種效果的博文,但是礙於當初技術能力有限,寫的jar包裡的程式碼亂七八糟,在最近忙完了手頭的工作,不經意間翻看了之前的程式碼,真是慘不忍睹,隨決定重新封裝。重新編寫的android-custom-vg前

Android 自定義控制元件-自動的流線性佈局-DragFlowLayout

效果圖 步驟 1.繼承RelativeLayout 2.複寫onMeasure 3.複寫onLayout 4.提供介面回撥 5.使用ViewDragHelper實現對子控制元件拖拽 繼承RelativeLayout public

VC++之Edit控制元件自動

VC++中Edit控制元件中的文字換行標誌是:/r/n,而不是一般的/n。所以說,如果想在Edit控制元件中顯示兩行文字,可以使用如下方法:        CString str = "Name /r/n Sex";        pEdit->SetWindowText(str);這樣就可以在Edit

WinForm中Label控制元件顯示

        WinForm中,Label控制元件是最常用的了。可有時需要它的換行,只能在後臺用\r\n或Environment.NewLine。原來,換行還可以通過前臺介面屬性設定來實現。 換行主要用到AutoSize、MaximumSize和Size三個屬性。新增一個

css控制文字自動

自動換行問題,正常字元的換行是比較合理的,而連續的數字和英文字元常常將容器撐大,挺讓人頭疼,下面介紹的是CSS如何實現換行的方法對於div,p等塊級元素正常文字的換行(亞洲文字和非亞洲文字)元素擁有預設的white-space:normal,當定義的寬度之後自動換行html正

Android開發之自動LinearLayout

Android開發中,很多人會遇到滿行就自動換到下一行的介面需求,而Android自帶的LinearLayout佈局自能橫排或者豎排,不夠顯示就加ScrollView,橫豎混排就不行了。這裡給大家分享一個可以實現自動換行的LinearLayout。 import java

asp關於控制元件文字問題

在asp中div下面可以任意放個lable然後runate=server 後臺在用innerHtml = 賦值。實現換行可以加個字串“<br/>; 一般的什麼Enierenment.newLine和\r\n沒有效果。 asp頁面可用Textarea控制元件做文字

android商品屬性選擇標籤控制元件,可實現自動

一、demo功能 在電商專案中,商品屬性選擇是必不可少的,而且屬性的數目和長度不是固定的,就有了 “標籤選擇”。以下我就借用了開源的AutoFlowLayout控制元件,根據商品屬性選擇要求寫了這個demo,和大家分享 二、程式碼介紹 1.功能 AutoFlo

[Xcode10 實際操作]四、常用控制元件-(4)UILabel文字標籤的自動

本文將演示標籤控制元件的換行功能, 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override f

MFC對話方塊程式EDIT類控制元件自動,垂直滾動條自動下移

1.新建一個Edit Control,將其Multiline屬性設定為True,Auto HScroll屬性設定False,這樣就可以實現每一行填滿後自動換行了。2.再將Vetrical Scroll屬性設定為True,當輸入或顯示超過編輯框的大小後就會出現垂直滾動條

cocos2dx控制元件-----ListView的使用(label自動

float totalHeight = 0;if (m_textInfoListView){m_textInfoListView->removeAllChildrenWithCleanup(true);}m_textInfoListView = nullptr;m_t

[轉]C#控制元件——DataGridView單元格文字自動

DataGridView是.NET開發中常用的控制元件,在開發中發現大文字資料顯示時無法在介面上完全顯示,以下是我的解決方法。 (1)首先要保證單元格的為Text型別 (2)在程式中加入以下的程式碼片段 //設定資料來源      this.dataGridView1.DataSource = dt;  

radio控制元件item設定自動的方法

<radio id="radio" value=""> <item text="sksdkdksdsdssdsdsdsdsdsdsdasdadasdasdasdadsas

控制元件根據父控制元件自動---LineWrapLayout實現

一些帶搜尋功能的app,在搜尋欄下面一般會提供一些關鍵字供使用者選擇。 也可以根據使用者輸入的文字,在下一次使用的時候該文字出現在常用關鍵字裡面,只要輕輕一點就可以搜尋了,無需再次輸入。 關鍵字可以動態新增,這就要考慮換行的問題了 廢話不多說,先上效果圖: 先定義2個自

QT控制元件中佈局QLabel讓其自適應大小自動遇到的問題

使用QLabel的時候總會有一些小問題,這裡記錄一下,如果您有更好的解決辦法請告訴我一下,3Q。 給QWidget控制元件新增邊框同時不影響其子控制元件QLabel:分別設定widget控制元件和la

WPF控制元件TextBlock中文字自動

在很多的WPF專案中,往往為了追求介面的美觀,需要控制控制元件中文字的換行顯示,現對TextBlock控制元件換行的實現方式進行總結,希望大家多多拍磚!!! 1.使用轉義字元 在XAML檔案中,實現方式如下: <TextBlock x:Name="textBlock

MFC EDIT控制元件實現自動(修改屬性)

必須設定Vertical Scrollbar = TRUE 必須設定MultiLine = TRUE 必須設定Horizontal Scrollbar = FALSE 必須設定Auto HScroll = FALSE 可選設定Want Return

Android 自動的LinearLayout

omv horizon most align 子控件 多次調用 append getc ins 在我們開發過程中會經常遇見一些客戶要求但是Android系統又不提供的效果,這時我們只能自己動手去實現它,或者從網絡上借鑒他人的資源,本著用別人不如自己會做的心態,在此我總結了一

Android自動的RadioGroup

找了很多自動換行的RadioGroup,但是在新增radiobutton時,radiobutton的內容過長造成顯示不全,最終找到以下版本的RadioGroup public class FlowRadioGroup extends RadioGroup { List<Li