ログイン画面(スクリーンショット1)を持つアンドロイドアプリがあり、ログイン画面にはユーザー名とパスワードの入力とログインボタンの3つのメイン画面があります。キーボードが表示されているとき(画面全体をスクロール/上に表示)、残りの部分は画面外に移動したり、キーボードでブロックしたりすると、3つすべてが表示されます。Androidはキーボードが表示されたときに特定のポイントまでスクロールする
私はこのことについて同様のスタックオーバーフローの記事のほとんどを読んだことがあるが、それらのほとんどはandroid:windowSoftInputMode="adjustResize"
、android:windowSoftInputMode="adjustPan"
またはその両方を使用するように言うと、私はstateVisible
で彼らといくつかの組み合わせの両方を試してみましたが、どれも仕事。私が得た結果に最も近いものは、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>
スクリーンショット2:adjustPan
で示すキーボードでログイン画面。画面全体が少し上に移動したので、パスワード入力はキーボードよりも上になります。どのようなテキスト入力フィールドにフォーカスがあっても、ログインボタンが表示されるように、ビュー全体をさらに移動したいと思います。
実際に達成するのはかなり難しいです。しかし、IMEエディタが表示されている場合は、IMEエディタで状態の変化を聞き、次にスクロールビュー内に全体のビューを追加し、ビューの高さを画面の1/3にする。すぐに回答を投稿してくれるでしょう。 –
androidを使用しているとどうなりますか?windowSoftInputMode = "adjustResize"?私はそれがあなたの問題を解決するかもしれないと思います。 –
@PravinDivraniya何も表示されず、フォーカスのあるビューでさえキーボードでブロックされます。多分私のレイアウトのためですか? –