更新:在此处创建并呈现更简单的代码,完整的布局XML定义。
当尝试使用XML布局中drawableStart
元素的新TextView
属性替换左侧图标的行布局时,我可以观察到以下错误显示的最后一项(在Nexus上捕获) 7):
相关代码是 - MainActivity:
package cz.skil.android.tut.testtextviewdrawablestart;
import android.os.Bundle;
import android.app.Activity;
import android.widget.ListView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_list);
ListView listView = (ListView) findViewById(R.id.mylist);
String[] values = new String[] {"item 1", "item 2", "item 3"};
MyAdapter adapter = new MyAdapter(this, values);
listView.setAdapter(adapter);
}
}
MyAdapter
package cz.skil.android.tut.testtextviewdrawablestart;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class MyAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public MyAdapter(Context context, String[] values) {
super(context, R.layout.row, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.row, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.mylabel);
textView.setText(values[position]);
return rowView;
}
}
main_list.xml
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="wrap_content" > <!-- Update: here is the bug -->
</ListView>
</LinearLayout>
最后是row.xml
布局:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mylabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="4dp"
android:drawablePadding="8dp"
android:drawableStart="@drawable/reminder"
android:lines="1"
android:textSize="24sp" >
</TextView>
我想原因是显示项目的区域的高度是根据为文本声明的尺寸计算的;但是,该图标可能会强制列表项的高度。
你能证实一下这种行为吗?如果是的话,为什么会这样呢?我是Android新手。我可能是错误的做错了。
(这个问题与这个问题松散相关:Android layout: on TextView and android:drawableStart -- setting size of the icon?)。
答案 0 :(得分:3)
为ListView设置android:layout_height="wrap_content"
总是错误的。它与android:layout_height="fill_parent"
一样正常工作。更详细的解释可以在The World of ListView
答案 1 :(得分:2)
虽然我不知道这是否是预期的行为或错误,但是当您使用drawableStart时会发生这种情况。将其更改为drawableLeft,它将正确绘制布局。
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mylabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="4dp"
android:drawablePadding="8dp"
android:drawableLeft="@drawable/reminder"
android:lines="1"
android:textSize="24sp" >
</TextView>