Chcę utworzyć aplikację z aktywnością logowania/układem podobną do tej, którą ma aplikacja Facebook. Mam na myśli to, że gdy pole tekstowe jest skupione, miękka klawiatura przesuwa cały widok, ale nie zgniata logo. Próbowałem android:windowSoftInputMode="adjustPan/adjustResize"
, ale to nie jest to, co próbowałem osiągnąć.Tworzenie układu logowania jak w aplikacji Facebook dla Androida
Znalazłem this pytanie na SO być może to uczyni rzeczy jaśniejsze, ale nie ma rozwiązania problemu.
Próbowałem także różnych typów układów, ale miękka klawiatura tylko naciska skoncentrowany < EditText> w górę. Proszę, prowadź mnie.
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 roztwór roboczy nie mogę wkleić tutaj cały plik xml, ale struktura ta powinna być na tyle . Na podstawie odpowiedzi Gabe Sechan.
Layout{
Layout top weight 1
Layout mid weight 1
Layout bot weight 1
}
układy dziecko ma wartość:
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" // should be changed accordingly to your layout design.
A oto kod Java dla aktywności (klawiatura w górę/w dół):
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));
}
}
});
Na klawiaturze aż trzeba zmienić wagi wchodzące w skład konstrukcji klawiatury i na klawiaturze zmieniają się z powrotem na domyślne (układ ustawiony za pomocą xml/java). Testowałem kod w wersji 2.3.x i nowszej. I nie zapomnij użyć android:inputType="textFilter"
dla logowania & hasło, aby usunąć sugestie dotyczące wprowadzania i zapisać kilka pikseli. W swoim manifeście dla działania android:windowSoftInputMode="adjustResize|stateHidden"
. stateHidden
jest używany tak, aby klawiatura nie była podniesiona po załadowaniu aktywności. Mam nadzieję, że to pomoże. Powodzenia.
Czy możesz zobaczyć moją aktualizację. W części aplikacji na Facebooku, która zawiera pola logowania, nie jest zmieniana wielkość, ale zmienia się górny i dolny element. W moich polach aplikacji scalam.Pomóż mi proszę. Napisałem xml na podstawie twojej odpowiedzi. Nowy na Androida. –
W układzie na facebooku, ponieważ dno jest prawie całkowicie puste, można nadać mu znacznie mniejszą wagę niż sekcja pola logowania, pozwalając mu zwiększyć kosztem innych. Możesz grać z wagami z 3 sekcji, aby dostać się tam, gdzie chcesz. Prawdopodobnie osiągnę też wysokość EditTexts i przycisków wrap_content, aby zaoszczędzić kilka pikseli. –
Dzięki, gra z ciężarem rozwiązanym jest tym, czego potrzebowałem. Czy wiesz, jak programowo zmienić wagę widoku/układu? –