多种屏幕尺寸和XML布局

时间:2014-02-03 22:10:27

标签: android xml listview android-listview

我已经阅读了我能找到的所有内容,而我无法理解这一点。我有一个带有标题的XML,然后是一个listview,然后是底行的2个按钮。为了使布局看起来很完美,我已经“硬编码”了listview的大小(467dp)。这在我的三星Galaxy S4上很好,但我不确定它在其他尺寸略有不同的手机上是否合适。我在Galaxy 8“标签上进行了测试,看起来并不正确。然后我在10.1”标签上进行了测试,它(再次)看起来并不合适。基本上底部按钮位于屏幕中间。我通过为sw600dp和sw720dp创建布局来解决这个问题。对于每个我必须硬编码listview的不同大小。在我看来,有一种更好的方法来获得一个在任何设备上显示(相对)相同的heading-listview-button XML。任何人都可以告诉我如何更改我的XML,所以我不必硬编码列表视图的大小?

LinearLayout 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/title_line"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:text="@string/workout_locations">
</TextView>

<ListView
    android:id="@+id/location_list"
    android:layout_width="match_parent"
    android:layout_height="467dp"
    android:longClickable="true" >
</ListView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal" >

    <ImageButton
        android:id="@+id/help_button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:contentDescription="@string/help_description"
        />

    <ImageButton
        android:id="@+id/add_button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:contentDescription="@string/add_description"
        />
</LinearLayout>

</LinearLayout>

4 个答案:

答案 0 :(得分:1)

android:layout_weight =“1在按钮

中添加此项

答案 1 :(得分:0)

使用layout_weight占用尽可能多的空间。

<ListView android:id="@+id/location_list"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
    android:longClickable="true" >
</ListView>

答案 2 :(得分:0)

如果您已对某些尺寸进行了硬编码,您可以打赌它在大多数设备上看起来不太好。为了做到这一点,最好将layout_heightlayout_weight设置为wrap_contentmatch_parent,具体取决于您的需求。

您描述的案例还有另一个重要工具:layout_weight,您可能已经使用过。与ListView混淆以适应您想要的设计可能在第一次很难,但一旦您发现如何设置其布局,其他人就很容易。

在我的情况下,这个定义总是按原样运作:

<LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical" >

  <ListView
    android:id="@+id/mylistview"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" 
    android:scrollbars="vertical" >
  </ListView>
</LinearLayout>

看看它:我设置了一个单数LinearLayout(在这种情况下因为它有更多的视图而不仅仅是我展示的ListView),但我正在设定权重其中ListViewsumWeightsLinearLayoutListView 1.这样您就可以确保{{1}}尽可能扩展,而无需硬编码值。

这只是玩弄它一段时间的问题,但硬编码的值越少,其他设备的适应性就越强。

答案 3 :(得分:0)

我想知道这是否有帮助:

确保整个布局是relativeLayout,并在其中放置listview

<ListView
    android:id="@+id/location_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="50dp" // the size of the buttons height
    android:longClickable="true" >
</ListView>

在它下面是另一个带有按钮的相对布局。

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="bottom" 
android:layout_alignParentBottom="true">

<ImageButton
    android:id="@+id/help_button"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:contentDescription="@string/help_description"
    />

<ImageButton
    android:id="@+id/add_button"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:contentDescription="@string/add_description"
    />

如果这仍然导致问题,那么你可以写:

android:layout_above="@+id/relButtonLayout"
列表视图中的