我在布局中有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) {
}
});
修改
EDIT2:
好的,这真的很奇怪。请查看视频:
http://vid90.photobucket.com/albums/k274/alaa_137/sendmessage_zpsqzar2fda.mp4
在前2秒内,我打字,没有任何内容。
然后我长按退格键,&#34;删除&#34;所有我写的。
然后我点击上面的一条消息(这些是收到的消息)。
键盘宕机(好)。
我点击了键盘,它上升了(好)。
我再次开始打字,我看到汉字!此外,发送按钮不会变为蓝色,这意味着它无法识别EditText
中的任何文字。
[这只发生在魅族]
EDIT3:
问题出在inputType textMultiLine
。如果我改为编写android:inputType="textCapSentences"
,一切正常。但我确实想要textMultiLine
。那我该怎么办?
答案 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
,并将方向设为水平,并将Button
和EditText
分别设为layout_weight
1。
答案 2 :(得分:0)
在某些设备(尤其是三星)上,我遇到了类似的问题。原来我已经在EditText上设置了这种样式(由于某种原因,我不记得了):
<EditText
android:id="@+id/idNumberText"
style="@android:style/Widget.DeviceDefault.EditText"
android:layout_width="0dp"
...
/>
删除样式解决了问题-现在,我可以在视图上看到输入文本