2015-12-10 113 views
2

我有一个包含文本和片段的活性:设置<fragment>高度来包装它的内容

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="bla.HomeActivity"> 
      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="A Text" 
       android:id="@+id/home_text_view"/> 
      <fragment 
       android:name="bla.CalendarAgendaFragment" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/cf" 
       tools:layout="@layout/fragment_calendar_agenda" /> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 

片段只包含动态填充一个ListView:

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

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/calendar_agenda_listview" 
     android:layout_gravity="center_horizontal" /> 
</LinearLayout> 

的onCreateView方法的片段看起来是这样的:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.fragment_calendar_agenda, container, false); 

    agenda_dates = new ArrayList<CalendarDate>(); 
    agenda_dates.add(new CalendarDate("10.10.2015", "Kuchen backen")); 
    agenda_dates.add(new CalendarDate("10.10.2015", "Fenster putzen")); 

    list = (ListView) v.findViewById(R.id.calendar_agenda_listview); 
    adapter = new AgendaAdapter(getActivity(), R.layout.calendar_agenda_listview_item, agenda_dates); 

    list.setAdapter(adapter); 

    return v; 
} 

该代码的作品和两个CalendarDates被添加到片段中。

问题是该片段只有大约40dp高,因此只显示第一个ListView项目。我只能通过在列表视图内进行内联滚动来查看第二项。如何根据其内容设置片段的高度?

+0

上面的代码是不完整的,在第一个xml中有Scrollview,+1 LinearLayout?什么是线性布局 –

回答

2

可以编程设定的高度,看到here

功能:

public static boolean setListViewHeightBasedOnItems(ListView listView) { 

    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter != null) { 

     int numberOfItems = listAdapter.getCount(); 

     // Get total height of all items. 
     int totalItemsHeight = 0; 
     for (int itemPos = 0; itemPos < numberOfItems, itemPos++) { 
      View item = listAdapter.getView(itemPos, null, listView); 
      item.measure(0, 0); 
      totalItemsHeight += item.getMeasuredHeight(); 
     } 

     // Get total height of all item dividers. 
     int totalDividersHeight = listView.getDividerHeight() * 
       (numberOfItems - 1); 

     // Set list height. 
     ViewGroup.LayoutParams params = listView.getLayoutParams(); 
     params.height = totalItemsHeight + totalDividersHeight; 
     listView.setLayoutParams(params); 
     listView.requestLayout(); 

     return true; 

    } else { 
     return false; 
    } 

} 
+0

orientatioins作品,但高度似乎太多 – Mike6679

相关问题