关于安卓的软键盘
这是一份普通的清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication11">
<!--!!!!!!!!由上至下的执行顺序,同样的作用属性,谁在前谁就先执行-->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--双标签 以名字区分 四大组件中的 Activity 在这里注册之后才可以使用 否则Intent跳转不了 -->
<!--ndroid:launchMode 常见的 管理启动模式 -->
<!--android:windowSoftInputMode 这个就是 对我们软键盘的设置了 其实是对启动模式的设置-->
<activity android:name=".MainActivity"
android:launchMode="standard"
android:windowSoftInputMode="stateUnspecified"
>
<!--这个 intent-filter action 意味着谁才是你的"首页" 这个标签如果同时存在在另一个activity中的话 走执行顺序谁在前 谁就执行-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Main2Activity" />
<activity android:name=".Main3Activity">
</activity>
</application>
</manifest>
我们的软键盘 实际上是一个 Dialog 那么 在获取输入焦点的时候 会对应的弹出来 以下是这个标签的属性值. 这个属性是flag
<android:launchMode = "stateUnspecified" > 软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
<android:windowSoftInputMode= "stateUnchanged" > 当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
<android:windowSoftInputMode= "stateHidden" > 用户选择activity时,软键盘总是被隐藏
<android:windowSoftInputMode ="stateAlwaysHidden" >当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
<android:windowSoftInputMode= "stateVisible" >软键盘通常是可见的
<android:launchMode = "stateAlwaysVisible" >用户选择activity时,软键盘总是显示的状态
<android:windowSoftInputMode= "adjustUnspecified" >默认设置,通常由系统自行决定是隐藏还是显示
<android:windowSoftInputMode = "adjustResize" >该Activity总是调整屏幕的大小以便留出软键盘的空间(不会推布局)
<android:windowSoftInputMode= "adjustPan" >当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分(推布局)
拓展:在使用PopupWindow的时候 EditText 会不弹键盘
//这行代码可能会带来其它的问题 但是能解决 不弹软键盘的问题
popupWindow.setFocusable(true);
拓展:软键盘的禁用
getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); //禁用软键盘
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);//解除禁用
拓展:关于软键盘的监听
//此方法 对有些 虚拟键盘不生效 尤其是模拟器上,需要物理键盘 如果需要的话可以利用down事件来做处理
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
switch (event.getKeyCode()){
case KeyEvent.KEYCODE_ENTER: //监听系统软键盘上的回车键
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isActive()){ //判断键盘有没有被隐藏
inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
editText.setText("呵呵呵");
}
return true;
case KeyEvent.KEYCODE_0: //如果你按了0
//TODO:
editText.setText("哈哈哈");
return true;
}
return super.dispatchKeyEvent(event);
}
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_NONE){
//在XML文件中 EditText声明属性 imeOpstions
//actionNone : 回车键,按下后光标到下一行
//actionGo : Go,
//actionSearch : 搜搜
//actionSend : Send
//actionNext : 下一项
//actionDone : Done,确定/完成,隐藏软键盘,即使不是最后一个文本输入框
editText.setText("看效果");
return true;
}
return false;
}
});
Tsingke 清单文件中的作用
Vander丶 关于软键盘的知识 内含有改变回车键的样式
AirrWang 关于自定义键盘
网友评论