【问题标题】:Soft keyboard pushing layout软键盘推送布局
【发布时间】:2018-08-28 21:48:21
【问题描述】:

我一直在尝试许多解决方案,以防止软键盘在出现时推动我的布局。但是,所有解决方案都不起作用。

简单地说,我希望布局中的所有内容(按钮、imageViews、背景、textViews、textEdits)在显示软键盘时保持原位。我不在乎它会涵盖什么。

我尝试了以下所有方法并且都产生了相同的输出并且不起作用:

  1. (无效)我尝试在我的AndroidManifest.xml 中写android:windowSoftInputMode="adjustNothing"
  2. (没用)我尝试在 myonCreate() 中写 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);虽然没用
  3. 我试着写android:windowSoftInputMode="adjustResize" 在我的AndroidManifest.xml 中也没有工作
  4. (无效)我尝试在我的AndroidManifest.xml 中写android:windowSoftInputMode="stateHidden|adjustPan"
  5. (没用)我也尝试在我的AndroidManifest.xml 中写android:windowSoftInputMode="stateVisible|adjustPan"

以上所有解决方案都生成了以下快照:

实际的布局是这样的(这是我希望它在软键盘处于活动状态时保持的样子):

知道如何防止这种情况发生吗?

这是我的 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="xxxxxxx">
    <!-- Include required permissions for Google Mobile Ads to run. -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE"/>

    <supports-screens
        android:xlargeScreens="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        tools:replace="android:supportsRtl"
        android:theme="@style/AppTheme"> <!-- This meta-data tag is required to use Google Play Services. -->
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity
            android:name=".MainActivity"
            android:configChanges="orientation"
            android:screenOrientation="portrait"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> <!-- Include the AdActivity configChanges and theme. -->
        <activity
            android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:windowSoftInputMode="stateVisible|adjustPan"
            android:theme="@android:style/Theme.Translucent" />
    </application>

</manifest>

