我有一个带登录屏幕的Android应用程序(屏幕截图1),登录屏幕有3个主要视图:用户名和密码输入以及登录按钮。我希望当显示键盘时可以看到所有这三个(向上滚动整个屏幕/视图),其余部分可以移出屏幕或被键盘阻挡。
我已经阅读了大部分关于此类似的堆栈溢出帖子,但大多数人都说要使用android:windowSoftInputMode="adjustResize"
,android:windowSoftInputMode="adjustPan"
或两者兼而有之,我已经尝试了它们和{{1的一些组合但是没有用。最接近我想要的结果是使用stateVisible
(截图2)。
登录屏幕布局:
adjustPan
屏幕截图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>
。整个屏幕向上移动了一点,因此密码输入将在键盘上方。我想更全面地移动整个视图,以便无论哪个文本输入字段具有焦点,登录按钮都是可见的。
答案 0 :(得分:0)
在Java代码中尝试这个
getActivity().getWindow()
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
答案 1 :(得分:0)
使用scrollview
或adjustPan
将您的父视图设为adjustResize
,然后尝试。虽然它不会显示你的整个视图,但它只会滚动以显示你的可控焦点。
<ScrollView>
<RelativeLayout>// and so on</RelativeLayout>
</ScrollView>
希望这会有所帮助。