【发布时间】:2009-10-02 14:03:54
【问题描述】:
在android中,我们如何使设备键盘在应用程序中始终可见?顶部显示应用程序要呈现的内容,底部始终显示键盘。
【问题讨论】:
在android中,我们如何使设备键盘在应用程序中始终可见?顶部显示应用程序要呈现的内容,底部始终显示键盘。
【问题讨论】:
在 AndroidManifest.xml 文件中将 android:windowSoftInputMode="stateAlwaysVisible" 添加到您的活动中:
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysVisible" />
在我的测试应用程序中,这显示了应用程序启动时的键盘,虽然它没有固定在那里,但可以通过按后退按钮来关闭。
为确保键盘始终可见,您可能必须创建自己的键盘作为应用程序 UI 的一部分。这是一个向您展示如何使用 KeyboardView 执行此操作的教程:http://www.fampennings.nl/maarten/android/09keyboard/index.htm
【讨论】:
您的布局中必须有一个EditText,并且需要扩展EditText 基类。然后重写onKeyPreIme() 方法,并返回True。现在您的键盘将始终可见,并且无法通过返回键关闭。
警告:由于您的onKeyPreIme() 方法返回true,您无法使用返回键退出您的应用。
例子:
public class CustomEdit extends EditText {
public CustomEdit(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.e("Log", "onKeyPreIme");
return true;
//return super.onKeyPreIme(keyCode, event);
}
}
【讨论】:
我找到了一种方法,可以在我的 myEditText 类 EditText 字段中进行编辑后保持软键盘可见。诀窍是覆盖onEditorAction 方法,使其返回true
myEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
return true;
}
});
否则onEditorAction 仅在“完成”键单击 (IME_ACTION_DONE) 后返回 true,否则 false
myEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId==EditorInfo.IME_ACTION_DONE){
Log.i(LOG_TAG, "IME_ACTION_DONE");
return true;
}
return false;
}
});
(另见this answer onEditorAction 方法)
将android:windowSoftInputMode="stateAlwaysVisible 添加到 Manifest 文件有助于在活动开始时显示软键盘,但它并不能阻止它在编辑后单击“完成”键时再次消失。
【讨论】: