Android:在RelativeLayout中调整大小

时间:2014-06-19 18:19:29

标签: android android-layout listview android-linearlayout relativelayout

我知道这个问题已被问了很多时间,而且我已经阅读了很多这些问题,但我似乎没有找到答案。我很抱歉,如果那里有一个我没见过的答案。

我的问题是我想制作一个可以重新调整大小到任何屏幕大小的屏幕。 为了实现这一点,我不想在布局中设置任何类型的静态宽度或高度。

问题是我想要嵌套权重。原因是我在TextView和另一个LinearLayout之间的LinearLayout中有一个ListView。

包含ListView的LinearLayout由ListView本身和另一个LinearLayout组成。

我想要对ListView和LinearLayout(带箭头的两个按钮)进行加权。我还想让整个屏幕以下一种方式加权:

  • 屏幕底部的四个按钮必须加权
  • TextView,中间LinearLayout(使用ListView)和Bottom LinearLayout(使用四个按钮)必须加权。

我快速展示了屏幕,以便你们更好地理解这一点。

This is the screen design

我认为解决方案是将最外部的布局更改为RelativeLayout。 问题是如果我这样做,ListView只会将底部的LinearLayout推出屏幕。

有没有办法对RealtiveLayout组件进行加权,或者至少是一个没有考虑的LinearLayout实现"性能不好"?

我接下来会放置布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/multiPlayerHubLinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >

<TextView
    android:id="@+id/multiplayerHubHeaderTextView"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:text="@string/game_inventory_header" />

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:baselineAligned="false"
    android:orientation="horizontal"
    android:layout_weight="10" >

    <ListView
        android:id="@+id/game_inventory_listView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="10" >
    </ListView>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical" >

        <Button
            android:id="@+id/game_inventory_upButton"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="@string/game_all_upButton" />

        <Button
            android:id="@+id/game_inventory_downButton"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="@string/game_all_downButton" />
    </LinearLayout>
</LinearLayout>

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

    <Button
        android:id="@+id/game_inventory_scanButton"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/game_all_scanButton" />

    <Button
        android:id="@+id/game_inventory_supportButton"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/game_inventory_support" />

    <Button
        android:id="@+id/game_inventory_attackButton"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/game_inventory_offensive" />

    <Button
        android:id="@+id/game_inventory_healingButton"
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/game_inventory_healer" />
</LinearLayout>

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果您使用RelativeLayout,您可以先使用Buttons声明LinearLayout,然后使用ListView声明ListLayout,这将使ListView不会将按钮推离屏幕,因为它只会占用剩余的空间。按钮被放置。 layout_weight在RelativeLayout中不起作用。

小例子:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/multiPlayerHubLinearLayout"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin">

  <TextView
    android:id="@+id/multiplayerHubHeaderTextView"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_alignParentTop="true"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:text="@string/game_inventory_header" />

  <LinearLayout  android:id="@+id/buttonLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal">
      <!-- Buttons here -->
  </LinearLayout>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:layout_above="@id/buttonLayout"
    android:layout_below="@id/multiplayerHubHeaderTextView"
    android:orientation="horizontal">

    <!-- ListView etc. here -->
  </LinearLayout>


</RelativeLayout>

这种方法的缺点是你不能使用权重,但它们对TextView和按钮栏很重要吗?

答案 1 :(得分:1)

Try this way,hope this will help you to solve your problem.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/multiPlayerHubLinearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <TextView
        android:id="@+id/multiplayerHubHeaderTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:text="@string/game_inventory_header" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <ListView
                android:id="@+id/game_inventory_listView"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content">
            </ListView>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center"
                android:orientation="vertical" >

                <Button
                    android:id="@+id/game_inventory_upButton"
                    style="?android:attr/buttonBarButtonStyle"
                    android:layout_width="wrap_content"
                    android:layout_height="50dp"
                    android:text="@string/game_all_upButton" />

                <Button
                    android:id="@+id/game_inventory_downButton"
                    style="?android:attr/buttonBarButtonStyle"
                    android:layout_width="wrap_content"
                    android:layout_height="50dp"
                    android:text="@string/game_all_downButton" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/game_inventory_scanButton"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/game_all_scanButton" />

        <Button
            android:id="@+id/game_inventory_supportButton"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/game_inventory_support" />

        <Button
            android:id="@+id/game_inventory_attackButton"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/game_inventory_offensive" />

        <Button
            android:id="@+id/game_inventory_healingButton"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/game_inventory_healer" />
    </LinearLayout>
</LinearLayout>