6

これは相対レイアウトを使用することで非常に簡単に実行できることはわかっていますが、私が行っていることは正しいと感じており、線形レイアウト自体で目的の結果が得られるはずです。しかし、何らかの理由で、AndroidJB4.1.2を実行しているGoogleNexus7でこれを実行すると、リストビューアイテムの直後にボタンとテキストビューが表示されます。リストビューが空の場合、画面の上部に表示されます。私は何か間違ったことをしていますか?これが私のxmlファイルです

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/attachments_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1"
android:orientation="vertical">
<ListView
    android:id="@+id/mtg_attachments"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />
<Button
    android:id="@+id/attach_delete"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/delete"
    android:textSize="22sp" />
<TextView
    android:text="@string/attach_warning"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18sp" />
</LinearLayout>
4

5 に答える 5

2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/attachments_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="1" >
<ListView
    android:id="@+id/mtg_attachments"
    android:layout_width="fill_parent"
    android:layout_height="70dp"
    android:layout_weight="0.9" />
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:layout_weight="0.1"
    android:gravity="bottom" >
    <Button
        android:id="@+id/attach_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="delete"
        android:textSize="22sp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="attach_warning"
        android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
于 2012-10-16T04:32:33.550 に答える
1

この質問にはすでに受け入れられている回答があることは知っていますが、解決策が見つからなかったため、とにかく返信します。これは、私が抱えていたこの問題についてグーグルが私に与えた最初の結果です。

分割したい2つの要素の間にLinearLayout (vertical)withを入れるだけです。layout:weight = 1

あなたのコードでは、それは

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/attachments_list"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:weightSum="1"
              android:orientation="vertical">
    <ListView
        android:id="@+id/mtg_attachments"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="0" />

    <LinearLayout
        <!-- You should add this one and remove android:layout_weigth="1" form the listview -->
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1">
    </LinearLayout>

    <Button
        android:id="@+id/attach_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/delete"
        android:textSize="22sp" />
    <TextView
        android:text="@string/attach_warning"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp" />

</LinearLayout>

追加された LinearLayout は、 weight プロパティが設定された唯一のものである必要があることに注意してください。そうしないと、何らかの問題に直面する必要があります。

于 2013-10-17T13:52:37.950 に答える
1

Sriman この回答を見て、これが役立つかどうか教えてください。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/attachments_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom"
android:orientation="vertical"
android:weightSum="1" >

<ListView
    android:id="@+id/mtg_attachments"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1" />

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

    <Button
        android:id="@+id/attach_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="delete"
        android:textSize="22sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="attach_warning"
        android:textSize="18sp" />
</LinearLayout>

</LinearLayout>
于 2012-10-16T11:16:45.910 に答える
0

画面の中央にアイテムを配置する場合は、LinearLayout を使用しないでください。これは、多数のアイテムを次々に積み重ねて表示するためのものです。

代わりにRelativeLayoutを使用してください。

したがって、次のように置き換えます。

android:layout_gravity="center"

関連するRelativeLayoutオプションについて:

android:layout_centerInParent="true"
于 2012-10-16T04:02:05.250 に答える
0

xml コードを変更します。

を使用してandroid:layout_weight、レイアウトのパーセンテージを調整します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/attachments_list"
    android:layout_width="fill_parent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1"
    android:orientation="vertical">
<ListView
    android:id="@+id/mtg_attachments"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="0.8" />
<Button
    android:id="@+id/attach_delete"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_gravity="center"
    android:layout_weight="0.1"
    android:text="@string/delete"
    android:textSize="22sp" />
<TextView
    android:text="@string/attach_warning"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="0.1"
    android:textSize="18sp" />
</LinearLayout>
于 2012-10-16T05:55:15.773 に答える