2016-03-23 17 views
0

ログイン画面(スクリーンショット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> 

スクリーンショット1: Login screen

スクリーンショット2:adjustPanで示すキーボードでログイン画面。画面全体が少し上に移動したので、パスワード入力はキーボードよりも上になります。どのようなテキスト入力フィールドにフォーカスがあっても、ログインボタンが表示されるように、ビュー全体をさらに移動したいと思います。 Login screen with keyboard

+0

実際に達成するのはかなり難しいです。しかし、IMEエディタが表示されている場合は、IMEエディタで状態の変化を聞き、次にスクロールビュー内に全体のビューを追加し、ビューの高さを画面の1/3にする。すぐに回答を投稿してくれるでしょう。 –

+0

androidを使用しているとどうなりますか?windowSoftInputMode = "adjustResize"?私はそれがあなたの問題を解決するかもしれないと思います。 –

+0

@PravinDivraniya何も表示されず、フォーカスのあるビューでさえキーボードでブロックされます。多分私のレイアウトのためですか? –

答えて

0

でこれを試すには、adjustPanまたはadjustResizescrollviewにあなたの親ビューを設定してみてください。あなたの全体の視点を表示することはできませんが、フォーカスできるコントロールを表示するためにスクロールします。

<ScrollView> 
<RelativeLayout>// and so on</RelativeLayout> 
</ScrollView> 

願っています。

+0

フォーカスされたコントロールが既に表示されています。ユーザー名をクリックすると、スクロールする必要はありません。パスワードをクリックすると、パスワードフィールドが表示されるように少しスクロールします。 –

+0

遅れて受諾:) – KDeogharkar

+0

はい、私の未解決の質問を確認しました。 (カスタムスクロールビューを作成した)あなたの答えに似た何かを使って、望みの結果を得ました。あなたの答えは正しい方向に私を入れてくれました。 –

0

Javaコード

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

これは、マニフェストのプロパティを設定するのと同じではありませんか? –

関連する問題