2013-01-11 104 views
2

我遇到了在android中限制edittext長度的問題。除了刪除郵件時,一切都完美。 我的編輯文本控件的最大長度爲16個字符,它將限制它識別,顯示和閱讀前16個字符,但是當我繼續輸入時,它會在後臺某處存儲文本,如果我想刪除文本,它不會啓動從第16個字符後退,但從我輸入的最後一箇中刪除。 請參閱下面的代碼。Android限制edittext長度

我甚至試圖添加TextChangedListener它不會觸發16個字符輸入,因爲沒有任何操作。

我使用的Nexus 7測試這個功能

佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:background="@drawable/background" 
    android:orientation="vertical" 
    android:padding="10dp" > 


    <TextView 
     android:id="@+id/send_new_message_lblTo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="@string/send_new_message_to" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/send_new_message_lblToValue" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="10dp" 
     android:layout_toRightOf="@+id/send_new_message_lblTo" 
     android:ems="10" 
     android:textAppearance="?android:attr/textAppearanceLarge" > 
    </TextView> 

    <EditText 
     android:id="@+id/send_new_message_txtMessage" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/send_new_message_lblToValue" 
     android:layout_marginTop="10dp" 
     android:ems="10" 
     android:hint="@string/send_new_message_hint" 
     android:inputType="textMultiLine" 
     android:lines="2" 
     android:maxLength="16" 
     android:scrollbarStyle="outsideOverlay" /> 

    <Button 
     android:id="@+id/send_new_message_btnSend" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/send_new_message_txtMessage" 
     android:layout_marginTop="10dp" 
     android:text="@string/send" /> 

</RelativeLayout> 

活動

import android.os.Bundle; 
    import android.text.Editable; 
    import android.text.TextWatcher; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class NewMessageSendActivity{ 

    private TextView to; 
    private EditText message; 
    private Button send; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.send_message); 
     getViewInstances(); 
     setControlActions(); 

    } 

    private void getViewInstances() { 
     to = (TextView) findViewById(R.id.send_new_message_lblToValue); 
     message = (EditText) findViewById(R.id.send_new_message_txtMessage); 
     send = (Button) findViewById(R.id.send_new_message_btnSend); 

     to.setText(AppSettings.getInstance().getSelectedDevice().toString()); 
    } 

    private void setControlActions() { 

     send.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       String smsMessage = message.getText().toString(); 
       Toast.makeText(this, smsMessage, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 

+0

試試這個:http://androidblogger.blogspot.in/2009/01/numeric-edittext-and-edittext-with-max.html –

+0

爲什麼你只爲16個字符指定一個2行'EditText'? – Raffaele

+0

@Raffaele 2行EditText在前一段時間被指定,並保持這種方式,但我已將它設置爲1行,但它仍然不起作用 – Damir

回答

0

我無法重現你的行爲。看起來一切正常,文本正確限制爲16個字符。

鍵盤繼續附加文本的唯一地方是在其上方的字段中,但即使您選擇了建議的單詞,也會在插入文本字段之前將其截斷。這就是爲什麼你看不到事件被解僱的原因,因爲這是IME中的內部事件,而不是EditText內部的Android事件。

+0

請按照以下方法嘗試,輸入超過16個字符的單詞,然後開始使用退格刪除,id不會刪除第16個字符,它開始從最後輸入的字符中刪除。 (如果你或其他人明白我剛剛寫的:)) – Damir

+0

我剛剛在一些較舊的三星Android 2.3版本版本上試過這個,它的工作原理如下。也許它只是在新版本的Android上表現得這麼好,因爲我在Nexus 7上測試它,已更新到最新版本 – Damir

+1

@Damir我能看到的是虛擬鍵盤不斷更新其建議,甚至超出第16個字符,所以退格工作該建議和結果文本顯然不會在'TextView'中被鏡像。但是,這是因爲虛擬鍵盤具有該建議功能,它與應用程序端無關,它是IME – Raffaele