Android -键盘消失时仍有空格

f1tvaqid  于 2023-05-12  发布在  Android
关注(0)|答案(4)|浏览(145)

我的键盘有问题。当它消失时,它所占据的空间保持空白,布局的其余部分不会调整
正常屏幕:

带键盘:

键盘解除:

我以前从未见过这个,所以我甚至不知道从哪里开始寻找。这种情况发生在4.2.2和5.1中
另一条重要信息是,这是一个自定义的LinearLayout,它包含所有内容。也许这和那个有关。如果需要,我可以上传任何代码。
这是主布局文件shell。

<com.edgetechlabs.app_v2.MasterLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- Menu (Drawer)-->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:visibility="visible"
    android:layout_height="match_parent"
    android:orientation="vertical" >
     <ScrollView
        android:id="@+id/activity_main_menu_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/drawer_background"
        android:cacheColorHint="#00000000" >
     </ScrollView>
</LinearLayout>
<!-- Fragment Holder -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!-- This is where fragment will show up -->
    <FrameLayout
        android:id="@+id/fragment_master"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>
</LinearLayout>

这是我的货单文件

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MasterActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
bqucvtff

bqucvtff1#

我补充道

android:windowSoftInputMode="adjustPan"

到我的清单中,现在它工作了。我从来没有这样做过,我猜我的自定义布局是混乱的键盘不知何故。
感谢@eee评论为我指明了正确的方向

zvokhttg

zvokhttg2#

尝试将ScrollView更改为androidx.core.widget.NestedScrollView
这帮助我解决了这个问题

n9vozmp4

n9vozmp43#

如果您在AndroidManifest.xmlf.e中活动中没有设置adjustPan,您需要adjustResize,那么这是帮助我白色空白的唯一解决方案

EditText.setOnFocusChangeListener { v, hasFocus ->
    if (hasFocus) {
        // something if needed
    } else {
        Utils.hideKeyboardToAdjustPan(activity)
    }
}

fun hideKeyboardToAdjustPan(activity: Activity?) {
    activity?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
    hideKeyboard(activity)
}

fun hideKeyboard(activity: Activity?) {
    if (activity != null) {
        hideKeyboard(activity.currentFocus)
    }
}

fun hideKeyboard(view: View?) {
    if (view != null) {
        val inputManager = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        inputManager.hideSoftInputFromWindow(
            view.windowToken,
            WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED
        )
    }
}
13z8s7eq

13z8s7eq4#

在我的例子中,我有android:windowSoftInputMode="adjustResize",这并不重要。在一种布局中,当列表太短并且键盘显示然后隐藏时,列表占用较小的空间。列表下方(显示键盘的位置)将显示一个空白区域。

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        ... >

        <com.google.android.material.appbar.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <include
                layout="@layout/details"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" />

        </com.google.android.material.appbar.AppBarLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="com.example.behavior.AutoSizeBehavior"> // Wrong class

            <androidx.recyclerview.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </FrameLayout>
    </androidx.coordinatorlayout.widget.CoordinatorLayout>

我试着改变app:layout_scrollFlags="scroll|exitUntilCollapsed|snap",但它不适合滚动。然后我用NestedScrollView替换了CoordinatorLayout,这很有帮助,但是布局改变了。在那之后,我注意到app:layout_behavior引用了一个自定义类(有bug)。我把它改成了@string/appbar_scrolling_view_behavior。您也可以更改为com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior

相关问题