2010-11-21 2 views
13

Ich habe ein Problem mit dem Rendern einer ScrollView. Das Layout besteht im Wesentlichen aus Kopf- und Fußzeile mit einem Scrollview in der Mitte. Die Idee ist, dass, wenn die Bildschirmtastatur für den Inhalt EditText aktiviert ist, das Bild gescrollt werden kann, wenn die Höhe des Bildes länger ist als die mittlere Ansicht.Android ScrollView fügt zusätzliche Padding oben und unten von Kind Bildansicht

Beim Testen des Layouts habe ich festgestellt, dass auf meinem Android-Handy (Xperia X10 Android 1.6) ein ganzer Haufen Padding oben und unten im ImageView hinzugefügt wurde.

Ich würde mich über Vorschläge freuen, wie ich das verhindern kann.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- Header --> 
    <RelativeLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF"> 
     <TextView 
      android:text="Share your photo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="left"/> 
     <Button 
      android:id="@+id/btnStack" 
      android:text="Stacks" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true"/> 
    </RelativeLayout> 
    <!-- End Header --> 


    <!-- Body --> 
    <ScrollView 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:padding="5px" 
     android:background="#CCCCCC"> 
     <ImageView 
      android:id="@+id/imgPreview" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 
    </ScrollView> 
    <!-- End Body --> 


    <!-- Footer --> 
    <RelativeLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" 
     android:layout_alignParentBottom="true"> 
     <EditText 
      android:id="@+id/caption" 
      android:text="Type your caption" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/caption" 
      android:background="#CCCCCC"> 
      <Button 
       android:id="@+id/btnUpload" 
       android:text="Share" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1"/> 
      <Button 
       android:id="@+id/btnCancel" 
       android:text="Cancel" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1"/> 
     </LinearLayout> 

    </RelativeLayout> 
    <!-- End Footer --> 

</LinearLayout> 

Antwort

31

fand ich nach einigen Experimenten, die die folgenden Syntax zu meinem Java-Code hinzugefügt, das Problem gelöst:

imgPreview.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
    imgPreview.setAdjustViewBounds(true); 
+1

Irgendeine Erklärung warum? –

+0

Ich bekomme dieses Problem auf einem RelativeLayout in einer ScrollView. Das Anpassen von adjustViewBounds in meinem XML löst es nicht. Gibt es dafür einen Grund? Ich habe bemerkt, dass die oben hinzugefügte Füllung die Höhe der Statusleiste ist und die Polsterung im unteren Bereich dieselbe Höhe wie die Navigationsleiste –

+0

hat mir geholfen. Vielen Dank. – Gereltod

9
android:fillViewport="true" 
android:fadingEdge="none" 

diese Eigenschaften in der Scrollview verwenden.

+0

Hallo, habe es ausprobiert, aber keiner schien einen Unterschied zu machen. Wir sprechen nicht über ein paar Pixel. Es sind ein paar hundert. Selbst wenn ich die Pixelbreite und -höhe von ImageView festlege, funktioniert es immer noch nicht korrekt. –

+0

arbeitete für mich tanx – Siddhesh

+0

Die beste Antwort! 'fillViewport' führt den Job aus und erlaubt dem untergeordneten Layout, den angeforderten Platz einzunehmen. – sud007

21

gerade hinzufügen, das folgende Attribut zu Ihrem Image XML-Beschreibung die Arbeit machen:

android:adjustViewBounds="true" 
0

Sie können marginTop und bottom auf eine negative Zahl für das Kind wie folgt setzen

<HorizontalScrollView 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:background="#ffffff" 
     android:overScrollMode="never" 
     android:scrollbars="none"> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" 
      android:layout_marginBottom="-10dp" 
      android:layout_marginTop="-10dp"> 


    </LinearLayout> 

</HorizontalScrollView> 
Verwandte Themen