【问题标题】:Android limit edittext lengthAndroid限制edittext长度
【发布时间】:2013-01-11 09:41:29
【问题描述】:

我在限制 android 中的 edittext 长度时遇到问题。除了删除消息外,一切正常。 我的编辑文本控件的最大长度为 16 个字符,它会限制它识别、显示和读取前 16 个字符,但是当我继续输入时,它会在背景中的某个地方记住文本,如果我想删除文本,它不会开始从第 16 个字符向后删除,但从我输入的最后一个字符开始。 请参阅下面的代码。

我什至尝试添加 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();
            }
        });
    }
}

【问题讨论】:

  • 为什么只指定 2 行 EditText 16 个字符?
  • @Raffaele 2-lines EditText 是在一段时间之前指定的,并且一直保持这种状态,但是我已将其设置为 1 行,但它仍然不起作用

标签: android input android-edittext


【解决方案1】:

我无法重现您的行为。似乎一切正常,文本正确限制为 16 个字符。

键盘保持附加文本的唯一位置是在其上方的字段中,但即使您选择了建议的单词,它也会在插入文本字段之前被截断。这就是为什么您看不到触发事件的原因,因为它是 IME 中的内部事件,而不是 EditText 中的 Android 事件。

【讨论】:

  • 尝试以下方式,输入超过16个字符的单词,然后用退格键开始删除,id不删除第16个字符,它从最后输入的字符开始删除。 (如果您或其他人理解我刚刚写的内容:))
  • 我刚刚在一些较旧的三星 Android 2.3 版本上尝试过这个,它可以正常工作。也许它的行为仅在新版本的 android 上如此,因为我正在更新到最新版本的 Nexus 7 上对其进行测试
  • @Damir 我只能看到虚拟键盘在第 16 个字符之后不断更新它的建议,所以退格键在建议上起作用,结果文本显然没有反映在 TextView 中。但发生这种情况是因为虚拟键盘有这个建议功能,它与应用端无关,都是 IME 内部的
  • 非常感谢您的解释,希望客户能接受:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2012-08-18
相关资源
最近更新 更多