带有ListView的Android布局重叠按钮

时间:2013-08-05 20:59:29

标签: android listview layout

我似乎找不到一种方法来制作一个包含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行进行了评论,因为它无法进行编译......

正如所说的那样。该列表实际上是有效的。但它与活动底部的按钮重叠。任何的想法?我确定它有些愚蠢我错过了..

提前感谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

<强>被修改

将List Height设置为mach parent。

<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>

答案 1 :(得分:0)

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

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

编辑: 我认为你必须在ListView中设置最大尺寸。也许你可以在你的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);