ScrollView abgeschnitten

  • 6 Antworten
  • Letztes Antwortdatum
C

_Coco_

Neues Mitglied
1
Hallo!
Ich bin sowohl hier im Forum als auch in der Android-Entwicklung neu. Ich komme eigentlich aus der iOS-Ecke, soll nun aber eine kleine App für Android basteln. Klappt soweit ganz gut, habe allerdings jetzt ein Problem mit einem ScrollView.

Hier der XML-Code für das ScrollView (innerhalb eines relativen Layouts):

Code:
<ScrollView
          android:id="@+id/scrollView"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent">
        <LinearLayout
            android:id="@+id/panelMessageFiles"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center">
        </LinearLayout>
</ScrollView>
Zur Laufzeit wird das LinearLayout im ScrollView mit x Buttons gefüllt.
Code:
//SQL Abfrage            
String sql = "SELECT strftime('%d.%m.', start_date), strftime('%d.%m.%Y', end_date), reisen_ID FROM reisen2013 WHERE section = 1 ORDER BY start_date";
Cursor result = myDbHelper.query(sql);

LinearLayout layout = (LinearLayout) findViewById(R.id.panelMessageFiles);

//Clear the Layout
layout.removeAllViews();
            
if (result.moveToFirst()) 
{
        int yspacing = 0;
        for (; !result.isAfterLast(); result.moveToNext()) 
        {
              String startDate = null;
              startDate = result.getString(0);
              String endDate = null;
              endDate = result.getString(1);
              int reiseID = Integer.valueOf(result.getString(2).toString());
              
              //Create Buttons      
              Button myButton = new Button(Programme.this);
                   
              LayoutParams lp = new LayoutParams(200, 39);
              myButton.setPadding(0, 0, 0, 0);
              myButton.setLayoutParams(lp);
              myButton.setBackgroundResource(R.drawable.btn2);
              myButton.setY(yspacing);
              myButton.setId(reiseID);
              myButton.setText(startDate+" - "+endDate);
              myButton.setTextSize(12);

              layout.addView(myButton);
              yspacing += 25;
         }
}
Wie gesagt, funktioniert. Allerdings schneidet das ScrollView unten immer den letzten Button ab. Ich habe schon stundenlang gegoogelt und seh' den Wald vor lauter Bäumen nicht mehr, woran das liegen könnte. Vielleicht kann mir jemand hier helfen?

Hier ein Screenshot. Die vier Grafikbuttons sind statisch. Mir geht es in diesem Beispiel um die beiden Buttons da drunter:

screenshot.png
 
Hi,

erstmal ViewGroup.LayoutParams | Android Developers
Special value for the height or width requested by a View. FILL_PARENT means that the view wants to be as big as its parent, minus the parent's padding, if any. This value is deprecated starting in API Level 8 and replaced by MATCH_PARENT.
Nur so als kleiner Tipp ;)

Zeig mal die komplette XML. Du schreibst, dass du innerhalb eines RelativeLayout's bist. Das möchte ich mir gerne mal anschauen...

Desweiteren sagst du hier:
Code:
<LinearLayout
            android:id="@+id/panelMessageFiles"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center">
        </LinearLayout>
bei der höhe wrap_content.
Probier es mal mit match_parent.

Gruß

€dit: Noch ne frage: Kannst du scrollen? Es sieht nämlich so aus, als könntest du scrollen. Eben nur auf einer ganz kleinen ebene :)
 
