2013-01-11 106 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