Android 输入法框弹出 背景上移或压缩问题

在平时做项目的时候,美工经常会把登陆页面的输入框放在窗口底部(如图一),但他们一般不会去考虑输入法框弹出之后界面是什么样子的,所以会遇到输入法框就会出现背景上移或压缩的问题(如图二),而我们希望是某一区域的布局上移(如图三)。

图一…………图二………….图三

首先我们需要了解一下android:windowSoftInputMode 属性,
该属性是 AndroidMainifest 中的activity标签的属性之一,它有以下属性值:

  1. stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置

  2. stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

  3. stateHidden:用户选择activity时,软键盘总是被隐藏

  4. stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的

  5. stateVisible:软键盘通常是可见的

  6. stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态

  7. adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示

  8. adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

  9. adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

解决方案:
设置android:windowSoftInputMode=”adjustResize”,然后在输入框区域加上android:fitsSystemWindows=”true”即可,注意当设置windowSoftInputMode属性为adjustResize,fitsSystemWindows属性只能被调用一次,若是布局文件中有两处使用到了该属性,只能实现第一个被设置的控件上移。

警告:
上述方案在android4.4版本以下会出现背景压缩问题,需要在activity的onCreate方法里添加如下代码,要放在setContentView()方法之前。

if(Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT){
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;//设置全屏但不隐藏状态栏
            decorView.setSystemUiVisibility(option);
        }

布局代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@mipmap/login_bg"
    tools:context="com.feeling.login.activity.LoginActivity">

    <!--在你想上移的区域加上android:fitsSystemWindows="true",我的加在了这里-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:fitsSystemWindows="true">
        <EditText
            android:id="@+id/account"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="@dimen/activity_vertical_margin"
            android:background="@drawable/login_edittext_bg"
            android:layout_marginBottom="5dp"
            android:hint="@string/account"/>

        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="@dimen/activity_vertical_margin"
            android:background="@drawable/login_edittext_bg"
            android:layout_marginBottom="5dp"
            android:hint="@string/password"/>

        <Button
            android:id="@+id/login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@style/Base.Widget.AppCompat.Button.Colored"
            android:text="@string/login"/>
    </LinearLayout>

</RelativeLayout>
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android手机的输入法不弹时,可能有以下几个原因: 1. 输入法未启用:首先要确保输入法已经启用。可以在手机设置中的“语言和输入法”或“键盘和输入法”中查看所有安装的输入法,并选择需要使用的输入法。如果没有检测到要使用的输入法,可以尝试下载并安装相应的输入法应用程序。 2. 输入法未被选中:在应用程序中,点击文本输入框时,可能需要手动选择要使用的输入法。通过长按文本输入框,会弹选项菜单,选择“输入法”并选择需要使用的输入法。 3. 输入法冲突:如果安装了多个输入法,可能会输入法冲突的情况,导致输入法。可以尝试禁用除需要使用的输入法外的其他输入法,然后重新启动手机。 4. 软件冲突:某些应用程序可能与输入法软件存在冲突,导致无输入法。可以尝试卸载最近安装的应用程序,或在应用管理器中找到相关应用程序并清除其缓存数据。 5. 系统问题:偶尔,系统中的某些错误可能导致输入法。可以尝试重启手机,以解决可能存在的临时问题。如果问题依然存在,可以考虑进行硬件重置或寻求专业技术支持。 总而言之,可以通过检查输入法的启用状态、选中输入法、解决输入法冲突、处理软件冲突、重启手机等方来解决Android手机输入法不弹问题。如果问题仍然无解决,建议寻求专业技术支持。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值