2016-08-29 2 views
0

Ich habe ein einfaches GridLayout:Android Grid fill_horizontal geht Off-Screen-

<GridLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:columnCount="2" 
    android:rowCount="1" > 

    <TextView 
     android:layout_column="0" 
     android:layout_row="0" 
     android:text="Label"/> 

    <EditText 
     android:inputType="text" 
     android:layout_column="1" 
     android:layout_row="0" 
     android:text="asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf" 
     android:layout_gravity="fill_horizontal"/> 
</GridLayout> 

jedoch dies die EditText bewirkt, dass der Bildschirm verlängern ab, wie aus der IDE unten (Bild gesehen werden, aber es macht das gleiche, wenn auf einem Gerät laufen).

enter image description here

Es scheint, dass die EditText tatsächlich die volle Breite des Bildschirms ist eher als die Breite der GridLayout Zelle, weshalb es Off-Screen wird. Was ist falsch im Layout passiert, um dies zu verursachen?

+1

http://stackoverflow.com/questions/30845440/edittext-getting-out-of-gridlayout siehe diese – KrishnaJ

Antwort

0

Ich bin mir nicht sicher, warum Sie GridView für den Fall benötigen, vielleicht wissen Sie besser als ich, aber Sie könnten etwas Nützliches für Sie in diesem Beitrag Gridview with two columns and auto resized images finden.

In Ihrem Fall GridView hat 2 Spalten und in jedem von ihnen haben Sie Ansichten, die keine Werte für Breite und Höhe params gesetzt haben und in diesem Fall Android ist sie für wrap_content ausgenommen.

Wenn TextView und EditText layout_width = "wrap_content" haben, werden sie selbst um eine Zeile erweitert, bis sie den gesamten Inhalt umbrechen. Deshalb gehen Sie außerhalb des Telefonbildschirms.

dieses xml Versuchen Sie, und Sie werden das erwartete Verhalten sehen:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:columnCount="2" 
android:rowCount="1"> 
<TextView 
    android:layout_width="20dp" 
    android:layout_height="wrap_content" 
    android:layout_columnWeight="0.5" 
    android:layout_column="0" 
    android:text="Label with some long text event more text"/> 
<EditText 
    android:layout_width="50dp" 
    android:layout_height="wrap_content" 
    android:layout_columnWeight="1.5" 
    android:inputType="textMultiLine" 
    android:layout_column="1" 
    android:text="Some really long text here and more and more and more .... " 
    android:layout_gravity="fill_horizontal"/> 

Was wir tun, ist hier nur setzen einige hartcodierte Werte Ihren Kindern (Textview und EditText), über sie android : layout_width-Attribute, und geben Sie ihnen außerdem das Attribut android: layout_columnWeight. Dies wird einige Proportionen Ihrer Spalten einstellen (spielen Sie mit diesem Wert, nur um sie für Ihre Bedürfnisse einzustellen).

Mit EditText machen wir auch etwas kleines (Android: inputType = "textMultiLine"), nur um sicherzustellen, dass Ihr Text in mehrere Zeilen gewickelt wird.

BTW: Wenn Sie einige Eingabeformulare machen, werde ich Ihnen vorschlagen, andere ViewGroups wie LinearLayout dafür zu verwenden.

Danke alle Fragen pls kommentieren.

+0

Vielen Dank für Ihre Antwort. Das Beispiel wurde reduziert, um sich auf das Problem zu konzentrieren, weshalb es zu einfach ist. Auf die Lösung wurde im Kommentar zu der Frage hingewiesen, die layout_width auf 0dp setzen sollte. – jgm

+0

Ich bin mir nicht sicher, warum Sie mir -1 für diese Antwort geben, wenn Sie dasselbe tun, um das Problem zu lösen (Einstellung 0dp auf Ihre Breite attr), aber irgendwie kann ich nichts dagegen tun. Meine Antwort ist nicht falsch, eine negative Bewertung zu erhalten – Sniper

+0

Ich habe Ihre Antwort nicht als korrekt ausgewählt, da sie feste Breiten verwendet, die nicht das erforderliche Ergebnis liefern würden, um die Breite des Bildschirms zu füllen, aber nicht von der Kante fallen. – jgm