2016-04-04 20 views
1

Ich programmiere eine Android-App, die einen ersten Bildschirm hat, der gut funktioniert. Das Problem besteht darin, dass bei der Eingabe, eine Taste, um den Text überlappt, wie Sie hier sehen können:Android-Taste überlappende Textlayout bei der Eingabe

enter image description here

Hier ist der Code:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scroller" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" > 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:context="com.app.InitialActivity" 
     tools:showIn="@layout/activity_initial"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Welcome to app" 
      android:layout_marginTop="50dp" 
      android:id="@+id/textViewTitle" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" /> 

     <EditText 
      android:id="@+id/editTextEmail" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/textViewTitle" 
      android:layout_marginLeft="15dp" 
      android:layout_marginTop="50dp" 
      android:layout_marginRight="15dp" 
      android:inputType="textEmailAddress" 
      android:textSize="17sp" 
      android:hint="Enter your email" 
      android:ems="10" /> 

     <EditText 
      android:id="@+id/editTextPassword" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/editTextEmail" 
      android:layout_marginLeft="15dp" 
      android:layout_marginTop="5dp" 
      android:layout_marginRight="15dp" 
      android:inputType="textPassword" 
      android:textSize="17sp" 
      android:hint="Enter your password" 
      android:ems="10" /> 

     <Button 
      android:id="@+id/loginButton" 
      android:text="Login" 
      android:layout_centerVertical="true" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/editTextPassword" 
      android:layout_marginLeft="15dp" 
      android:layout_marginTop="25dp" 
      android:layout_marginRight="15dp" /> 

     <Button 
      android:id="@+id/registerButton" 
      android:text="Register" 
      android:layout_centerVertical="true" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/loginButton" 
      android:layout_marginLeft="15dp" 
      android:layout_marginTop="20dp" 
      android:layout_marginRight="15dp" /> 

     <Button 
      android:id="@+id/forgotPasswordButton" 
      android:text="Forgot Password?" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="35dp" /> 

    </RelativeLayout> 
</ScrollView> 

Jede Hilfe wird sehr geschätzt, auch dank voraus.

Antwort

1

Als ich mit der Android-Entwicklung anfing, war ich auch gewohnt, mit RelativeLayout zu arbeiten (ich bin kein Experte, ich erzähle nur meine Erfahrung). Am Anfang sieht es nach dem am besten geeigneten Layout aus, aber eine Sache, die Sie beachten sollten, ist: Lassen Sie das System sich um die Dinge kümmern, mit anderen Worten, RelativeLayout ist völlig abhängig von dem, was Sie sagen, also mit Sie denken nicht an eine neue Bildschirmauflösung oder an eine alte, das ganze Layout könnte zu einem Chaos werden.

Das Ziel ist, sagen Sie dem Android, was Sie wollen, ohne bestimmte Parameter zu verwenden (oder zumindest versuchen, diese zu vermeiden). Ich stimme @klaymen zu: Für unterschiedliche Ausrichtungen sollten Sie mehr als nur ein Layout verwenden.

Nur ein Beispiel finden Sie in der unten stehenden Codes (es ist ein Remake des Codes ist):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.app.InitialActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Welcome to app" 
     android:id="@+id/textViewTitle" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <EditText 
      android:id="@+id/editTextEmail" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textEmailAddress" 
      android:textSize="17sp" 
      android:hint="Enter your email" 
      android:ems="10" /> 

     <EditText 
      android:id="@+id/editTextPassword" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:textSize="17sp" 
      android:hint="Enter your password" 
      android:ems="10" /> 

     <Button 
      android:id="@+id/loginButton" 
      android:text="Login" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/editTextPassword" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="bottom" 
     android:weightSum="2" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/registerButton" 
      android:text="Register" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1"/> 

     <Button 
      android:id="@+id/forgotPasswordButton" 
      android:text="Forgot Password?" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1"/> 
    </LinearLayout> 
</LinearLayout> 

