2016-09-26 153 views
1

我在我的TextViews上設置了提示,它們設置了android:layout_width="wrap_content",並且如果鍵入TextView的文本不像提示的寬度那麼寬文本,那麼TextView將不會改變其寬度以包裝文本。但是,如果輸入的文本比提示文本的寬度更寬,並且由於TextView有擴大的空間,它將變長以包裝文本。如何強制TextView將寬度更改爲Android中文本的寬度

理想情況下,我希望TextView縮小到我的文本,而不管提示文本的寬度是多少(TextView的原始寬度),但我也會除了提供方法得到我的文本的寬度,所以我可以在TextView上用這個寬度調用setWidth

我已經嘗試在初始化後將TextView的最小寬度更改爲0,但這並不能解決問題。有趣的是,如果我輸入比提示文本更寬的文本(迫使它增長),如果我從文本中刪除字符,直到它恢復到提示文本強制它的寬度。我想要的是無論提示文本的寬度如何,它總是縮小到文本的寬度。

這裏是我的佈局:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center"> 
     <TextView 
      android:id="@+id/month_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:hint="mm" 
      android:textColorHint="@color/hint_color" 
      android:singleLine="true" 
      android:textSize="40sp" 
      android:maxLength="2"/> 
     <TextView 
      android:id="@+id/first_hypen_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:hint="-" 
      android:singleLine="true" 
      android:textSize="40sp"/> 
     <TextView 
      android:id="@+id/day_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:hint="dd" 
      android:textColorHint="@color/hint_color" 
      android:singleLine="true" 
      android:textSize="40sp" 
      android:maxLength="2"/> 
     <TextView 
      android:id="@+id/second_hyphen_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:hint="-" 
      android:singleLine="true" 
      android:textSize="40sp"/> 
     <TextView 
      android:id="@+id/year_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:hint="yyyy" 
      android:textColorHint="@color/hint_color" 
      android:singleLine="true" 
      android:textSize="40sp" 
      android:maxLength="4"/> 
    </LinearLayout> 
+0

在你的TextView中添加這個'android:singleLine =「true」',這有幫助嗎? – Vikrant

+0

@Vikrant也已經設置了它。 – shoe

+0

顯示你的整個xml佈局 – user1506104

回答

1

我最終做的是在TextView上設置提示"",當它有文本時,如果所有的文本都被刪除了,然後重置提示爲原始提示。這樣,一旦輸入文本,任何設置強制TextView具有最小寬度(由於最初的提示文本寬度)將在新提示設置之後重新配置,並且新的最小寬度設置爲0由於新的提示文字寬度("");如果所有文本都被刪除了,提示仍然會按預期顯示。

1

使用 「EMS」 與提示長度

例如在XML設計

android:ems="2" 

這裏您day_textview有提示 「DD」,它的長度爲2,則機器人:EMS = 「2」

,或者在自定義代碼

TextView tvDay = (TextView) findViewById(R.id.day_textview); 
tvDay.setEms(tvDay.getHint().length()); 

因此「 ems「原來是指最寬字符的大小,通常是」M「,得到它?因此,在一個EditText或TextView上設置minEms爲一個整數值,例如3,應該確保它至少有3個字符寬。您也可以設置maxEms。

我從你的理解是,你想要一個提示字符長度寬度的文本。當你輸入比提示長度更多的文本時,你的文本應該縮小直到輸入的文本長度。一旦完成並且您刪除了所有輸入的文本,那麼它應該採用相同提示的長度寬度大小。

對於上述信息給出。

測試例如

添加在你的XML佈局:

<EditText 
     android:id="@+id/edtCheck" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" 
     android:hint="abc" 
     android:maxLines="1" 
     android:text="I am an Android Developer" /> 

添加到您的活動:

EditText edt = (EditText) findViewById(R.id.edtCheck); 
     edt.setEms(3);//3 just for test 
     edt.setMaxEms(1000);//1000 just for test 

現在運行,並檢查它的工作原理爲準確你在找什麼。

+0

這個問題並不要求如何設置最小或最大寬度 – shoe

+0

提示並不是真正的內容,因爲提示不應該改變,爲什麼不設置最小寬度等於提示?如果你的內容比較大,TextView將遵循文本大小,如果不是,它將遵循提示的最小寬度。 –

+0

檢查更新後的答案,如果它不起作用,那就明確你的要求。 –