当软键盘打开时如何滚动到底部scrollView

时间:2015-11-05 07:30:24

标签: android scrollview android-softkeyboard

当编辑文本请求焦点和软键盘打开时,我需要将scrollView滚动到底部。 这是我的xml代码:

<ScrollView
    android:id="@+id/transfer_scroller"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blue_500"
    android:fillViewport="true"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"> 
        <android.support.v7.widget.CardView
            android:id="@+id/cv_transfer_senderLayout"
            style="@style/CardViewStyle.Transaction">
            <LinearLayout
                android:id="@+id/ll_selectRec"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
            </LinearLayout>
        </android.support.v7.widget.CardView>
        <android.support.v7.widget.CardView
            android:id="@+id/cv_transfer_receiverLayout"
            android:visibility="gone"
            android:layout_below="@id/cv_transfer_senderLayout"
            style="@style/CardViewStyle.Transaction">
            <LinearLayout
                android:id="@+id/transfer_layout_ll_receivers"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                >
                </LinearLayout>
        </android.support.v7.widget.CardView>
        <android.support.v7.widget.CardView
            android:id="@+id/cv_transfer_setAmount"
            android:visibility="gone"
            android:layout_below="@id/cv_transfer_receiverLayout"
            style="@style/CardViewStyle.Transaction">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                >
                <EditText
                        android:id="@+id/transfer_layout_et_money"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal|center_vertical"
                        android:digits="0123456789"
                        android:hint="@string/hint_ed_ll_money"
                        android:inputType="phone"
                        android:gravity="center"
                        android:maxLength="7"
                        android:singleLine="true"
                        android:textColor="@color/gray_400"
                        android:textSize="@dimen/font_summ" >
                    </EditText>
                    </LinearLayout>
        </android.support.v7.widget.CardView>
         </RelativeLayout>
</ScrollView>

这是我如何尝试滚动到底部:

private void scrollDown(){
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mScrollView.scrollTo(0, mScrollView.getBottom());
                Log.v("55555", "scrollDown");
            }
        }, 50);
    }

mEditAmount.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                scrollDown();
            }
        });

但这并没有帮助。键盘打开并覆盖其余布局... 任何想法?

1 个答案:

答案 0 :(得分:0)

我不确定您的问题是什么,是滚动视图无法到达底部还是您不希望软键盘覆盖您的滚动视图?

对于第一个问题,您可以在处理程序中尝试:

mScrollView.fullScroll(ScrollView.FOCUS_DOWN); 

或者您可以像这样更改代码:

if (scroll == null || inner == null) {
  return;
}

int offset = inner.getMeasuredHeight() - scroll.getHeight();  

if (offset < 0) {
  offset = 0;
}

scroll.scrollTo(0, offset);

如果您不想使用覆盖布局的软键盘,可以试试这些方法。

第一种方式:在OnCreate()中,在“setContentView”之前编写代码:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
第二种方式:在AndroidManifest.xml的“活动”中写下这个:

android:windowSoftInputMode="adjustPan"