0

我似乎无法找到一种方法来制作包含 ListView 的布局,该 ListView 显示我的联系人的整个列表(它是一个长列表),在列表下方有 2 个按钮一个挨着另一个。

它吓坏了我,我做的任何事情似乎都不起作用。我搜索了一些相关的问题并找到了这个:Android Layout with ListView and Buttons ,但没有一个替代解决方案对我有用。

当我查看(eclipse)的图形演示时,它看起来很好,但是当我在我的设备上运行它时,我只能看到联系人列表。listView 与按钮重叠。

我正在使用一个simpleList,它呈现在另一个代表一行的布局上。我开始怀疑我以编程方式做的事情毁了它,因为我跑了我的java代码,发现没有提到我正在谈论的activity_contact_list。仅连接到行布局。

所以我得到了这个activity_contact_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contact_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_alignParentTop="true" >
</ListView>

<LinearLayout
    android:id="@+id/buttons"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_weight="1.0"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/action_cancel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Cancle" />

    <Button
        android:id="@+id/action_add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Add" />
</LinearLayout>
</LinearLayout>

这是经过多次尝试,例如:使用 RelativeLayout 而不是 LinearLayout,将 ListView 的代码放在按钮的 LinearLayout 下面等等。

这是活动的代码:ContactList.java:

public class ContactList extends ListActivity{

//some global variables for late use.
public Model model;                         
SimpleAdapter adapter;
List<Map<String, String>> data;             /* data is a list of Map */
String[] from = {"name","phone"};           /* names of the columns */     //TODO - add date!
int[] to = {R.id.name, R.id.number};    
List<Contact> contacts;                     /* list of contacts */


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //  setContentView(R.layout.activity_contact_list);


    // Set up the action bar.
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    actionBar.setDisplayHomeAsUpEnabled(true);

    model = Model.getInstance(this);

    data = new ArrayList<Map<String, String>>(); 
    contacts = fillContactsList();

    fill_data();
    adapter = new SimpleAdapter(this, data, R.layout.contact_list_row, from, to);
    setListAdapter(adapter);    


}

我评论了该setContentView行,因为它无法以其他方式编译...

正如所说。该列表完全有效。但它与活动底部的按钮重叠。任何想法?我敢肯定我错过了一些愚蠢的东西。

提前致谢!

4

2 回答 2

1

您是否尝试使用相对布局?

将线性布局更改为相对布局即可。

由于线性布局不支持对齐父级..

已编辑

将列表高度设置为父级。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contact_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
    android:id="@+id/list"
    android:layout_below="@+id/buttons"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</ListView>

<LinearLayout
    android:id="@+id/buttons"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="2" >

    <Button
        android:id="@+id/action_cancel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Cancle" />

    <Button
        android:id="@+id/action_add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Add" />
</LinearLayout>

于 2013-08-05T21:05:17.150 回答
0

您的 ListView 有多长。也许它比您的屏幕长,并且是带有显示在屏幕外的按钮的 LinearLayout。

当您使用 ListView 上方的按钮重新排列时会发生什么。

编辑:我认为你必须在你的 ListView 中设置一个 Max-size。也许你可以在你的java代码中尝试这样的事情,但我不知道它是否可以滚动......

ListView listView = (ListView) findViewById(R.id.listView):
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) listView .getLayoutParams();
params.height = 200;    // or something bigger / smaller
listView .setLayoutParams(params);
于 2013-08-05T21:06:50.990 回答