Es gibt eine kleine Dinge hier, die importants sind und könnten Sie viel in den nächsten Versuchen helfen (sucht Diese Eigenschaften im obigen Code):

  • android: layout_gravity;

    Standardschwerkraftkonstante, die ein Kind an seine Eltern liefert. Definiert, wie die untergeordnete Ansicht auf der X- und Y-Achse innerhalb ihres umschließenden Layouts positioniert werden soll.

  • android: schwerkraft;

    Gibt an, wie ein Objekt seinen Inhalt sowohl auf der X- als auch auf der Y-Achse innerhalb seiner eigenen Grenzen positionieren soll.

  • Android: GewichtSumme;

    Definiert die maximale Gewichtssumme. Wenn nicht angegeben, wird die Summe berechnet, indem das layout_weight aller untergeordneten Elemente hinzugefügt wird.Dies kann zum Beispiel verwendet werden, um einem einzelnen Kind 50% des gesamten verfügbaren Speicherplatzes zu geben, indem es ihm eine Layout-Gewichtung von 0,5 gibt und die Gewichtungssumme auf 1,0 setzt. Muss ein Gleitkommawert wie "1.2" sein. Dies kann auch eine Referenz auf eine Ressource (in der Form "@ [package:] type: name") oder ein Designattribut (in der Form "? [Package:] [type:] name") sein, das einen Wert enthält Art. Dies entspricht dem globalen Attribut Ressourcensymbol weightSum.

  • android: layout_weight;

    LinearLayout unterstützt auch die Zuweisung einer Gewichtung für einzelne untergeordnete Elemente mit dem Attribut android: layout_weight. Dieses Attribut weist einer Ansicht einen "Wichtigkeitswert" zu, der angibt, wie viel Speicherplatz auf dem Bildschirm belegt werden soll. Mit einem größeren Gewichtungswert kann er erweitert werden, um den verbleibenden Platz in der übergeordneten Ansicht zu füllen. Untergeordnete Ansichten können einen Gewichtungswert angeben, und dann wird verbleibender Speicherplatz in der Ansichtsgruppe den Kindern im Verhältnis zu ihrem deklarierten Gewicht zugewiesen. Standardgewicht ist Null.

Ich hoffe, dass Ihnen hilft. Noch eine Sache, nutzen Sie Ihre IDE dafür, generieren Sie einige Beispiele und schauen Sie, wie sie funktionieren (sie waren früher dynamisch), ich bin mir ziemlich sicher, dass Sie mit dieser Übung viel lernen werden.

Viel Glück!

+0

du bist ein lebensretter, mein freund! Ihre Lösung funktioniert perfekt. Ich dachte, ich wäre mit ScrollViews auf dem richtigen Weg, aber ich sehe den Punkt sofort. Danke nochmal Kumpel! –

1

Eine Möglichkeit, dieses Problem zu lösen, wäre die Verwendung von android:windowSoftInputMode="adjustNothing" in Ihrem Aktivitäts-Tag.

<activity name="YourActivity" 
     android:windowSoftInputMode="adjustNothing"> 
     ... 
</activity> 

jedoch bedenken, dass in diesem Fall der Register-Taste von der Tastatur abgedeckt werden.

+0

Vielen Dank für Ihre Antwort Kumpel, aber, wo sollte ich die Aktivität Tag? Ich verwende kein solches Tag –

+1

überprüfen Sie Ihre AndroidManifest.xml, finden Sie die gewünschte Aktivität und platzieren Sie diese Zeile wie im Beispiel. –

+0

Danke Kumpel, es funktioniert für den Standard-Modus, aber immer noch nicht richtig verhalten, wenn ich das Gerät drehen; irgendein Hinweis? –

1

Sie haben jede Ansicht relativ zu einer anderen auf der Seite festgelegt. Sie sollten alle Elemente auf der Seite relativ zu einem Element oder relativ zum Hauptlayout platzieren. Dieses Problem liegt an der Verwendung von "Relatives Layout". Eine andere Option ist ein einfacheres Layout wie das lineare Layout innerhalb des relativen Layouts, um die Dinge zu vereinfachen.

+0

Danke für die Antwort, Kumpel. Ich versuche vor allem, das Layout zu reorganisieren, nachdem ich das Gerät in irgendeine Richtung gedreht habe. Weißt du, was ist der beste Layout-Typ/Weg, um dies zu erreichen? –

+0

@stack man Ich denke, der beste Weg dafür ist separate Layouts für Hoch- und Querformat zu erstellen. Dies ist einfach in Android Studio. – klaymen

+1

http://stackoverflow.com/questions/28815769/android-studio-creating-landscape-layouts. Und http://stackoverflow.com/questions/4858026/android-alternate-layout-xml-for-landscape-mode sind über dieses Thema. – klaymen

Verwandte Themen