100%高度的android listview

时间:2013-04-30 16:02:12

标签: android android-linearlayout

我刚刚开始开发Android应用程序。我有一个布局问题。我想为我的应用程序创建主屏幕。这是一个包含7个选项的菜单,每个选项都是左侧的图标,短文本和左侧的检查(开/关组件)。

我已经在列表视图元素中编写了它,我创建了一个具有此布局的简单适配器:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

       <ImageView android:id="@+id/icon"
            android:layout_width="?android:attr/listPreferredItemHeight"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:src="@drawable/ic_action_io"/>

       <TextView android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/icon"
            android:layout_alignParentTop="true"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:singleLine="true" />



</RelativeLayout>

菜单总会有7个选项,我希望listview填满屏幕的高度。每个元素具有相同的高度。有没有可能与listview?或者,或许最好从列表视图中制作菜单?

我一直在阅读线性布局和重量属性。拜托,你能帮帮我吗?这是我的第一个布局,我要感谢我应该使用的任何建议aboput布局。

非常感谢,最诚挚的问候!

P.D:对不起我的英文。

3 个答案:

答案 0 :(得分:1)

如果你想要显示所有项目(没有滚动)那么ListView就没有用了。请改用LinearLayout并将每个菜单项的layout_weight设置为1。

答案 1 :(得分:1)

我会使用一个Linearlayout,在里面我把所有项目都显示出来......

这样的事情:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<RelativeLayout android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >

   <ImageView android:id="@+id/icon"
        android:layout_width="?android:attr/listPreferredItemHeight"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:src="@drawable/ic_launcher"/>

   <TextView android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/icon"
        android:layout_alignParentTop="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Texto"
        android:singleLine="true" />

</RelativeLayout>

<RelativeLayout android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >

   <ImageView android:id="@+id/icon"
        android:layout_width="?android:attr/listPreferredItemHeight"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:src="@drawable/ic_launcher"/>

   <TextView android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/icon"
        android:layout_alignParentTop="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Texto"
        android:singleLine="true" />

</RelativeLayout>

    <!-- Repeat the item five times more -->

</LinearLayout>

答案 2 :(得分:1)

正如其他人说的那样更好地使用LinearLayout。就像你提到的那样,你也可以使用权重属性。

  

同等重视儿童

     

要创建一个线性布局,其中每个孩子在屏幕上使用相同的空间量,请将每个视图的android:layout_height设置为“0dp”(对于垂直布局)或者将每个视图的android:layout_width设置为“ 0dp“(用于水平布局)。然后将每个视图的android:layout_weight设置为“1”。

当您尝试实现菜单时,我认为最好的方法是将每个RelativeLayout(带有textview和imageview)替换为按钮。所以,你的布局就是这样:

<?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"
android:weightSum="7.0" > //Defines the maximum weight sum


<Button 
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:height="0dp"
    android:layout_weight="1"
    android:text="Option 1"
    android:drawableLeft="@drawable/icon1"
    android:onClick="handleOption"/> // method to handle onClick

 <Button 
    android:id="@+id/button2"
    android:layout_width="match_parent"
    android:height="0dp"
    android:layout_weight="1"
    android:text="Option 2"
    android:drawableLeft="@drawable/icon2"
    android:onClick="handleOption"/> // method to handle onClick

    //Add more five buttons
    .
    .
    . 

在您的活动中,您应该使用setContentView()加载此布局,并且必须实施下面的handleOption方法来处理每个按钮的onClick事件。

 public view handleOption(View view)
 {
     switch(view.getId()) ....
 }

通过这种方式,您不需要实现onClickListener接口,每个按钮都有一个方法,并为每个按钮设置onClickListener。