嗨,我想在android中调整listview的大小。
我有其他来源,而不是之前的主题。
.XML
<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" >
<TextView
android:id="@+id/currentDirectoryTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Current directory:" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="5dp"
android:textSize="30sp"
android:layout_weight="1" />
</LinearLayout>
的.class
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.activity_list_item, android.R.id.text1, values);
setListAdapter(adapter);
如何调整列表大小?它总是很小。更改textSize后相同。
这是全班ListFileActivity。
public class ListFileActivity extends ListActivity {
private String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Use the current directory
path = android.os.Environment.getExternalStorageDirectory()
+ File.separator + AppConstant.DIRECTORY;
if (getIntent().hasExtra("path")) {
path = getIntent().getStringExtra("path");
}
updateCurrentDirectoryTextView();
// Read all files sorted into the values-array
List values = new ArrayList();
File dir = new File(path);
if (!dir.canRead()) {
setTitle(getTitle() + " (inaccessible)");
}
String[] list = dir.list();
if (list != null) {
for (String file : list) {
if (!file.startsWith(".")) {
values.add(file);
}
}
}
Collections.sort(values);
// Put the data into the list
/* ListView lst = new ListView(this);
//String[] arr = {"Item 1","Item 2"};
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,R.layout.mylist,values);
lst.setAdapter(ad);*/
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.activity_list_item, android.R.id.text1, values);
setListAdapter(adapter);
}
private void updateCurrentDirectoryTextView() {
((TextView) this.findViewById(R.id.currentDirectoryTextView))
.setText("Current directory: " + path);
}
}
答案 0 :(得分:0)
删除重量,即删除此行
android:layout_weight="1"
您还想通过将文本大小设置为listView来做什么?你应该使用适配器或单个项目布局
答案 1 :(得分:0)
该行
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.activity_list_item, android.R.id.text1, values);
负责为每个列表元素设置适配器。
确定大小的是由适配器而不是ListView本身膨胀的列表元素布局。在您的情况下,这是android.R.id.text1,由系统定义。因此,如果要更改它,则需要创建自己的适配器。这是一个例子:
public class MyDataAdapter extends ArrayAdapter<MyData>
{
MyDatadata[] = null;
public MyDataAdapter(Context context, int layoutResourceId, MyData[] data)
{
super(context, layoutResourceId, data);
this.data = data;
}
public MyDataAdapter(Context context, int layoutResourceId, List<MyData> data)
{
super(context, layoutResourceId, data);
this.data = data.toArray(new MyData[data.size()]);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
MyDataHolder holder = null;
if (row == null)
{
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new MyDataHolder();
holder.txtTitle = (TextView) row.findViewById(R.id.mydata_1);
holder.txtTitle2 = (TextView) row.findViewById(R.id.mydata_2);
holder.txtTitle3 = (TextView) row.findViewById(R.id.mydata_3);
holder.txtTitle4 = (TextView) row.findViewById(R.id.mydata_4);
row.setTag(holder);
}
else
{
holder = (MyDataHolder) row.getTag();
}
MyData mydata= data[position];
holder.txtTitle.setText(mydata.getName());
holder.txtTitle2.setText(mydata.getType());
holder.txtTitle3.setText(mydata.getDate());
holder.txtTitle4.setText(mydata.getStatus());
return row;
}
static class MyDataHolder
{
TextView txtTitle;
TextView txtTitle2;
TextView txtTitle3;
TextView txtTitle4;
}
@Override
public MyData getItem(int position)
{
return data[position];
}
项目xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/mydata_1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:gravity="center_vertical"
android:textAppearance="@android:attr/textAppearanceLarge"
android:textColor="#736F6E"
android:textSize="22sp"
android:textStyle="bold" />
<TextView
android:id="@+id/mydata_2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_below="@id/mydata_1"
android:textStyle="bold"
android:textSize="12sp"
android:textColor="#736F6E"
android:layout_alignParentLeft="true"
android:textAppearance="@android:attr/textAppearanceLarge"
/>
<TextView
android:id="@+id/mydata_3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_below="@id/mydata_2"
android:textStyle="bold"
android:textSize="12sp"
android:textColor="#736F6E"
android:layout_alignParentLeft="true"
android:textAppearance="@android:attr/textAppearanceLarge"
/>
<TextView
android:id="@+id/mydata_4"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_below="@id/mydata_3"
android:textStyle="bold"
android:textSize="12sp"
android:textColor="#736F6E"
android:layout_alignParentLeft="true"
android:textAppearance="@android:attr/textAppearanceLarge"
/>
</RelativeLayout>
并像这样使用它:
ArrayAdapter<MyData> adapter = new MyDataAdapter(inflater.getContext(), R.layout.listelement_mydata, mydatas);
setListAdapter(adapter);
稍后我需要将其更改为SimpleCursorAdapter,因为内容发生了变化,如下所示:
Cursor c = getMyDataDataSource().getMyDatasCursor();
SimpleCursorAdapter adapter = new SimpleCursorAdapter(inflater.getContext(),
R.layout.listelement_mydata, c, new String[] { "name", "type", "date", "status" }, new int[] {
R.id.mydata_1, R.id.mydata_2, R.id.mydata_3, R.id.mydata_4 }, 0);
setListAdapter(adapter);
但是你需要一个ArrayAdapter,这就是你需要的那个。
编辑:
....这可能是一个愚蠢的答案,考虑到你可以使用单文本视图List Element XML代替android.R.id.text1,而不需要你自己的适配器。 我不会删除它,因为如果你需要比单个textview更复杂的东西,那么它可能会派上用场,但是......是的。只需为列表视图定义单个元素XML,其中包含单个文本视图,它应该可以工作。