[背景]
在许多App开发过程中,有必要在Activity中监视Android设备的软键盘弹出和关闭,但是Android似乎没有提供供我们调用的相关监视API。本文提供了一种监视软键盘弹跳和关闭的可行方法。
[基础知识]
您可以在清单文件中设置Activity的android:windowSoftInputMode属性。此属性值的常用设置如下:
android:windowSoftInputMode =“ stateAlwaysHidden | adjustPan”
然后,该值的含义如下:

[1] stateUnspecified:未指定软键盘的状态,系统将选择适当的状态或主题相关的设置
[2] stateUnchanged:出现此活动时,软键盘将始终保持上一个活动的状态,无论该活动是隐藏还是显示
[3] stateHidden:当用户选择活动时,软键盘始终处于隐藏状态
[4] stateAlwaysHidden:当活动的主窗口获得焦点时,软键盘始终处于隐藏状态
[5] stateVisible:通常可见软键盘

[6] stateAlwaysVisible:当用户选择活动时,始终显示软键盘
[7] AdjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
[8] AdjustResize:该活动始终会调整屏幕尺寸以为软键盘留出空间
[9] AdjustPan:当前窗口的内容将自动移动,以使当前焦点不会被键盘覆盖,并且用户始终可以看到输入内容
[示例]

(1)首先,我们需要将清单文件中监视器的活动设置为以下形式:
<activity
android:name="com.bear.softkeyboardlistener.MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" >
完成此设置后,当弹出软键盘时,“活动”的布局大小将被压缩,但是您仍然可以通过滑动浏览所有内容。
(2)我们需要为Activity的最外层布局设置一个OnLayoutChangeListener侦听器:
import com.bear.bearbroadcastreceiver.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnLayoutChangeListener;
import android.widget.Toast;
public class MainActivity extends Activity implements OnLayoutChangeListener{
//Activity最外层的Layout视图
private View activityRootView;
//屏幕高度
private int screenHeight = 0;
//软件盘弹起后所占高度阀值
private int keyHeight = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activityRootView = findViewById(R.id.root_layout);
//获取屏幕高度
screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();
//阀值设置为屏幕高度的1/3
keyHeight = screenHeight/3;
}
@Override
protected void onResume() {
super.onResume();
//添加layout大小发生改变器
activityRootView.addOnLayoutChangeListener(this);
}
@Override
public void onLayoutChange(View v, int left, int top, int right,
int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
//old是改变前的左上右下坐标点值,没有old的是改变后的左上右下坐标点值
// System.out.println(oldLeft + " " + oldTop +" " + oldRight + " " + oldBottom);
// System.out.println(left + " " + top +" " + right + " " + bottom);
//现在认为只要控件将Activity向上推的高度超过了1/3屏幕高,就认为软键盘弹起
if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > keyHeight)){
Toast.makeText(MainActivity.this, "到软键盘弹起...", Toast.LENGTH_SHORT).show();
}else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > keyHeight)){
Toast.makeText(MainActivity.this, "到软件盘关闭...", Toast.LENGTH_SHORT).show();
}
}以下是整个演示源代码的下载链接:
Android SoftKeyboard器演示
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-374192-1.html
那么
原料环节不能有蛆吗
老美还有上万大军占领着伊拉克