键盘出现时向上滚动屏幕

gia*_*ska 25 keyboard android scroll android-edittext

我在中间有一个带有editText的活动.当我单击editText时,键盘出现,屏幕移动,以便editText位于键盘上方,覆盖下面的其他内容.

我不想调整大小或添加填充到布局.我只需要屏幕滚动到顶部我需要看到下面的其他东西的空间量.换句话说,我想在键盘出现时选择editText的位置.如果屏幕完全向上滚动,向我显示布局的底部也足够了.

我试图将布局放在scrollView中,在editText上添加此代码

    editText.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //make the view scroll down to the bottom
            scrollView.scrollTo(0, scrollView.getBottom());

        }
    });
Run Code Online (Sandbox Code Playgroud)

但它不起作用.有没有人有想法?先感谢您!

Ran*_*mar 30

使用 android:windowSoftInputMode ="adjustPan"

"adjustResize"

活动的主窗口始终调整大小,以便为屏幕上的软键盘腾出空间.

"adjustPan"

活动的主窗口未调整大小以便为软键盘腾出空间.相反,窗口的内容会自动平移,以便键盘不会遮挡当前焦点,用户可以随时看到他们正在键入的内容.这通常比调整大小更不合适,因为用户可能需要关闭软键盘以获得窗口的模糊部分并与其交互.

例如,你的清单文件: -

       <activity
    android:windowSoftInputMode="adjustPan"
    android:name=".MainActivity"></activity>
Run Code Online (Sandbox Code Playgroud)

迟到的答案.当然它对任何人都有帮助.


DrC*_*vas 17

我有一个类似的问题,我解决了使用:

    android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)

在AndroidManifest.xml中.

如果你使用一个必须挂钩到父底部的底部元素的RelativeLayout开头,然后将另一个元素挂钩到前一个元素之上.

如果使用LinearLayout将其包装在RelativeLayout中并将LinearLayout挂钩到parentBottom.

这样,当键盘弹出时,您将看到布局的底部.

希望这可以帮助.

  • 什么"如果你使用RelativeLayout开始,底部元素必须挂钩到父底部,挂钩另一个元素挂在前一个元素之上." 意思?我没有说明你的意思是钩子,你能进一步解释吗? (6认同)
  • 我认为这意味着(并且对我有用)是将 LinearLayout 包装在 RelativeLayout 中并在前者中设置 `android:layout_alignParentBottom="true"`。 (2认同)

小智 8

我遇到了这个问题,我通过这段代码解决了:

myEdittext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    myscrollview.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            View lastChild = myscrollview.getChildAt(myscrollview.getChildCount() - 1);
                            int bottom = lastChild.getBottom() + myscrollview.getPaddingBottom();
                            int sy = myscrollview.getScrollY();
                            int sh = myscrollview.getHeight();
                            int delta = bottom - (sy + sh);
                            myscrollview.smoothScrollBy(0, delta);
                        }
                    }, 200);
                }
            });
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我还在你的函数中添加了`myEdittext.setOnFocusChangeListener { _, hasFocus -&gt; if (hasFocus) scrollUpLayout() }`。并将 `android:windowSoftInputMode="adjustResize"` 添加到 AndroidManifest 活动。 (3认同)

小智 5

这适合我

android:windowSoftInputMode="stateVisible|adjustResize"
Run Code Online (Sandbox Code Playgroud)

在androidmanifest中进行活动


小智 5

这有效:-

在Constraint Layout中打开 Keyboard 时,向上滚动会出现问题。不要用那个。

要实现“键盘出现时向上滚动屏幕”试试这个

使用Linear 布局ScrollView

和滚动视图中的 fill_parent 。以及滚动视图中的任何文本字段。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   android:gravity="center">

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true">


</ScrollView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)