ListView/GridView:正确设置子布局
我想创建一个ListView
(同一个问题与GridView
相关),其中项目具有非常具体的LayoutParams
。就拿这个例子,我想每一行是一个LinearLayout
与100dp
高度:ListView/GridView:正确设置子布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pd_textview"
android:gravity="center_vertical"/>
</LinearLayout>
当我使用这个XML布局与标准BaseAdapter
实施getView()
是膨胀的意见没有LayoutParams
为我LinearLayout
GET应用(每行简单地围绕文本的大小包裹在TextView
):
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Inflate view if necessary
if (convertView == null) {
convertView = ((Activity) mContext).getLayoutInflater().inflate(ID_LAYOUT, null, false);
}
// Return the view
return convertView;
}
垂钓Android documentation的适当部分周围,它说以下约getView()
这也解释了当前的行为:
把那在 数据集的指定位置显示的数据视图。您可以手动创建视图,也可以从 XML布局文件中对其进行充气。当视图膨胀时,父视图(GridView,GridView, ListView ...)将应用默认布局参数,除非您使用膨胀(int,android.view.ViewGroup,布尔值)来指定根视图 并防止附件根。
我的问题很简单,我应该怎么做呢?使用具有所需的LayoutParams
根视图的建议似乎令人费解,因为我想用视图膨胀视图,我试图膨胀(是的,我可以膨胀一个静态视图并将其保留为成员该类引用...但这似乎很愚蠢)。另一种选择是仅定义XML中行项目的内容,并且每次都手动创建容器及其容器。
有没有一种'正确'的方式(即不是浪费的破解),我错过了简单地创建与在XML中定义的LayoutParams
项目?
我更愿意把这个评论,但我没有这样做,需要50声誉......
这里有问题的详细解释:
http://www.doubleencore.com/2013/05/layout-inflation-as-intended/
的主要观点是:
“的问题,这就是Android。layout_xxx属性始终在父视图的背景下进行评估。结果,没有任何已知的父母,你宣布所有的LayoutParams r你的XML树的OOT元素只会得到扔掉[,...]”
所以,实际上,解决的办法是:
convertView = ((Activity) mContext).getLayoutInflater().inflate(ID_LAYOUT, parent, false);
你的意思是说,该行项目的高度不'ListView'中的100dp? – Apoorv 2014-09-13 12:38:47
是的,当这段代码运行时,我最终得到了一个'ListView'的项目,这些项目是TextView中文本的大小 - 而不是Listd的100dp高的项目 – 2014-09-13 12:43:21
您可以为它们分配'height'在'getView'方法中。 – Apoorv 2014-09-13 12:44:27