0

我在我的意見(表headertable)重疊查看相互重疊

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; 
} 

我基本上打破了一個表到headertable和桌子的活動。我想滾動表,但不是headertable。但是,我的表(它應該在headertable下面)與它重疊。因此,正如你在上面看到的,我添加了空視圖(所以它開始於headertable(有三行))之下,但是意識到這是行不通的。只要我向下滾動,空視圖就會滑動,並且我的頭部會再次受到阻擋。

我的所有觀點都是以編程方式製作的。此活動是一項片段活動。 XML文件包含

<?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> 

任何幫助,將不勝感激。提前致謝。

+1

我想大問題是:什麼樣的佈局是'root'?它是在最後發佈的'FrameLayout'嗎?如果是這樣,你可能想要交換一個垂直定向的'LinearLayout',它會自動將頭部和'ScrollView'定位在彼此之下。 'FrameLayout'不適合託管多個孩子(除非你想*重疊)。另外,什麼是'table2',因爲我沒有看到該變量正在構建的任何地方。 – 2012-04-14 12:35:55

+0

首先,謝謝你的迴應。表2應該是可以理解的。我現在更新了它。顯然,我忘了在發佈之前進行修改。不,它不是一個框架佈局,它是一個線性佈局中的一個片段。就像我說的那樣,它是一個片段活動,因此必須將根(這是一個片段)返回到主FragmentActivity。 – Ryan 2012-04-14 13:10:09

回答

0

我不知道這是否是最好的方式,但在這裏就是我如何做到這一點:

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> 

RecipeListFragment.java

public class RecipeListFragment extends ListFragment { 
    private TextView header; 
    private TextView empty; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.common_list, container, false); 
     header = (TextView) v.findViewById(R.id.header); 
     empty = (TextView) v.findViewById(android.R.id.empty); 
     header.setText(R.string.header_recipe); 
     empty.setText(R.string.empty_recipes); 
     return v; 
    } 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     // List code here 
    } 
} 

此代碼只有一個標題行,但您可以將該TextView更改爲TableLayout,然後以相同的方式填充它,爲您提供您的標題表並將其列表放在它下面,以便它不會滾動在它的頂部。

希望這會有所幫助!