Android 键盘出现时向上滚动屏幕 我在中间有一个编辑文本的活动。当我点击 编辑文本键盘出现,屏幕移动,使 editText就在键盘上方,覆盖了其他需要的内容 下面

Android 键盘出现时向上滚动屏幕 我在中间有一个编辑文本的活动。当我点击 编辑文本键盘出现,屏幕移动,使 editText就在键盘上方,覆盖了其他需要的内容 下面,android,scroll,android-edittext,keyboard,android-scrollview,Android,Scroll,Android Edittext,Keyboard,Android Scrollview,我不想调整布局的大小或在布局中添加填充。我需要这个 屏幕滚动到顶部,显示我需要查看的空间量 还有下面的其他内容。换句话说,我想选择 键盘出现时编辑文本的位置。那就足够了 另外,如果屏幕完全向上滚动,显示屏幕的底部 布局 我试图将布局放在滚动视图中,在editText上添加此代码 editText.setOnClickListener(new OnClickListener() { @Override public void onClick(View v)

我不想调整布局的大小或在布局中添加填充。我需要这个 屏幕滚动到顶部,显示我需要查看的空间量 还有下面的其他内容。换句话说,我想选择 键盘出现时编辑文本的位置。那就足够了 另外,如果屏幕完全向上滚动,显示屏幕的底部 布局

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

    editText.setOnClickListener(new OnClickListener() {

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

        }
    });

但它不起作用。有人有主意吗?提前谢谢你

我曾经遇到过类似的问题,我使用以下方法解决了问题:

    android:windowSoftInputMode="adjustResize"
在AndroidManifest.xml中

如果使用的起始元素是必须钩住父底部的底部元素,然后钩住上一个底部元素上方的另一个元素

如果您使用,请将其包裹在一个钩子中,并将其钩住底部

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

希望这对我有帮助。

这对我有用

android:windowSoftInputMode="stateVisible|adjustResize"

在活动的androidmanifest中使用android:WindowsofInputMode=“adjustPan”

“调整大小”

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

调整盘“

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

例如,在清单文件中:-

       <activity
    android:windowSoftInputMode="adjustPan"
    android:name=".MainActivity"></activity>


回答晚。但肯定对任何人都有帮助。

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

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);
                }
            });
将此项添加到gradle依赖项:

dependencies {
    compile 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0'
}
并使用此代码:

KeyboardVisibilityEvent.setEventListener(getActivity(), new KeyboardVisibilityEventListener() {
    @Override
    public void onVisibilityChanged(boolean isOpen) {

        if (isOpen && MY_EDIT_TEXT.hasFocus()) {

            //scroll to last view
            View lastChild = scrollLayout.getChildAt(scrollLayout.getChildCount() - 1);
            int bottom = lastChild.getBottom() + scrollLayout.getPaddingBottom();
            int sy = scrollLayout.getScrollY();
            int sh = scrollLayout.getHeight();
            int delta = bottom - (sy + sh);

            scrollLayout.smoothScrollBy(0, delta);
        }
    }
});
本工程:

当键盘在约束布局中打开时,向上滚动出现问题。 不要用那个

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

使用线性布局滚动视图

并在滚动视图中填充父项。 和滚动视图中的任何文本字段

<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>

它只在我从约束布局更改为线性布局并添加

android:WindowsOfInputMode=“adjustResize”

并删除

true
来自活动样式

只需添加

android:screenReaderFocusable="true"

对于您的XML文件,它将像一个符咒一样工作

这是在Kotlin中实现的简单方法(从用户的答案中重复使用),我使用它在设置焦点和显示键盘时手动滚动到EditText,需要时在键盘和EditText之间添加额外的底部填充:

    binding.scrollView.postDelayed(object:Runnable {

        override fun run() {

            val extraBottomPadding = 100

            val manualScroll = txtFullName.y + extraBottomPadding

            scrollView.smoothScrollBy(0, manualScroll.toInt())
        }

    }, 200)

“如果使用RelativeLayout,则必须从底部元素开始,底部元素必须钩住父底部,而钩住上一个元素上方的另一个元素”,这是什么意思?我没有理解钩子是什么意思,你能进一步解释一下吗?如果我想在键盘可见时显示的屏幕部分不能钩住到父屏幕底部,而是在页面的中心位置怎么办?在我的“片段”getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u INPUT\u ADJUST\u RESIZE)中不起作用;请澄清您的答案我认为这意味着(对我来说)将线性布局包装在一个相对的布局中,并在前者中设置
android:layout\u alignParentBottom=“true”
。他不想调整大小。谢谢!我还在函数中添加了
myEdittext.setOnFocusChangeListener{{,hasFocus->if(hasFocus)scrollUpLayout()}
。并在AndroidManifest活动中添加了
android:WindowsOfInputMode=“adjustResize”
。谢谢,它对我也很有用。android:WindowsOfInputMode=“adjustResize”并在setOnClickListener上改为使用setOnFocusChangeListener。不应使用fill\u parent。在xml中的何处添加此行?