EditText键入后的细节优化

EditText是TextView的子类,它是一个非常重要的组件,可以说它是用户和Android应用进行数据传输窗户,有了它就等于有了一扇和Android应用传输的门,通过它用户可以把数据传给Android应用,然后得到我们想要的数据。
下面我们分几种情况来优化一下EditText。

ScrollView嵌套EditText

当ScrollView嵌套EditText,并键入较大篇幅的文字。EditText展示不下,当我们上下滑动EditText想看文字的全部内容时,发现EditText的内容并没有上下滑动,而是SrollView在上下滑动。这个时候我们要对EditText做特别的处理,因为焦点在ScrollView上。处理代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
editText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 解决scrollView中嵌套EditText导致不能上下滑动的问题
v.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_UP:
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});

ListView下接EditText


当ListView下部需要有一个EditText的时候,我们键入文字,发现键盘则挡住了我们正在输入的文字,EditText并未像平时一样推动整个布局来展示他们。这个时候需要我们在AndroidManifest.xml中配上如下属性:

1
2
3
<activity
android:name=“当前activity”
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />

android:windowSoftInputMode,activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。这个属性能影响两件事情:

1.当有焦点产生时,软键盘是隐藏还是显示
2.是否减少活动主窗口大小以便腾出空间放软键盘

它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。多个值之间用|分开。在这设置的值(除”stateUnspecified”和”adjustUnspecified”以外)将覆盖在主题中设置的值。

含义
stateUnspecified 软键盘的状态 (是否它是隐藏或可见 )没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。
stateUnchanged 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。
stateHidden 当用户选择该 Activity时,软键盘被隐藏——也就是,当用户确定导航到该 Activity时,而不是返回到它由于离开另一个 Activity。
stateAlwaysHidden 软键盘总是被隐藏的,当该 Activity主窗口获取焦点时。
stateVisible 软键盘是可见的,当那个是正常合适的时 (当用户导航到 Activity主窗口时 )。
stateAlwaysVisible 当用户选择这个 Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该 Activity时,而不是返回到它由于离开另一个Activity。
adjustUnspecified 它不被指定是否该 Activity主 窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局 视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为 设置
adjustResize 该 Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间
adjustPan 该 Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

EditText输入文字不可换行

如果有些需求要求EditText输入的时候不可以换行,那么可以做如下操作:

1
2
3
4
5
6
etComment.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
return (event.getKeyCode() == KeyEvent.KEYCODE_ENTER);
}
});

这样,在EditText中输入换行就是无效的了。

如需转载,请注明出处:YauLam’s Blog,thank u~