android listview行占据全部高度
我有一个与listview一起使用的relativelayout视图。出于某种原因,即使我已将android listview行占据全部高度,android,android-relativelayout,Android,Android Relativelayout,我有一个与listview一起使用的relativelayout视图。出于某种原因,即使我已将layout\u height设置为wrap\u content,布局仍会占用所有空间。结果是列表中的每一行都和屏幕一样高 我不确定这种观点有什么不对。它过去工作得很好 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andr
layout\u height
设置为wrap\u content
,布局仍会占用所有空间。结果是列表中的每一行都和屏幕一样高
我不确定这种观点有什么不对。它过去工作得很好
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/cloudbkg" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/pay" />
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/imageView1"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:orientation="vertical" >
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</RelativeLayout>
不确定这是否是问题所在,但在创建自定义
ListActivity
布局时,需要设置列表的屏幕布局以及单个行的布局。确保传递给setContentView()
的资源文件包含一个id为android:id/list
的ListView
对象,并且您正在将行布局(如上所述)传递给相应的适配器。如果您知道行大约需要多高(例如:60dp),然后,不要在根相对位置中给出wrap\u内容
而是给出layout\u height=“60dp”
。然后,您可以使用layout\u centerVertical
正确对齐视图。如果这是不可接受的,尝试为不同的视图提供不同的背景色,作为调试的一种方式,并查看哪个视图占用了所有空间。确保使用的两个图像不要太大。适配器的
getView
方法看起来像什么?可能会有帮助我认为我犯了一个小错误,我不是在使用listactivity,而是在扩展activity,然后自己设置listview。啊。。。行了<代码>列表活动默认情况下为您设置列表视图
,因此您不想提供自己的。如果要自定义它,请确保提供android:id=“@android.id/list”
属性(如果使用XML),或者在代码中自定义它时提供android.R.id.list
。是的,但我面临的问题是行的高度太高,即使在您修复了类以便扩展ListActivity
之后,也不要包装内容?嗯,好的。。。那么,也许这与适配器有关。能否提供更多关于如何将数据绑定到行的代码和信息?您是否正在查询数据库并使用游标加载程序
?您的数据是否已固定且正在使用阵列适配器
?我这样问是因为getView
的默认实现(以及所有适配器通用的许多其他方法)取决于类,因此,我无法确定您是否实现了正确的适配器方法。在您的布局中,唯一正在使用的图像设置为48dpx48dp。您正在引用两个可绘图项:cloudbkg和Pay。当我创建一个具有线性或相对布局的新xml时,它将变为全高。您是否尝试硬编码高度值?这似乎可以修复,但这不是首选的解决方案。我正在尝试查看发生了什么变化。您还可以删除一些视图组,然后查看是哪个视图组导致了问题。从一个非常小的行开始,确保它工作,然后在它的基础上构建
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
try {
final JSONObject holder = getItem(position);
convertView = inflateView(R.layout.dumb);
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try {
Intent i = new Intent(context, Pending.class);
i.putExtra("id", holder.getString("_id"));
context.startActivity(i);
} catch(Throwable e){
e.printStackTrace();
}
}
});
convertView.setOnLongClickListener(new OnLongClickListener(){
public boolean onLongClick(View v){
try {
final CharSequence[] items = {"Pay", "Delete"};
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(holder.getString("service"));
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
}
}).create().show();
} catch(Throwable e){
e.printStackTrace();
}
return true;
}
});
TextView t = (TextView)convertView.findViewById(R.id.amount);
t.setText(holder.getString("currency") + holder.getString("amount"));
setImg((ImageView)convertView.findViewById(R.id.pic), holder.getJSONObject("to").getString("pic"));
t = (TextView) convertView.findViewById(R.id.time);
t.setText(DateUtils.getRelativeTimeSpanString(holder.getLong("time")*1000, System.currentTimeMillis(), 0, DateUtils.FORMAT_ABBREV_ALL));
t = (TextView) convertView.findViewById(R.id.service);
t.setText(holder.getString("service")); // url, co-ords, or shop
} catch(Throwable e) {
e.printStackTrace();
}
}
return convertView;
}