kotlin 显示键盘时滚动到特定位置

jchrr9hc  于 2023-06-24  发布在  Kotlin
关注(0)|答案(2)|浏览(129)

我实际上是想在一个小移动的上安装一个全屏活动。以下是我的布局:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello 1"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello 2"/>

        <LinearLayout
            android:id="@+id/theLinearLayoutIWantToSee"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <CustomEditText
                android:id="@+id/editText1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <CustomEditText
                android:id="@+id/editText2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="click"/>
        </LinearLayout>

    <LinearLayout
        android:id="@+id/myLinearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"></LinearLayout>

        ...Some TextViews...

    <LinearLayout
        android:id="@+id/myLinearLayout3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        ...Some TextViews...

    </LinearLayout>

    </LinearLayout>

</ScrollView>

我的问题是,当通过单击其中一个editText显示键盘时,我想将屏幕居中在theLinearLayoutIWantToSee上,按钮在底部。
实际上,如果我点击第一个editText,我只会看到键盘,editText和它上面的东西。
我显然已经尝试将adjustPanadjustResize放在我的清单中,但这并不能解决我的问题。
你有什么建议吗?

mcvgt66p

mcvgt66p1#

你可以试试binding.theLinearLayoutIWantToSee.requestFocus()
如果您没有使用我上面提到的viewBinding()/binding,只需将binding部分替换为findViewById<LinearLayout(R.id.theLinearLayoutIWantToSee).requestFocus()
还要注意的是,您可以在所需editText的单击事件上应用requestFocus()部件。因此,它只会在单击事件时请求焦点,而不是立即请求。
如果这个解决方案没有帮助,请给予一些详细的解释。这样任何人都可以帮助你实现你想要的目标。

c3frrgcw

c3frrgcw2#

在java中,你可以这样做:

EditText editText = findViewById(R.id.editText);
final View parentLayout = findViewById(R.id.parentLayout); // Replace with your parent layout or ScrollView

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            // Calculate desired scroll position or offset
            int[] location = new int[2];
            editText.getLocationOnScreen(location);
            int editTextBottom = location[1] + editText.getHeight();
            int keyboardHeight = /* Calculate the keyboard height */;

            int scrollAmount = Math.max(0, editTextBottom - (parentLayout.getHeight() - keyboardHeight));

            // Scroll the parent layout or ScrollView to the desired position
            parentLayout.scrollTo(0, scrollAmount);

            // Adjust window's soft input mode to allow resizing
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        }
    }
});

相关问题