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?线性布局的方向是什么链接现在已经死了