某些手机​​

时间:2015-11-21 17:06:34

标签: android android-edittext

我在布局中有EditText发送 Button

<RelativeLayout
    android:id="@+id/messageLinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    >

    <Button
        android:id="@+id/sendButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Send"
        android:textColor="@color/blue"
        android:background="@drawable/send_button"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_alignParentRight="true"
        android:textAllCaps="true"
        android:enabled="false"
        />

    <EditText
        android:id="@+id/messageEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxLines="4"
        android:maxLength="500"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@id/sendButton"
        android:background="@drawable/edittext"
        android:textColor="@color/black"
        android:inputType="textCapSentences|textMultiLine"
        />
</RelativeLayout>

目的是输入EditText,然后按发送发送消息。

我在4种不同的手机中试过这个:

在所有这些键盘中都显示出键入的类型。在其中3个(Smasung Galaxy S3,三星Galaxy S4和联想A820)中,我可以输入并查看输入到EditText的文本(并成功发送,但现在无关紧要)。 在第4部手机(魅族MX5)中,我无法看到我打字的内容(背景是白色的,文字是黑色的 - 所以这不是问题)。它甚至没有通过这款手机到达我的onTextChanged听众。

为什么会发生这种情况,我该如何解决?

以下是听众:

messageEditText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (!s.toString().isEmpty() && !send.isEnabled()) {
            send.setEnabled(true);
            send.setTextColor(getResources().getColor(R.color.blue));
        } else if (s.toString().isEmpty() && send.isEnabled()) {
            send.setEnabled(false);
            send.setTextColor(getResources().getColor(R.color.gray));
        }
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

修改

  • 联想A820正在使用Android 4.1.2版
  • 三星Galaxy S3正在使用Android版本4.3
  • 三星Galaxy S4正在使用Android版本4.4.2
  • 魅族MX5使用Android版5.01

EDIT2:

好的,这真的很奇怪。请查看视频:

http://vid90.photobucket.com/albums/k274/alaa_137/sendmessage_zpsqzar2fda.mp4

在前2秒内,我打字,没有任何内容。

然后我长按退格键,&#34;删除&#34;所有我写的。

然后我点击上面的一条消息(这些是收到的消息)。

键盘宕机(好)。

我点击了键盘,它上升了(好)。

我再次开始打字,我看到汉字!此外,发送按钮不会变为蓝色,这意味着它无法识别EditText中的任何文字。

[这只发生在魅族]

EDIT3:

问题出在inputType textMultiLine。如果我改为编写android:inputType="textCapSentences",一切正常。但我确实想要textMultiLine。那我该怎么办?

3 个答案:

答案 0 :(得分:1)

问题解决了。

xml 中的inputType更改为:

android:inputType="textCapSentences"

在分配EditText实例后添加到代码中:

messageEditText.setSingleLine(false);
messageEditText.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);

我不知道为什么,但它确实有效。

答案 1 :(得分:0)

您的EditText的宽度设置为match_parent,因为它位于按钮的左侧,所以它不会显示在较小的屏幕上。只需使用LinearLayout代替RelativeLayout,并将方向设为水平,并将ButtonEditText分别设为layout_weight 1。

答案 2 :(得分:0)

在某些设备(尤其是三星)上,我遇到了类似的问题。原来我已经在EditText上设置了这种样式(由于某种原因,我不记得了):

<EditText        
    android:id="@+id/idNumberText"
    style="@android:style/Widget.DeviceDefault.EditText"
    android:layout_width="0dp"
    ...
/>

删除样式解决了问题-现在,我可以在视图上看到输入文本