Android中键盘和EditText之间的空间

38
软输入模式为"SOFT_INPUT_ADJUST_PAN",当键盘显示时,EditText会向上移动以保持可见,但是键盘和文本底部总是粘在一起,如屏幕截图所示,我想要它们之间有一些空间,这可能吗?
另外,输入模式必须保持为"SOFT_INPUT_ADJUST_PAN"
抱歉我的英语,提前感谢... 截图:

为什么坚持使用“adjustPan”?使用“adjustResize”不会有这个问题。 - arjoan
3
由于使用"adjustResize"时,最大的问题是底部导航栏会移到键盘顶部。 - Altynbek Usenbekov
6个回答

5

我采用了以下方法,对我来说可行: 将android:windowSoftInputMode设置为“adjustPan” 然后在edittext中添加padding并使用bottom gravity 这样就可以完美地工作了。 谢谢。


2
填充(Padding)是有效的,因为与外边距不同,窗口管理器将其视为视图内部的内容。例如:editText.setPadding(0, 0, 0, 40)将导致键盘出现时视图底部增加额外的40像素空间。我不需要设置重力(gravity)就可以实现这个效果。 - Ian Lovejoy
1
如果你这样做,EditText中的文本会发生什么? - filthy_wizard
@user1232726,如果您将编辑文本的高度设置为wrap_content,则文本会出现偏离中心的情况,但所有文本都将可见。如果您将编辑文本高度设置为41dp并将paddingBottom设置为40dp,则情况就不同了。 - Ed Lee
当我添加填充时,它也会将EditText下面的行向下推,从而破坏设计。因此,我认为这不是最佳解决方案。 - The Fluffy T Rex

4

希望这能帮到您:

如果这一行出现在您的代码中,请将其删除:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

或者:

不应该使用明确的像素值来设置layout_widthlayout_heights。相反,根据需要使用wrap_parentfill_parent

或者:

如果您将minSdkVersion设置为3,请将其更改为minSdkVersion=4

编辑:

在Activity上设置android:windowSoftInputMode"adjustPan"

或者:

在您的主活动中,在您的EditTextsetOnTouchListener()中添加此代码:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_UNSPECIFIED);

1
谢谢,输入模式必须保持SOFT_INPUT_ADJUST_PAN。当键盘显示时,它会粘在EditText上(例如屏幕底部的EditText)。这没问题,但我想在EditText和键盘之间留出一些空间。 - Altynbek Usenbekov
1
欢迎伙计……我所建议的是,你可以尝试在xml文件中的EditText中添加marginBottom属性,并且在试验过后,请勾选此答案以示工作。 - Bhavin Nattar
1
@altosh:朋友,如果我的回答对你有帮助,请勾选它,这样其他人就知道这是正确的答案... - Bhavin Nattar

0

为什么不试试这个?

android:windowSoftInputMode="adjustResize"

我知道你想要调整pan,但这也可以解决你的问题。

既然你真的想要保持adjustPan,也许你可以尝试重新设计XML布局。

你还必须在布局文件中的最外层容器元素中添加所需的填充。


1
EditText和软键盘之间没有空格。我无法弄清楚。 - filthy_wizard
@filthy_wizard,请检查你布局中的填充。 - Jeffrey
我有一个疑问,这个对我有效,但是我使用底部导航,而且这个会随着键盘一起上移,所以空间很大,你可以看到和按下任何导航按钮。 - Alex Rivas

0

简单的编辑文本填充无法起作用。

像以下这样使用可绘制对象与您的编辑文本:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="8dp"
        android:left="8dp"
        android:right="8dp"
        android:top="8dp">

        <shape android:shape="rectangle">

            <corners android:radius="10dp" />
            <stroke
                android:width="1dp"
                android:color="@color/white" />
            <solid android:color="@color/transparent" />
        </shape>
    </item>
</layer-list>

然后使用

    android:windowSoftInputMode="adjustPan"

在你的清单文件中。


-1
尝试使用 GlobalLayoutListener: private var focusView: View? = null
// Register global layout listener.
    decorView?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {

        private val windowVisibleDisplayFrame = Rect()
        private var lastVisibleDecorViewHeight: Int = 0

        override fun onGlobalLayout() {

            // Retrieve visible rectangle inside window.
            decorView.getWindowVisibleDisplayFrame(windowVisibleDisplayFrame)
            val visibleDecorViewHeight = windowVisibleDisplayFrame.height()

            // Decide whether keyboard is visible from changing decor view height.
            if (lastVisibleDecorViewHeight != 0) {
                if (lastVisibleDecorViewHeight > visibleDecorViewHeight + MIN_KEYBOARD_HEIGHT_PX) {
                    // Calculate current keyboard height (this includes also navigation bar height when in fullscreen mode).
                    val currentKeyboardHeight = decorView.height - windowVisibleDisplayFrame.bottom

        //keyboardHeight = currentKeyboardHeight


          focusView =  activity?.currentFocus     
          focusView.setPadding(0, 0, 0, SET_BOTTOM_PADDING_SPACE)  // <---set space here



                } else if (lastVisibleDecorViewHeight + MIN_KEYBOARD_HEIGHT_PX < visibleDecorViewHeight) {

                    focusView.setPadding(0, 0, 0, 0)

                }
            }
            // Save current decor view height for the next call.
            lastVisibleDecorViewHeight = visibleDecorViewHeight
        }
    })

-1

请问一下,你的应用程序是否全屏显示?是否有状态栏?如果是,请尝试禁用全屏模式,看看是否解决了你的问题。我记得以前有一个关于这个问题的 bug。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接