我想实现Fig-1 ,但我坚持使用Fig-2 ,并且无法将完整的gridview视为Listview的标题。
正如您所看到的,Gridview未完全显示并隐藏在图2中的Listview后面
Gridview xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gridview"
android:numColumns="2"
android:stretchMode="columnWidth"
android:cacheColorHint="#ffffffff"
android:gravity="center"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
Listview xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" >
<ListView
android:id="@+id/listview"
android:scrollbars="vertical"
android:background="#fff"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</RelativeLayout>
片段代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragmentpage_layout, null);
listView=(ListView)view.findViewById(R.id.listview);
header=inflater.inflate(R.layout.gridview_layout,null);
gridView=(GridView)header.findViewById(R.id.gridview);
listView.addHeaderView(header);
gridViewAdapter=new CustomGridViewAdapter(getActivity(),images,toptexts, bottomtexts);
listViewAdapter=new CustomListViewAdapter(getActivity(),images,toptexts,bottomtexts);
gridView.setAdapter(gridViewAdapter);
listView.setAdapter(listViewAdapter);
return view;
}
提前致谢。
答案 0 :(得分:2)
嘿伙计们,我使用Gridview作为Listview的标题得到了答案。
我只是使用以下方法计算Gridview的分割器高度,它完全按照我想要的方式工作。
public static void setDynamicHeightGridView(GridView mListView,String oddeven) {
ListAdapter mListAdapter = mListView.getAdapter();
if (mListAdapter == null) {
return;
}
int height = 0;
int desiredWidth = View.MeasureSpec.makeMeasureSpec(mListView.getWidth(), View.MeasureSpec.UNSPECIFIED);
for(int i = 0; i < mListAdapter.getCount(); i++){
View listItem = mListAdapter.getView(i, null, mListView);
listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
height += listItem.getMeasuredHeight();
itemHeight=listItem.getMeasuredHeight()/3;
}
ViewGroup.LayoutParams params = mListView.getLayoutParams();
if(oddeven.equals("odd")){
if(mListAdapter.getCount()>=5){
int count=((mListAdapter.getCount()-5)/2) + 1;
params.height = ((height - (height / 3)) - (itemHeight * count)) + 20 + (count * 5);
}else{
params.height = height - (height / 3) + 20;
}
}else if(oddeven.equals("even")) {
params.height = height/2 + 20;
}
mListView.setLayoutParams(params);
mListView.requestLayout();
}
已编辑:
最后完全答案:
对于偶数个观看次数设置:
params.height = height/2 + 20;
设置奇数观看次数:
params.height = ((height - (height / 3)) - (itemHeight * count)) + 20 + (count * 5);
其中:
我用5作为比较数字 适应器此值后的bcoz计算之间空间的变化 gridview和listview正在增加固定值。
在else部分处理5之前的空格。
itemHeight是空间增加的增量值
20是gridview和listview之间的边距空间
(count x 5)是元素增加时管理保证金的值。
bcoz它为我提供了两倍于Gridview高度的空间以上数量为偶数的视图
奇怪的观看次数和 Gridview +它的一半高度空间
希望它有助于:)
答案 1 :(得分:0)
尝试这种方式,将您的网格和列表置于单一布局并使用android:weightSum
进行区分,以使其适用于所有设备,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="3dp"
android:weightSum="2">
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:cacheColorHint="#ffffffff"
android:gravity="center"
android:numColumns="2"
android:stretchMode="columnWidth" />
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#fff"
android:scrollbars="vertical" />
</LinearLayout>
片段代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragmentpage_layout, null);
listView=(ListView)view.findViewById(R.id.listview);
gridView=(GridView)header.findViewById(R.id.gridview);
//your code
gridView.setAdapter(gridViewAdapter);
listView.setAdapter(listViewAdapter);
return view;
如果你想要首先完整显示整个gridview,那么它应该是listview,滚动时gridview应该向上,listview应该跟在后面,如图1所示
通过简单的解释查看此Awesome-MaterialDesign库。如下图所示
答案 2 :(得分:0)
如果您想要对 GridLayout 进行充气,请使用以下内容引用您的listView:
header = LayoutInflater.from(getActivity()).inflate(R.layout.your_header, mListView, false);
还有一件事:传递你的relativeLayout而不是你的GrideLayout作为标题。
答案 3 :(得分:0)
尝试在(defn ex+ [cause]
(try
(throw+ cause)
(catch Throwable ex
ex)))
(broken-fn) =throws=> (ex+ {:type :user-not-found})
中添加android:layout_marginTop="some_value"