MainActivity.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"


    <!-- view for AdMob Banner Ad -->


    <!--Real Ad ads:adUnitId="@string/banner_ad_unit_id" -->

    <ImageView
        android:id="@+id/background"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitXY"
        android:visibility="visible"
        ads:layout_constraintBottom_toBottomOf="parent"
        ads:layout_constraintLeft_toLeftOf="@id/relativeLayout"
        ads:layout_constraintRight_toRightOf="@id/relativeLayout"
        ads:layout_constraintTop_toTopOf="parent"
        ads:layout_constraintVertical_bias="0.0" />

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="320dp"
        android:layout_height="50dp"
        android:visibility="visible"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-5739450654089125/9466012825"
        ads:layout_constraintLeft_toLeftOf="parent"
        ads:layout_constraintRight_toRightOf="parent"
        ads:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/submitScore"
        android:layout_width="88dp"
        android:layout_height="48dp"
        android:text="@string/submit"
        ads:layout_constraintBottom_toBottomOf="@id/ourScoreTextInput"
        ads:layout_constraintRight_toRightOf="@id/adView" />

    <EditText
        android:id="@+id/theirScoreTextInput"
        android:layout_width="95dp"
        android:layout_height="42dp"
        android:layout_marginTop="4dp"
        android:ems="10"
        android:inputType="number"
        android:scrollbars="vertical"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textStyle="bold"
        android:visibility="visible"
        ads:layout_constraintBottom_toBottomOf="@id/ourScoreTextInput"
        ads:layout_constraintLeft_toLeftOf="@id/adView"
        ads:layout_constraintTop_toBottomOf="@id/theirTextFieldDescription" />

    <EditText
        android:id="@+id/ourScoreTextInput"
        android:layout_width="95dp"
        android:layout_height="0dp"
        android:layout_marginBottom="389dp"
        android:ems="10"
        android:inputType="number"
        android:scrollbars="vertical"
        android:textColor="@android:color/background_light"
        android:textStyle="bold"
        android:visibility="visible"
        ads:layout_constraintBaseline_toBaselineOf="@id/theirScoreTextInput"
        ads:layout_constraintBottom_toBottomOf="parent"
        ads:layout_constraintLeft_toRightOf="@id/theirScoreTextInput"
        ads:layout_constraintRight_toLeftOf="@id/submitScore"
        ads:layout_constraintTop_toBottomOf="@id/ourTextFieldDescription" />

    <TextView
        android:id="@+id/theirTextFieldDescription"
        android:layout_width="wrap_content"
        android:layout_height="27dp"
        android:text="@string/their_score"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="20sp"
        ads:layout_constraintBottom_toTopOf="@+id/theirScoreTextInput"
        ads:layout_constraintHorizontal_bias="0.472"
        ads:layout_constraintLeft_toLeftOf="@+id/theirScoreTextInput"
        ads:layout_constraintRight_toRightOf="@id/theirScoreTextInput"
        ads:layout_constraintTop_toBottomOf="@+id/adView"
        ads:layout_constraintVertical_bias="0.283" />

    <TextView
        android:id="@+id/ourTextFieldDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/our_score"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="20sp"
        ads:layout_constraintBaseline_toBaselineOf="@id/theirTextFieldDescription"
        ads:layout_constraintBottom_toBottomOf="@id/ourTextFieldDescription"
        ads:layout_constraintBottom_toTopOf="@id/ourScoreTextInput"
        ads:layout_constraintLeft_toLeftOf="@id/ourScoreTextInput"
        ads:layout_constraintRight_toRightOf="@+id/ourScoreTextInput"
        ads:layout_constraintTop_toTopOf="@id/theirTextFieldDescription" />

    <TextView
        android:id="@+id/theirScoreSheet"
        android:layout_width="150dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="8dp"
        android:background="#1FFF"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="24sp"
        android:textStyle="bold"
        ads:layout_constraintBottom_toBottomOf="parent"
        ads:layout_constraintLeft_toLeftOf="@id/background"
        ads:layout_constraintRight_toLeftOf="@id/frameLayout"
        ads:layout_constraintTop_toBottomOf="@+id/theirScoreSheetDescription"
        ads:layout_goneMarginLeft="16dp"
        ads:layout_goneMarginRight="16dp" />

    <TextView
        android:id="@+id/ourScoreSheet"
        android:layout_width="147dp"
        android:layout_height="0dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:background="#1FFF"
        android:scrollbars="vertical"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="24sp"
        android:textStyle="bold"
        ads:layout_constraintBottom_toBottomOf="@+id/theirScoreSheet"
        ads:layout_constraintLeft_toRightOf="@id/frameLayout"
        ads:layout_constraintRight_toRightOf="@id/background"
        ads:layout_constraintTop_toTopOf="@id/theirScoreSheet"
        ads:layout_constraintVertical_bias="0.0"
        ads:layout_goneMarginLeft="16dp"
        ads:layout_goneMarginRight="16dp" />

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="5dp"
        android:layout_height="0dp"
        ads:layout_constraintBottom_toBottomOf="@+id/background"
        ads:layout_constraintEnd_toEndOf="parent"
        ads:layout_constraintHorizontal_bias="0.5"
        ads:layout_constraintStart_toStartOf="parent"
        ads:layout_constraintTop_toTopOf="parent"
        ads:layout_constraintVertical_bias="0.0">

    </FrameLayout>

    <ImageView
        android:id="@+id/gear"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:background="@drawable/gear"
        android:contentDescription="@string/gear"
        android:visibility="visible"
        ads:layout_constraintBottom_toBottomOf="parent"
        ads:srcCompat="@drawable/gear" />

    <TextView
        android:id="@+id/theirScoreSheetDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="@string/their_score"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="22sp"
        android:textStyle="bold"
        ads:layout_constraintLeft_toLeftOf="@id/theirScoreSheet"
        ads:layout_constraintRight_toRightOf="@id/theirScoreSheet"
        ads:layout_constraintTop_toBottomOf="@id/theirScoreTextInput" />

    <TextView
        android:id="@+id/ourScoreTotalLarge"
        android:layout_width="138dp"
        android:layout_height="wrap_content"
        android:alpha="0.4"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="75sp"
        android:textStyle="bold"
        ads:layout_constraintBottom_toBottomOf="@+id/ourScoreSheet"
        ads:layout_constraintLeft_toLeftOf="@+id/ourScoreSheet"
        ads:layout_constraintRight_toRightOf="@+id/ourScoreSheet"
        ads:layout_constraintTop_toTopOf="@+id/ourScoreSheet" />

    <TextView
        android:id="@+id/theirScoreTotalLarge"
        android:layout_width="138dp"
        android:layout_height="wrap_content"
        android:alpha="0.4"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="75sp"
        android:textStyle="bold"
        ads:layout_constraintBottom_toBottomOf="@+id/ourScoreTotalLarge"
        ads:layout_constraintLeft_toLeftOf="@+id/theirScoreSheet"
        ads:layout_constraintRight_toRightOf="@+id/theirScoreSheet"
        ads:layout_constraintTop_toTopOf="@id/ourScoreTotalLarge" />

    <TextView
        android:id="@+id/ourScoreSheetDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/our_score"
        android:textAlignment="center"
        android:textColor="@android:color/background_light"
        android:textSize="22sp"
        android:textStyle="bold"
        ads:layout_constraintBottom_toBottomOf="@+id/theirScoreSheetDescription"
        ads:layout_constraintLeft_toLeftOf="@+id/ourScoreSheet"
        ads:layout_constraintRight_toRightOf="@+id/ourScoreSheet"
        ads:layout_constraintTop_toTopOf="@+id/theirScoreSheetDescription" />

    <Button
        android:id="@+id/settingsButton"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:alpha="0.0"
        ads:layout_constraintBottom_toBottomOf="@+id/gear"
        ads:layout_constraintLeft_toLeftOf="@+id/gear"
        ads:layout_constraintRight_toRightOf="@+id/gear"
        ads:layout_constraintTop_toTopOf="@+id/gear" />

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        ads:layout_constraintGuide_end="364dp" />
</android.support.constraint.ConstraintLayout>

