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 и таблицы. Я хочу прокручивать таблицу, но не перенастраиваться. Однако моя таблица (которая должна быть ниже заголовка), перекрывает ее. Следовательно, как вы можете видеть выше, я добавил пустые представления (поэтому он начинается ниже заголовка (который имеет три строки)), но понял, что это не сработает. Как только я прокрутился вниз, пустые взгляды скользят вверх, и мой переносимый столкнулся с препятствиями снова.

Все мои взгляды были сделаны программно. Эта деятельность представляет собой фрагментную активность. Файл 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', поскольку я не вижу, что эта переменная строится где угодно. –

+0

Прежде всего, спасибо за ответ. Таблица 2 должна быть переносимой. Я обновил его сейчас. По-видимому, я забыл внести изменения перед публикацией здесь. И нет, это не фреймплей, это фрагмент внутри linearlayout. Как я уже сказал, это активность фрагмента, и поэтому он должен вернуть корень (который является фрагментом) в основной FragmentActivity. – Ryan

ответ

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, а затем заполнить его таким же образом, указав таблицу заголовка и поместив список под ним, чтобы он не прокручивался поверх его.

Надеюсь, это поможет!