判断软键盘的弹出

未弹出软键盘时的布局,很简单,只有一个webview加一个底部bar,底部bar由一个linearlayout包含四个button组成。

当布局中有webview时,点击webview上的输入框,会有软键盘弹出以输入文字。

问题:此时,如果布局含有底部bar,底部bar会被软键盘托起。如下图所示:

解决方式:

使用  RelativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(listener);监听软键盘是否弹出,在弹出时隐藏底部bar即可。

注意:Manifest.xml中需要在Activity中添加android:theme="@android:style/Theme.Light.NoTitleBar",不然会有问题。

因为是webview需要连接网络,所以,Manifest.xml中也要添加INTENET权限。

public class MainActivity extends Activity {
    RelativeLayout re;
    LinearLayout footBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView wb = (WebView) findViewById(R.id.webView);
        re = (RelativeLayout) findViewById(R.id.relayout);
        footBar = (LinearLayout) findViewById(R.id.footBar);
        wb.getSettings().setJavaScriptEnabled(true);
        wb.loadUrl("http://www.baidu.com");

        re.getViewTreeObserver().addOnGlobalLayoutListener(
                new OnGlobalLayoutListener() {

                    @Override
                    public void onGlobalLayout() {
                        int heightDiff = re.getRootView().getHeight()
                                - re.getHeight();

                        if (heightDiff > 100) {
                            // 说明键盘是弹出状态
                            footBar.setVisibility(View.GONE);
                        } else {
                            footBar.setVisibility(View.VISIBLE);
                        }

                    }
                });
    }
}

xml:activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/footBar" />

    <LinearLayout
        android:id="@+id/footBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >

        <Button
            android:id="@+id/homeBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_weight="1"
            android:text="Button1"/>

        <Button
            android:id="@+id/backBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_weight="1"
            android:text="Button2"/>

        <Button
            android:id="@+id/forwardBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_weight="1"
            android:text="Button3" />

        <Button
            android:id="@+id/reloadBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_weight="1"
            android:text="Button4"/>
    </LinearLayout>

</RelativeLayout>

解决之后:

源码下载地址:http://download.csdn.net/detail/bx276626237/8850357

时间: 2024-10-11 23:56:17

判断软键盘的弹出的相关文章

Android 另类方法监听软键盘的弹出收起事件

http://www.cnblogs.com/csonezp/p/5065624.html 最近做的项目碰到个问题,a界面是fragment+recyclerview,b界面带个edittext,并且会自动获得焦点弹出软键盘.由a界面进入b界面,再结束b界面返回a界面,就会在a界面上留下一片和软键盘大小相同的灰色区域,具体原因搞了很久也不清楚.但是问题总是要解决的,我在a的fragment上折腾了半天,始终没什么用.然后就想着在b界面折腾折腾,关闭activity的时候先收起挼键盘,软键盘收起完

关于ios8模拟器不能输入中文问题以及软键盘不弹出问题

在Xcode菜单栏中   Product->scheme->Edit Scheme->Options->Application Region改为中国,就可以输入中文了, 如果软键盘不弹出,则按shift+command+k,因为ios8外置键盘和软键盘只支持一个.

Android 软键盘控制弹出(很好使,自己写的,绝对能用)

最近在做电商类的项目,由于需求的不断变动,在有关输如文本框的地方,要求弹出软键盘,如果界面很多的下,则需要些很多代码,在空闲的时候,写了一个软键盘管理类,很好使,自己写的,亲自试过,这是一个软键盘控制单例模式实现的. 代码如下: package com.okdi.ilife.activity.login; import android.app.Activity; import android.content.Context; import android.view.View; import an

Android软键盘强制弹出,隐藏输入法.

本文实例讲述了Android实现弹出键盘代码,是一个非常实用的功能.代码非常简洁.分享给大家供大家参考. 具体功能代码如下: ? 1 2 3 4 5 6 7 8 Timer timer = new Timer(); timer.schedule(new TimerTask() {  @Override  public void run() {  InputMethodManager m = (InputMethodManager) editText.getContext().getSystemS

Android通过监听最外层布局的改变监听键盘的状态,软键盘的弹出和收起都会改变外层布局(前提是把Activity的mode设置成压缩);

最外层布局.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Override public void onLayoutChange(View arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) { // TODO Auto-generated method stub if(EditText.hasFocus()

Android判断软键盘弹出并隐藏的简单完美解决方案

最近项目中有一个编辑框,下面是个ListView.在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击.这样的体验效果很不好.于是便想在滑动或单击item时判断键盘是否弹出,若弹出,则把它隐藏. 网上一搜,发现Android并没有直接提供软键盘的弹出与隐藏判断,一些解决方案诸如判断父控件的高度或者判断 if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT

关于项目中很多键盘无故弹出或无隐藏的总结

1.activity的键盘问题 当布局中有EditText时,键盘有时会主动弹出影响界面效果,解决方式如下: 在清单文件-Manifest.xml中设定activity的属性 1.键盘的隐藏 android:windowSoftInputMode="stateHidden|stateUnchanged" "stateUnspecified"是指软键盘的状态(是否它是隐藏或可见)没有被指定. "stateHidden" 当用户选择该Activity

iOS 8 模拟器键盘无法弹出

这是比较奇葩的问题,真机上键盘可以弹出,但模拟器上不行,这个我们测试程序带来了很多麻烦,后来找到了解决方法: 这样就正常了. 选了这个就直接连电脑上的键盘了.

bug日志(1):UIAlertView消失之后收起的键盘又弹出

iOS8之后,有了UIAlertController这个类,如下 NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertController : UIViewController 很明显,苹果强烈建议广大码农们如果能不用UIAlertView就不要用啦,因为我们有UIAlertController了! 进入正题...... 为了兼容iOS7,我们的项目中就统一使用了UIAlertView.问题来了:(项目中的某一)界面中textField处于编辑状态(界面上