6

Facebook アプリと同様のログイン アクティビティ/レイアウトを備えたアプリを作成したいと考えています。つまり、テキスト フィールドがフォーカスされている場合、ソフト キーボードはビュー全体を押し上げますが、ロゴを押しつぶすことはありません。私は試しandroid:windowSoftInputMode="adjustPan/adjustResize"ましたが、それは私が達成しようとしていたものではありません。

SOでこの質問を見つけたので、おそらく物事が明確になりますが、問題の解決策はありません。

さまざまなレイアウト タイプも試しましたが、ソフト キーボードはフォーカスされた < EditText > を押し上げるだけです。私を案内してください。

アップデート:

ここに画像の説明を入力ここに画像の説明を入力

ここに画像の説明を入力ここに画像の説明を入力

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#DDDDDD">
    <RelativeLayout 
        android:height="0dp"
        android:layout_weight="1"
        android:layout_height="0dp"
        android:layout_width="fill_parent"
        android:background="#ff0000">
        <ImageView
            android:layout_centerVertical="true"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"></ImageView>
    </RelativeLayout>
    <RelativeLayout 
        android:height="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:background="#00ff00">
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#0000ff"
        android:height="0dp" >

        <Button
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="Log in" 
            />

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:padding="4dp"
            android:hint="password"
            android:inputType="textPassword" >
        </EditText>

        <EditText
            android:id="@+id/editText1"
            android:hint="login"
            android:padding="4dp"
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true" ></EditText>
    </RelativeLayout>

</LinearLayout>

UPDATE作業ソリューション ここにxmlファイル全体を貼り付けることはできませんが、構造は十分なはずです。Gabe Sechanの回答に基づいています。

Layout{
   Layout top weight 1
   Layout mid weight 1
   Layout bot weight 1
}

子レイアウトは次のように設定されています:

android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"  // should be changed accordingly to your layout design. 

そして、これがアクティビティ(キーボードのアップ/ダウン)のJavaコードです:

View top, mid, bot;
    final View activityRootView = findViewById(R.id.loginLayout);
            activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
                    new OnGlobalLayoutListener() {
                        @Override
                        public void onGlobalLayout() {
                            int heightDiff = activityRootView.getRootView()
                                    .getHeight() - activityRootView.getHeight();
                            if (heightDiff > 100) { //keyboard up
                                mid.setVisibility(View.INVISIBLE);
                                top.setLayoutParams(new TableLayout.LayoutParams(
                                        LayoutParams.MATCH_PARENT, 0, 0f));
                                bot.setLayoutParams(new TableLayout.LayoutParams(
                                        LayoutParams.MATCH_PARENT, 0, 1f));
                                
                            } else {// keyboard down
                                // v.setVisibility(View.VISIBLE);
                                mid.setVisibility(View.VISIBLE);
                                top.setLayoutParams(new TableLayout.LayoutParams(
                                        LayoutParams.MATCH_PARENT, 0, 2f));
                                bot.setLayoutParams(new TableLayout.LayoutParams(
                                        LayoutParams.MATCH_PARENT, 0, 3f));
                                
                            }
                        }
                    });
   
       

キーボードを上に向けると、キーボードを上に向けるデザインに合わせて重みを変更する必要があり、キーボードを下に向けると、デフォルト (xml/java で設定したレイアウト) に戻す必要があります。2.3.x 以降でコードをテストしました。android:inputType="textFilter"login&password に使用して、EditText入力の提案を削除し、ピクセルを節約することを忘れないでください。アクティビティのマニフェストandroid:windowSoftInputMode="adjustResize|stateHidden"stateHiddenアクティビティがロードされたときにキーボードが起動しないようにするために使用されます。それが役に立てば幸い。幸運を。

4

2 に答える 2

8

彼らは、相対レイアウト、adjustResize、および android:layout_centerVertical を使用してそれを行っています。基本的に、メイン レイアウトにはリニア レイアウトがあり、その中に 3 つの均等に重み付けされた相対レイアウトがあります。それぞれが 0 dp の高さに設定されているため、画面の同じ 3 分の 1 を占めます。上部の RelativeLayout には、垂直方向の中央に配置されたロゴが保持されます。中央にはログイン フィールドとボタンがあり、上下に中央揃えになっています。一番下には著作権テキストが保持され、下に揃えられます。最終結果は、キーボードが表示されると、3 つの相対的なレイアウトがサイズ変更されて、新しい画面の 1/3 を占めるようになります。次に、それらの要素が新しい画面の中央に配置されます。

これを取得するには、adjustResize ウィンドウ モードが必要であることを忘れないでください。パンを使用すると、上に移動するだけで、ロゴが中央からスクロールされます。

于 2013-04-17T03:36:23.243 に答える
0

Eclipse で [ファイル]、[新規]、[その他] の順に移動し、次のウィザードで [Android アクティビティ] を選択し、次のページでアクティビティのリストから [LoginActivity] を選択します。これには、あなたが話している正確なレイアウトがあり、それをフレームワークとして使用できます。ScrollView を使用して、探している効果を実現します。

于 2013-04-17T04:31:47.420 に答える