【问题讨论】:

  • 试试stateHidden|adjustNothingadjustResize
  • 我都试过了,如我上面写的那样,但没有成功
  • 显示您的 xml 和清单文件
  • 您在滚动视图中使用的背景图片对吗? @Adeeb
  • 只有我的 xml 文件中没有滚动视图(textViews、buttons、textEdits 和 imageViewes)

标签: java android layout view keyboard


【解决方案1】:

删除 xml 文件中的背景图片

使用以下代码在 java 文件中设置背景图像:

getWindow().setBackgroundDrawable(ContextCompat.getDrawable(this, R.drawable.banner1));

【讨论】:

  • 这很好。它修复了背景图像。但是,当软键盘出现时,其他对象仍在移动
  • 给我看你的XML文件
  • 请见上文。我将其添加到我的问题中。
【解决方案2】:

这对我有用

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

【讨论】:

    【解决方案3】:

    我最近遇到了同样的事情。在停留在一个活动中时,有时软键盘会导致重新布局,有时不会,这取决于我加载的片段。最后我想通了。这是由可见的 RecyclerView 引起的:

        <androidx.recyclerview.widget.RecyclerView
            android:layout_width="1dp"
            android:layout_height="1dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            android:visibility="visible"/>
    

    就是这样。如果我加载的 Fragment 有一个可见的 RecyclerView,软键盘会导致重新布局。如果不是,它不会。它甚至会导致重新布局不属于包含 RecyclerView 的 Fragment 的内容。

    这就是它在 ConstraintLayout 中的样子。但它也可以在RelativeLayout 中。如果其可见性“消失”,则软键盘的外观不会导致重新布局。如果它是“可见的”,软键盘的出现会导致整个 Activity 的重新布局。我不知道这个“适用”的 Android 版本是什么,也不知道它是否是故意的。

    我知道你没有,但也许你的 .xml 中的其他东西做同样的事情,或者里面有一个 RecyclerView。我推测 RecyclerView 的存在会导致设置 SoftInputMode。您可以考虑等待您的视图完成布局,然后更改 SoftInputMode,看看它是否粘住。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多