2010-11-16 13 views
11

Eigentum android: layout_gravity = "clip_vertical | horizontal" tut nach dem, wie in der SDK-Dokumentation erwähnt:Was ist Android: layout_gravity = "clip_vertical" genau

zusätzliche Option, die müssen eingestellt werden kann obere und/oder untere Kanten von das Kind an seinen Grenzen Begrenzungsrahmen abgeschnitten. Der Clip basiert auf der vertikalen Schwerkraft : eine obere Schwerkraft wird Clip die untere Kante, eine untere Schwerkraft wird die obere Kante Clip, und weder wird beide Kanten abschneiden.

aber ich kann nichts davon in meinen Anwendungen

so sehen, was ist der Zweck dieser Eigenschaft genau?

dank

Antwort

19

Kurzfassung:

clip_horizontal und clip_vertical zu den Messungen der Ansicht selbst anwenden, bevor irgendwelche Inhalte (wie beispielsweise das Bild in einem BitmapDrawable) wiedergegeben werden.


Lange Version:

Ich habe in eine ähnliche Verwirrung über clip_horizontal und clip_vertical laufen. (In meinem Fall war es verwandt mit Android: Schwerkraft für ein BitmapDrawable, aber es ist ähnlich genug, um anwendbar zu sein.)

Von der Dokumentation dachte ich, dass etwas wie Android: Schwerkraft = "top | left | clip_vertical" auf a Bitmap würde dazu führen, dass die obere linke Ecke des Bildes in der oberen linken Ecke der Ansicht positioniert wird, und dass, wenn die Bitmap größer als die Ansicht wäre, sie am unteren Rand der Ansicht "abgeschnitten" würde. Zeigen Sie mit anderen Worten nur so viel Bitmap, dass die Ansicht groß genug ist, um sie anzuzeigen. Strecken Sie die Bitmap nicht, sondern zeigen Sie nur, was passt, und lassen Sie den Rest unter die untere Kante reichen.

Das Gegenteil passierte jedoch: Wenn ich clip_vertical eingab, wurde eine große Bitmap vertikal in die Höhe der Ansicht gequetscht.

Nach dem applyDisplay Prüfung() -Methode in der Plattform/Frameworks/core/java/android/view/Gravity.java, ich meinen Fehler erkannte:

Es ist nicht das Bitmap Bild, dass zu gehen wurde abgeschnitten werden, aber die Ansicht - die tatsächliche Größe des Containers das Bild wird letztlich in gerendert.

Einstellung Clip_vertical in meinem Fall bedeutete nicht "Clip das Bild an der unteren Kante," bedeutete "Clip der BitmapDrawable der Ansicht selbst, so dass seine Höhe die Höhe des übergeordneten Containers" ... was dann das Bild verursacht "zerquetscht" werden, da es diese kürzere Höhe füllte. Schwerkraft und android:

Also, das Wichtigste ist, mit Android erinnern layout_gravity dass clip_horizontal und clip_vertical zu den Messungen der Ansicht selbst, bevor die Inhalte (wie meine BitmapDrawable) gerendert gilt.

+0

Vielen Dank für Ihre Erklärung! Es ist, als hätte jemand in einer dunklen Ecke meines Android-Wissens ein Licht angeschaltet. Prost! – SlashG

0

Vielleicht gibt es keinen Effekt, weil horizontal nicht in den android:layout_gravity definiert ist. clip_vertical ist nur eine zusätzliche Eigenschaft, die zusätzlich zu einer Basiseigenschaft verwendet wird.

+0

Es tut mir leid, aber wenn ich es geschrieben habe wie: android: layout_gravity = "top | clip_vertical" Ich sehe immer noch nichts geändert –

+0

Sie müssen Ihre Ansicht in einer Situation, wo es tatsächlich schneiden würde. Meistens passiert dies, wenn es mit dem Fenstermanager verwendet wird (welche Fenster werden mit dem Bildschirm abgeschnitten usw.). – hackbod

+0

Können Sie mehr erklären? –

0

Flag zum Abschneiden der Kanten des Objekts an seinem Container entlang der horizontalen Achse.

check this