2010-11-23 43 views
39

我想創建一個只接受數字的EditText,最多有4個數字,並且不會比填充4個數字時的縮小(不收縮時爲空,或者不得不擴展以容納4個數字,所以它是固定的。)在Android中,如何創建固定寬度的EditText?

前兩個是用android:inputType =「number」和android:maxLength =「4」完成的。

如何設置最小長度?

+0

除了(排除)或接受(包括)? – 2014-05-16 18:05:10

回答

34

的hackish,但你可以把你的EditTextFrameLayout一起與另一TextViewtext="0000"visibility=invisible.

FrameLayout應該有width=wrap_content和你EditText將有width=match_parent
這應該使它總是正確的寬度。

這樣做的好處是,它是100%xml方面,不涉及任何代碼。

<FrameLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="0000" 
    android:visibility="invisible" /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:maxLength="4" /> 
</FrameLayout> 
+0

這實際上比kcoppock的答案效果更好,因爲它會產生精確右側的文本視圖。但是,絕對是黑客。 – ab11 2010-11-23 16:29:35

+0

我試着去做那些讓人說的話,但是我無論如何都不知道爲什麼。我結束了使用提示。 – Quv 2012-06-30 13:27:34

0

不知道內置解決方案,但您可以嘗試鈍化檢查長度並提交提交時出現錯誤消息的對話框。

0

問題是,EditText小部件可能由於許多不同的操作(如觸摸另一個敏感視圖,菜單按鈕或(硬鍵盤光標控制)等)而失去焦點。最大長度或輸入類型的恢復可以在搭售過程中完成(如果通過過濾器或未超過長度,請接受字符)。但每次都會丟失焦點 - 即使提交還沒有完成,輸入也很短 - >因此沒有內置的最小長度解決方案,因爲應用程序會在此時阻止另一個事件或任務的執行。 至少您必須在進入工作流程的下一步之前驗證輸入。

93

一個一個EditText,您可以使用的很少使用(據我所知)屬性是:

android:ems="4"

這使得EditText上正好是4個EMS寬。 em寬度是選定字體中最寬(M)字符的寬度。

+3

這有效,但因爲我只允許數字輸入,所以4 em的寬度比需要的寬度要寬得多。我可以四處遊玩以獲得更好的寬度,但它仍然有點不準確。 – ab11 2010-11-23 16:45:10

+0

爲我完美工作。我只需要一個固定長度的文本字段,其中可能有1到5個數字之間的任何位置,並且無論用戶輸入了多少個數字都看起來不錯。 – ArtOfWarfare 2012-09-06 21:12:53

2

使用Android:寬度=「XXX.Xdp」

這允許設置寬度密度像素,其應該是相對於屏幕的密度。我嘗試使用基於ems的字段2個字符,但由於ems需要int,所以2太小而3太大。布萊什。

0

我使用android:layout_width =「60dip」,所以同意mike fratto。

ems解決方案似乎也很有趣。

菲爾

8

您也可以嘗試使用。 。 。

android:ems="4" 
android:maxEms="4" 
android:layout_width="wrap_content" 

。 。 。這應該確保可能由默認的Android的EditText風格

允許額外的控制上都留下填充最緊密配合和正確的,你可以使用

android:background="#ffffff" 
android:paddingLeft="0dp" 
android:paddingRight="0dp" 
1

有一個非常簡單的方法以編程方式做到這一點。

myEditText.setLayoutParams(new LinearLayout.LayoutParams(200, 50)); 

這將設置寬度爲200和高度爲50!

享受:)

0

您可以設置其他對準明智的,當你把字符超過wditText寬度比它的上升幅度或寬度的EditText。 請將上面的視圖設置爲左邊的和右邊的來管理這些事情。只有一個解決方案

18

在我的情況下,我需要的觀點是6位數的寬。 android:ems使得該字段太寬(因爲M字符比一個數字寬)。

我結束了使用指示字段的最小寬度的透明提示。下面的例子是六位數字的寬度。

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="000000" 
     android:textColorHint="#00FFFFFF" 
     android:maxLength="6" 
     android:inputType="numberPassword" /> 

此解決方案是獨立於字體,字母間距和其他可能會有所不同的東西。 textColorHint是0%不透明的白色,所以用戶永遠不會看到提示。