当键盘显示时,Android会将整个屏幕滚动到某个点

时间:2016-03-23 11:31:18

标签: android xml layout xamarin

我有一个带登录屏幕的Android应用程序(屏幕截图1),登录屏幕有3个主要视图:用户名和密码输入以及登录按钮。我希望当显示键盘时可以看到所有这三个(向上滚动整个屏幕/视图),其余部分可以移出屏幕或被键盘阻挡。

我已经阅读了大部分关于此类似的堆栈溢出帖子,但大多数人都说要使用android:windowSoftInputMode="adjustResize"android:windowSoftInputMode="adjustPan"或两者兼而有之,我已经尝试了它们和{{1的一些组合但是没有用。最接近我想要的结果是使用stateVisible(截图2)。

登录屏幕布局:

adjustPan

屏幕截图1: Login screen

屏幕截图2 登录屏幕,键盘显示为<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/login_view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/primary" android:paddingLeft="16dp" android:paddingRight="16dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal"> <!--Language select--> <include android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" layout="@layout/lang_select" /> <!--Text: "Sign in"--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sign in" android:textAlignment="center" android:textAllCaps="true" android:padding="24dp" android:textStyle="bold" android:textColor="@android:color/white" android:textSize="20sp" /> <!--google+ register button--> <LinearLayout android:id="@+id/btn_google_login" android:layout_width="match_parent" android:layout_height="36dp" android:layout_gravity="right" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" style="@style/MyTheme.Button.Red"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_google_plus" android:layout_marginRight="8dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:text="Sign in with Google+" android:textSize="16dp" /> </LinearLayout> <!--Divider ("OR")--> <include layout="@layout/divider" /> <!--Form--> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"> <android.support.design.widget.TextInputLayout android:id="@+id/login_username_input" android:layout_width="match_parent" android:layout_height="84dp" android:padding="0dp" style="@style/MyTheme.TextInputLayout" app:hintTextAppearance="@style/MyTheme.TextInputLayout.Activated"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/username" android:textColor="@android:color/white" android:inputType="text" android:imeOptions="actionNext" /> </android.support.design.widget.TextInputLayout> <android.support.design.widget.TextInputLayout android:id="@+id/login_password_input" android:layout_width="match_parent" android:layout_height="84dp" android:padding="0dp" style="@style/MyTheme.TextInputLayout" app:hintTextAppearance="@style/MyTheme.TextInputLayout.Activated"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/password" android:inputType="textPassword" android:textColor="@android:color/white" /> </android.support.design.widget.TextInputLayout> <!--Login button--> <LinearLayout android:id="@+id/btn_login" android:layout_width="match_parent" android:layout_height="36dp" android:layout_gravity="right" style="@style/MyTheme.Button.Empty"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_user_plus" android:layout_marginRight="8dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:text="Sign in" android:textSize="16sp" /> </LinearLayout> <!--"Forgot password"--> <TextView android:id="@+id/btn_forgot_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="14sp" android:text="@string/forgot_password" android:gravity="center_horizontal" android:padding="8dp" android:clickable="true" android:background="?android:attr/selectableItemBackground" /> </LinearLayout> </LinearLayout> <!--"Register a new account"--> <TextView android:id="@+id/btn_register_here" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="16dp" android:clickable="true" android:background="?android:attr/selectableItemBackground" android:padding="8dp" android:textColor="@android:color/white" android:textSize="14sp" android:text="@string/register_here" /> <!--For using snackbar--> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" android:id="@+id/login_coord_layout" /> </RelativeLayout> 。整个屏幕向上移动了一点,因此密码输入将在键盘上方。我想更全面地移动整个视图,以便无论哪个文本输入字段具有焦点,登录按钮都是可见的。 Login screen with keyboard

2 个答案:

答案 0 :(得分:0)

在Java代码中尝试这个

       getActivity().getWindow()
            .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

答案 1 :(得分:0)

使用scrollviewadjustPan将您的父视图设为adjustResize,然后尝试。虽然它不会显示你的整个视图,但它只会滚动以显示你的可控焦点。

<ScrollView>
<RelativeLayout>// and so on</RelativeLayout>
</ScrollView>
希望这会有所帮助。