前言:

时间过得可真快,一不转眼马上冬天就要来了。今天将主要介绍Android软键盘的显示和隐藏,有关于软键盘的显示和隐藏,相信大家在开发当中可能遇见各种坑,大家可能会觉得明明是按照官网标准写法写的,后来一测试竟然发现各种问题不能弹出软键盘,为了解决这种问题,下面我将重点跟大家讲解一下各种注意事项,相信大家看完了,有所感悟,避免各种深坑。那么,我们首先还是先来一起学习Android软键盘的显示和隐藏。


InputMethodManager类

Andorid中有关软键盘的显示和隐藏主要是通过iputMethodManager类来完成的。既然我们想要用来这个类,首先我们必须获取对象,方法如下:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
获取对象好了之后,我们就可以通过这个对象来进行软键盘的操作了,在操作之前,我们还有一件事情要做的就是对该对象进行判断,其实也没什么的,就是为了避免空指针异常,代码如下:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);if (imm != null) {   //显示或者隐藏}

好了,现在我们就可以开始通过inputMethodManager对象来进行软键盘的显示和隐藏。


显示软键盘

Android中是通过inputMethodManager类中的showSoftInput方法来显示软键盘的。

showSoftInput方法源码如下:

public boolean showSoftInput(View view, int flags) {          return showSoftInput(view, flags, null);}
在这里,它有两个参数,第一个参数是表示当前要接收软键盘输入的View,第二个参数是表示当前软键盘显示控制的标记参数。

那么在这里需要注意的是,为什么会有人明明是按照这样去写的,结果就是不弹出软键盘呢?其实,经过网上查找资料后,我得知很多需要注意事项,如果一旦忽略一个细微的注意事项,那么有可能软键盘未能显示,下面分别看看有哪些注意事项。

1、第一个参数中的View必须是EditText,或者是EditText其子类,如果是其他类型的View,如果传递的例如是button,TextView等等,则showSoftInput方法显示无效。所以在这里第一个参数一般传递的是EditText对象。

2、第一个参数中的view当前必须已经获取到焦点(即view.isFocused()返回true),如果当前焦点不在该view上,则showSoftInput()方法不起作用。虽然EditText默认是可获取焦点的,但由于一个布局中可能会有多个控件可以获取焦点,焦点位置不一定会恰好在EditText上,所以此条件不一定满足。为了让showSoftInput()可以起作用,必须在之前showSoftInput()前先通过view.requestFocus();获取焦点。然后再执行showSoftInput()。


隐藏软键盘

到了这里,大家可能会觉得显示键盘利用了showSoftInput方法,那么既然是隐藏软件,那不就是hideSoftInput,然而很遗憾告诉你,并不是的,因为谷歌没有提供这样的方法给予我们利用开发,那么有没有其他方法呢?其实是有的,那么就是通过inputMethodManager类中的hideSoftInputFromWindow方法来隐藏键盘的,hideSoftInputFromWindow方法源码如下:

public boolean hideSoftInputFromWindow(IBinder windowToken, int flags) {        return hideSoftInputFromWindow(windowToken, flags, null);}
在这里,它同样也有两个参数,第一个参数表示View的windowToken,第二个参数是表示当前软键盘隐藏控制的标记参数。同样的隐藏键盘也有需要注意事项,注意事项分别有以下几个:

1、第一个参数并不是指定一个View,而是一个View的windowToken。那么如何获取到其windowToken呢?我们可以通过getWindow().getDecorView().getWindowToken()来获取。

2、第二个参数软键盘隐藏时候控制的标记参数,为了能够正常隐藏,这里一般直接写入为0。


综合案例

讲了那么多,如果大家还是不能够理解没关系,那么下面一起来看一个案例,相信大家一看更能深刻明白了!

在这里,我在Activity中加入了两个按钮,一个是显示键盘,一个是隐藏键盘,具体代码如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{    private EditText editText;    private Button show_bt;    private Button hide_bt;    private InputMethodManager imm;    private static final String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取InputMethodManager输入法管理器对象        imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);        //查找控件并且设置按钮点击事件        initView();    }    private void initView() {        editText= (EditText) findViewById(R.id.editText);        show_bt= (Button) findViewById(R.id.show_bt);        hide_bt= (Button) findViewById(R.id.hide_bt);        show_bt.setOnClickListener(this);        hide_bt.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            //显示键盘            case R.id.show_bt:                if (imm != null) {                    editText.requestFocus();                    imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);                    display("显示键盘");                }                break;            //隐藏键盘            case R.id.hide_bt:                if (imm != null) {                    editText.requestFocus();                    imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);                    display("隐藏键盘");                }                break;        }    }    public void display(String text){        Toast.makeText(MainActivity.this,text,Toast.LENGTH_LONG).show();    }}



效果图如下:



代码运行起来了,效果看似还可以,但是大家可能会说,为什么这样的代码会在有些手机中不能正常的显示键盘呢?其实这些问题在这里我也未能一一回答和解决。毕竟安卓手机那么多,手机厂商也那么多,甚至有些手机被厂商设置了关闭了软键盘,例如夜神模拟器,我发现需要用户去开启软键盘后才能正常显示的。好了,今天有关Android--软键盘的显示和隐藏讲解到这里,希望对大家在日常开发当中有所帮助!



更多相关文章

  1. 常用Android开发组件之文本类组件
  2. [置顶] android DatePicker 点击文本框,禁止弹出键盘
  3. 【Bugly干货分享】那些年我们用过的显示性能指标
  4. Android用surface直接显示yuv数据(一)
  5. Android(安卓)开发解决APP在18:9,18.5:9,19:9,19:10尺寸的手机上不
  6. android 自定义坐标曲线图
  7. Android(安卓)mp3 lyric 滚动显示 Demo
  8. Android中Toast显示时间的自定义
  9. Android(安卓)给应用程序的icon添加未读消息个数提示(红圈内数字)

随机推荐

  1. android N多窗口和画中画属性
  2. NETBEAN 开发Android应用
  3. Android 线性布局(LinearLayout)内各控件
  4. 线性布局和相对布局
  5. ListView背景修饰
  6. FrameLayout的使用
  7. android客户端和servlet服务端的简单登录
  8. android-android.hardware.Camera
  9. CountDownLatch
  10. 如何在你的本上或者pc上运行 Android [翻