0

überlappende Ich habe eine Tätigkeit, bei der meine Ansichten (Tisch und headertable) sind überlappendeAnsicht einander

private ViewGroup createTable(ViewGroup root) { 
    // TODO Auto-generated method stub 
    TableLayout table = new TableLayout(getActivity()); 
    table.setStretchAllColumns(true); 
    table.setShrinkAllColumns(true); 

    TableLayout headertable = new TableLayout(getActivity()); 
    headertable.setStretchAllColumns(true); 
    headertable.setShrinkAllColumns(true); 

    /* Adding stuff to headertable which contains... */ 
      /* ...table content I DO NOT WANT to scroll*/ 

    root.addView(headertable); 

    for (int i = -2; i <= 100; i++) { 

        if (i > 0) { 
      /*Set up empty views*/ 
       /*...3 empty views will be set*/ 
        } 

     /* Adding stuff to table which contains... */ 
        /* ...table content I WANT to scroll*/ 

    } 

    ScrollView sv = new ScrollView(getActivity()); 
    sv.addView(table); 
    root.addView(sv); 
    return root; 
} 

Ich brach im Grunde eine Tabelle in headertable und Tisch. Ich möchte die Tabelle scrollen, aber nicht headertable. Meine Tabelle (die unterhalb von headertable sein sollte) überlappt sie jedoch. Wie Sie oben sehen können, habe ich daher leere Ansichten hinzugefügt (so dass es unterhalb von headertable beginnt (was drei Zeilen hat), aber ich erkannte, dass dies nicht funktionieren würde. Sobald ich runterscrolle, gleiten die leeren Ansichten nach oben und mein headertable wird wieder verstopft.

Alle meine Ansichten wurden programmgesteuert gemacht. Diese Aktivität ist eine Fragmentaktivität. Die XML-Datei enthält

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#ffffff" > 

</FrameLayout> 

Jede Hilfe würde geschätzt. Danke im Voraus.

+1

Ich denke, die große Frage ist: Welche Art von Layout ist "root"? Ist es das 'FrameLayout', das du am Ende postest? Wenn ja, möchten Sie es wahrscheinlich gegen ein vertikal orientiertes 'LinearLayout' austauschen, das die Kopfzeile und' ScrollView' automatisch untereinander positioniert. 'FrameLayout's sind nicht wirklich geeignet um mehrere Kinder zu hosten (es sei denn, Sie wollen * sich überlappen). Was ist 'table2' auch, da ich nicht sehe, dass diese Variable irgendwo konstruiert wird. –

+0

Zunächst einmal, danke für die Antwort. Table2 sollte headertable sein. Ich habe es jetzt aktualisiert. Anscheinend habe ich vergessen, die Änderungen vor dem Posten hier zu begehen. Und nein, es ist kein framelayout, es ist ein Fragment in einem linearen Layout. Wie ich schon sagte, es handelt sich um eine Fragmentaktivität, und muss also root (das ein Fragment ist) an die FragmentmentActivity zurückgeben. – Ryan

Antwort

0

Ich weiß nicht, ob es der beste Weg ist, aber hier ist, wie ich es tun:

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
<FrameLayout 
    android:id="@+id/pane" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</LinearLayout> 

header_list.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <TextView 
      android:id="@+id/header" 
      android:layout_width="fill_parent" 
      android:layout_height="30dp" 
      android:layout_alignParentTop="true" /> 
    <ListView 
      android:id="@id/android:list" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_below="@id/header" /> 
    <TextView 
      android:id="@android:id/empty" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@id/header" 
      android:gravity="center" /> 
</RelativeLayout> 

RezeptlisteFragment.java

Dieser Code hat nur eine einzelne Kopfzeile, aber Sie können diese TextView in ein TableLayout ändern und dann auf die gleiche Weise füllen, indem Sie die Header-Tabelle eingeben und die Liste darunter platzieren, sodass sie nicht scrollt über die Spitze.

Hoffe, das hilft!

Verwandte Themen