Ich möchte eine App mit einer Login-Aktivität/Layout ähnlich wie die Facebook-App hat. Was ich meine ist, wenn das Textfeld fokussiert ist, drückt die Soft-Tastatur die gesamte Ansicht nach oben, ohne jedoch ein Logo zu quetschen. Ich habe versucht android:windowSoftInputMode="adjustPan/adjustResize"
, aber es ist nicht das, was ich versuchte zu erreichen.Erstellen von Login-Layout wie in Facebook-App für Android
Ich fand this Frage zu SO vielleicht wird es die Dinge klarer, aber es hat keine Lösung für das Problem.
Ich habe auch verschiedene Layout-Typen ausprobiert, aber es Soft-Tastatur schiebt nur den fokussierten < EditText> nach oben. Bitte führen Sie mich.
UPDATE:
<?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 Arbeitslösung ich hier nicht die gesamte XML-Datei einfügen kann, aber die Struktur sollte genug sein . Basiert auf Gabe Sechans Antwort.
Layout{
Layout top weight 1
Layout mid weight 1
Layout bot weight 1
}
Kinder Layouts haben auf:
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" // should be changed accordingly to your layout design.
Und hier ist ein Java-Code für die Aktivität (Tastatur oben/unten):
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));
}
}
});
Auf Tastatur Sie oben ändern müssen Gewichte, die dem Tastatur-Up-Design und der Tastatur entsprechen, werden auf den Standard zurückgesetzt (Layout, das Sie über xml/java eingestellt haben). Ich habe den Code auf 2.3.x und höher getestet. Und vergessen Sie nicht, android:inputType="textFilter"
für den Login & Passwort EditText
's zu verwenden, um Vorschläge zur Eingabe zu entfernen und einige Pixel zu speichern. In Ihrem Manifest für die Aktivität android:windowSoftInputMode="adjustResize|stateHidden"
. stateHidden
wird verwendet, damit die Tastatur beim Laden der Aktivität nicht aktiv ist. Ich hoffe es hilft. Viel Glück.
Können Sie bitte mein Update sehen. Im Facebook-App-Teil, der Login-Felder enthält, wird die Größe nicht geändert, aber die Größe der oberen und unteren Elemente wird geändert. In meiner App werden Felder zusammengeführt.Hilf mir bitte. Ich habe das XML basierend auf deiner Antwort geschrieben. Neu bei Android. –
In der Facebook-Layout, da der Boden fast vollständig leer ist, können Sie es viel weniger Gewicht als die Login-Bereich, so dass es größer auf Kosten der anderen. Sie können mit den Gewichten der 3 Abschnitte spielen, um zu bekommen, wo Sie wollen. Ich würde wahrscheinlich auch die Höhen der EditTexte und Buttons wrap_content machen, um ein paar Pixel zu sparen. –
Danke, spielen mit Gewicht gelöst ist das, was ich brauchte. Wissen Sie, wie Sie das Gewicht einer Ansicht/eines Layouts programmgesteuert ändern können? –