如何调整android中的活动列表视图?

时间:2014-06-27 07:55:54

标签: android listview

嗨,我想在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);
}

}

2 个答案:

答案 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,其中包含单个文本视图,它应该可以工作。