android - 当键盘出现时如何滚动整个布局?

标签 android android-edittext android-softkeyboard

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/defaut_padding" >

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/defaut_padding"
        android:orientation="vertical" >

        <FrameLayout
            android:id="@+id/photo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <ImageView
                android:id="@+id/picture"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scaleType="fitXY" />

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_margin="10dp"
                android:background="@drawable/watermark" />

            <ProgressBar
                android:id="@+id/bitmap_loading"
                style="?android:attr/progressBarStyleLarge"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:visibility="visible" />
        </FrameLayout>

        <FrameLayout
            android:id="@+id/user"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/photo"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="-30dp"
            android:background="@android:color/white"
            android:padding="@dimen/smallest_padding" >

            <ImageView
                android:id="@+id/user_picture"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:src="@drawable/anonymous_user" />
        </FrameLayout>

        <TextView
            android:id="@+id/user_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@id/user"
            android:layout_marginLeft="@dimen/defaut_padding"
            android:layout_toRightOf="@id/user"
            android:text="@string/anonymous_user"
            android:textStyle="bold" />
    </RelativeLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
<EditText
    android:id="@+id/input_description"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="top"
    android:padding="5dp"
    android:layout_marginBottom="@dimen/defaut_padding"
    android:background="@drawable/textfield"
    android:hint="@string/description_hint"
    android:focusableInTouchMode="true"
    android:maxLines="3"
    android:scrollbars="vertical" />

<Button
    android:id="@+id/publish"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/confirm_button_selector"
    android:text="@string/confirm_button"
    android:textColor="@android:color/white"
    android:textSize="@dimen/big_text_size"
    android:textStyle="bold" />

    </FrameLayout>
</LinearLayout>

</ScrollView>

当我开始在 EditText 上进行数字输入时,我想在软键盘出现时滚动它。我怎样才能做到这一点?目前滚动可以工作,但键盘出现在按钮上方,我希望按钮位于键盘上方

我尝试在用户单击 EditText 时移动滚动条,执行如下操作:

mSv.scrollTo(0, mSv.getBottom());

其中 mSv 是我的 ScrollView

但只有当用户第二次单击 EditText 时它才有效。

感谢您的帮助。

最佳答案

尝试将键盘更改为平移而不是调整大小。您可以在您的 AndroidManifest.xml 文件中执行此操作,对于您的特定 Activity,将以下内容添加到其中

android:windowSoftInputMode="adjustPan"

如果您想隐藏,则:

EditText editTextSearch = (EditText) findViewById(R.id.editTextSearch);

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextSearch.getWindowToken(), 0);

如果要显示:

EditText editTextSearch = (EditText) findViewById(R.id.editTextSearch);
editTextSearch.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

关于android - 当键盘出现时如何滚动整个布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15532389/

相关文章:

java - 在 Android 中使用 SharedPreferences 存储数据

java - 如何使用 Android 从 Firebase 迭代检索数据?

Android:清除编辑文本时清除键盘输入

键盘限制中的Android xml电话号码

android - 如何从软键盘中候选 View 上显示的 Assets 中读取文本字典

android facebook 授权 : onActivityResult not called

android - 登录页面中的水平线

android - 数据库输出到 EditText

android - 如何将 EditText 添加到 DialogFragment?

android - 允许输入字母的数字软键盘