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
アクティビティがロードされたときにキーボードが起動しないようにするために使用されます。それが役に立てば幸い。幸運を。