android listview固定高度独立于屏幕大小

时间:2013-02-06 09:26:47

标签: android android-listview

我想要一个英文字母的列表视图,我希望这个列表视图能够保持固定并一直显示,我的意思是我不想让用户滚动它,因为他会看到它。我该怎么做才能让它始终显示并适合所有移动设备的所有屏幕尺寸?我试过这样:

的ListView

<ListView
            android:divider="#000000"
            android:id="@+id/lv_profile_listview_with_search_alphabets"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="0.1"
             >
        </ListView>

列出项目

<TextView
        android:id="@+id/tv_list_item_alphabet_oneAlphabet"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_gravity="center_horizontal"
        android:background="@drawable/alphabet_selector"
        android:gravity="center_horizontal"
        android:textColor="#040404"
        android:textSize="10dip"
        android:typeface="sans" 
        />

但是在我的设备上,我仍然在屏幕按钮上有空白区域。

我猜的解决方案之一,我在我的适配器上以编程方式设置每个列表项的高度,如

li.setHeight(ScreenHeight/26);

但我不知道如何获得ScreenHeight,这不是一个好方法。

任何帮助,请

2 个答案:

答案 0 :(得分:2)

设置项目高度是一个非常糟糕的主意。如果您想要相对于屏幕尺寸的高度,则应使用垂直 LinearLayout,将项目高度设置为零并在其上添加权重。 要禁用滚动,请尝试添加android:clickable =“false”属性。

<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="1" >

    <ListView
        android:divider="#000000"
        android:id="@+id/lv_profile_listview_with_search_alphabets"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.3"
        android:clickable="false"/>

</LinearLayout>

如果垂直布局的重量总和为1且您的重量为0.3,则意味着它比屏幕高度的1/3小一点。 您可以通过权重和方向在LinearLayout中设置相对宽度或高度。 例如,要使ListView的宽度为0.5宽度的屏幕并将高度设置为match_parent,它将是这样的。请注意,如果item为0dp,LinearLayout现在是水平宽度

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="1" >

    <ListView
        android:divider="#000000"
        android:id="@+id/lv_profile_listview_with_search_alphabets"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="0.5"
        android:clickable="false"/>

</LinearLayout>

根据代码中的屏幕大小设置项目高度是一种不好的做法。您可以制作自定义项目布局并从尺寸设置项目的layout_height,并为不同的分辨率添加不同的尺寸

http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

http://developer.android.com/guide/topics/resources/providing-resources.html

这些文章可能对您有所帮助

http://developer.android.com/guide/practices/screens_support.html

http://developer.android.com/training/multiscreen/index.html

答案 1 :(得分:1)

要获得屏幕的高度,请执行以下操作:

  listView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    public void onGlobalLayout() {
      item.setMinimumHeight(listView.getHeight() / 26);
    }
  });

不允许滚动试试:

listView.setScrollContainer(false)