Android 设置<;碎片>;根据包裹高度';内容

Android 设置<;碎片>;根据包裹高度';内容,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我有一个包含文本和片段的活动: <?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_hei

我有一个包含文本和片段的活动:

<?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;
}
public View onCreateView(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment\u calendar\u议程,容器,false);
议程\日期=新的ArrayList();
议程日期。添加(新日历日期(“2015年10月10日”,“Kuchen backen”);
议程日期。添加(新日历日期(“2015年10月10日”,“芬斯特普岑”);
列表=(ListView)v.findViewById(R.id.calendar\u agenda\u ListView);
adapter=newagendaadapter(getActivity(),R.layout.calendar\u议程\u列表视图\u项目,议程\u日期);
list.setAdapter(适配器);
返回v;
}
代码起作用,两个日历日期都添加到片段中


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

您可以通过编程设置高度,如图所示

功能:

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

}
public静态布尔setListViewHeightBasedOnItems(ListView ListView){
ListAdapter ListAdapter=listView.getAdapter();
if(listAdapter!=null){
int numberOfItems=listAdapter.getCount();
//获取所有项目的总高度。
int totalItemsHight=0;
对于(int-itemPos=0;itemPos
问题在于ListView不能正确处理wrap\u内容。 请参见此问题:


正如Rafael所建议的那样,您应该以编程方式更改ListView的大小。

上面的代码不完整,第一个xml中有Scrollview、+1 LinearLayout?线性布局的方向是什么链接现在已经死了