Danke StefMa für die rasche Antwort.
match_parent ist eines von gefühlten 1.000 Dingen, die ich schon probiert habe, leider ohne Ergebnis. Im Gegenteil, da bekomme ich den Hinweis:
This LinearLayout should use android:layout_height="wrap_content"
Hier noch mal die gesamte XML:

Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/programmLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFEB00" >

      <TextView
          android:id="@+id/ProgrammeLabel"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentTop="true"
          android:layout_centerHorizontal="true"
          android:layout_marginTop="20dp"
          android:text="@string/ProgrammeLabelText" />

     <ImageButton
              android:id="@+id/OsternButton"
              android:layout_width="300dp"
              android:layout_height="30dp"
              android:layout_below="@+id/ProgrammeLabel"
              android:layout_centerHorizontal="true"
              android:layout_marginTop="10dp"
              android:background="@null"
              android:contentDescription="@string/descEasterBtn"
              android:onClick="showEaster"
              android:scaleType="fitXY"
              android:src="@drawable/osternbutton" />

      <ImageButton
          android:id="@+id/PfingstenButton"
          android:layout_width="300dp"
          android:layout_height="30dp"
          android:layout_alignLeft="@+id/OsternButton"
          android:layout_below="@+id/OsternButton"
          android:layout_marginTop="10dp"
          android:background="@null"
          android:contentDescription="@string/descPfingstenBtn"
          android:onClick="showEaster"
          android:scaleType="fitXY"
          android:src="@drawable/pfingstenbutton" />

      <ImageButton
          android:id="@+id/SommerButton"
          android:layout_width="300dp"
          android:layout_height="30dp"
          android:layout_alignLeft="@+id/PfingstenButton"
          android:layout_below="@+id/PfingstenButton"
          android:layout_marginTop="10dp"
          android:background="@null"
          android:contentDescription="@string/descSommerBtn"
          android:onClick="showEaster"
          android:scaleType="fitXY"
          android:src="@drawable/sommerbutton" />
      
      <ImageButton
          android:id="@+id/HerbstButton"
          android:layout_width="300dp"
          android:layout_height="30dp"
          android:layout_alignLeft="@+id/SommerButton"
          android:layout_below="@+id/SommerButton"
          android:layout_marginTop="10dp"
          android:background="@null"
          android:contentDescription="@string/descHerbstBtn"
          android:onClick="showEaster"
          android:scaleType="fitXY"
          android:src="@drawable/herbstbutton" />

      <ScrollView
          android:id="@+id/scrollView"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_alignLeft="@+id/HerbstButton"
          android:layout_below="@+id/HerbstButton">
        <LinearLayout
            android:id="@+id/panelMessageFiles"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center">
        </LinearLayout>
      </ScrollView>

</RelativeLayout>

Scrollen kann ich erst, wenn die Buttons in der Höhe größer sind als der Bildschirm. In dem oben gezeigten Screenshot kann ich NICHT scrollen.
 
Setzte doch bitte trotzdem alles auf match_parent ^^

Probier mal im ScrollView das hier:
Code:
android:fillViewport="true"

Gruß
 
Ja, cool. Der letzte Button ist zumindest nicht mehr abgeschnitten. Dafür ist die Start-Position jetzt nicht mehr oben. Bei der Rubrik "Sommer" allerdings startet er von oben, dafür fehlen unten ca. 4 Buttons. Warum das?

screenshot2.png
screenshot3.png


Hab jetzt Feierabend. Schätze ich melde mich morgen erst mal wieder.

Der ursprüngliche Beitrag von 12:17 Uhr wurde um 12:18 Uhr ergänzt:

Also bei "Sommer" muss man scrollen, da mehr Buttons als der Bildschirm lang ist.
 
Hi,

ich denke mal, dass das android:fillViewport den restlichen Platz annimmt und eben "centert". Wenn du also mehrere einträge hast, wie bei Sommer, dann wird es eben nach oben korrigiert. Beim Herbst bleibt es eben mittig.
Du kannst dir das ganze mal etwas besser anschauen, wenn du die hintergründe setzt. Beispiel das Scrollview auf ROT und LinearLayout auf Blau. Dann kannst du das schön erkennen..

Gruß
 
OK, ich habe es hinbekommen. Bei den Sommer-Buttons wurden nach wie vor immer die letzten paar abgeschnitten. Nach langem Hin- und Hergebastel brachte nur das Weglassen von myButton.setY(yspacing); Abhilfe.

Meine Buttons werden jetzt so generiert:
Code:
Button myButton = new Button(Programme.this);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, 50);
myButton.setLayoutParams(lp);
myButton.setBackgroundResource(R.drawable.btn2);
myButton.setId(reiseID);
myButton.setText(startDate+" - "+endDate);
myButton.setTextSize(12);
layout.addView(myButton);
Mein ScrollView-XML sieht so aus:
Code:
      <ScrollView
          android:id="@+id/scrollView"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:fillViewport="true"
          android:layout_alignLeft="@+id/HerbstButton"
          android:layout_below="@+id/HerbstButton">
        <LinearLayout
            android:id="@+id/panelMessageFiles"
            android:orientation="vertical"
            android:layout_gravity="top"
            android:layout_width="300dp"
            android:layout_height="match_parent">
        </LinearLayout>
      </ScrollView>
android:layout_gravity="top" platziert die Buttons nach oben.

Ist nicht das was ich ursprünglich im Sinn hatte, aber es ist trotzdem gut.

screenshot4.png


Danke StefMa!!! Du hast mir echt geholfen. :thumbsup:
 
Zurück
Oben Unten