1. ホーム
  2. android

[解決済み] AndroidでListViewの高さを制限する

2023-02-25 07:15:55

質問

の下にボタンを表示させたい。 ListView . 問題は、もし ListView が拡張された場合(アイテムが追加された...)、ボタンが画面の外に押し出されてしまうことです。

を試してみましたが LinearLayout で提案されているように)重みをつけて Android: なぜViewにmaxHeightがないのですか? を使用しましたが、重みを間違えたか、単に動作しなかったかのどちらかです。

また、どこかで見つけたヒントで RelativeLayout . その ListView がボタンの上に設定され android:layout_above パラメータで指定します。

これの問題点は、その後のボタンの位置がわからないことです。私が見つけた例では、下のViewが ListView を使って調整されていました。 android:layout_alignParentBottom で調整しましたが、ボタンが画面の下にくっつくのは困ります。

setHeight-methodの使用と必要なスペースの計算以外に何かアイデアはありますか?


編集してください。 有用な回答がたくさんありました。

  • bigstone の解決策と user639183 の解決策 ほとんど は完璧に機能しました。ただし、まだ画面の半分まで押し出されてしまうので、ボタンの下部に余分なパディング/マージンを追加する必要がありました (ただし、その後停止しました)。

  • Adinia の相対レイアウトのみの回答は、ボタンを画面の下部に固定したい場合は問題ありません。これは私が意図したものではありませんが、それでも他の人にとっては便利かもしれません。

  • AngeloS のソリューションは、ちょうど私が望んでいた効果を生み出すものだったので、最終的に私が選んだものでした。しかし、私は2つの小さな変更を LinearLayout に2つの小さな変更を加えました。

    • まず、レイアウトに絶対的な値を入れたくなかったので、ボタン周辺の android:layout_height="45px"wrap_content に変更すると、同様にうまく動作します。

    • 次に、ボタンを水平方向に中央配置にしたかったので、これは垂直方向にしか対応していない LinearLayout でしかサポートされていないため、android:orientation="horizontal" を "vertical" に変更しました。

    AngeloS は、最初の投稿で次のようにも述べています。 android:layout_weight="0.1" パラメータが LinearLayout の周りに ListView は何か効果があるのでしょうか。今試してみたところ、実際に効果がありました! そうしないと、ボタンは再び画面の外に押し出されます。

どのように解決するのですか?

私はこの問題に直面し、それを解決するために、2つの独立した LinearLayouts を作成し、その中に ListViewButton をそれぞれ作成しました。 そこから私は両方を別の Linear Layout の中に入れて、そのコンテナの android:orientationvertical . の重さも設定しました。 LinearLayout を収容している ListView から 0.1 に変更しましたが、それが効果的かどうかはわかりません。そこから、一番下のコンテナ(ボタンがある)の高さを好きな高さに設定することができます。

編集 ということです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.1"
    android:orientation="horizontal">

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:dividerHeight="2px"></ListView>
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="45px"
    android:background="@drawable/drawable"
    android:orientation="horizontal">

    <Button
        android:id="@+id/moreButton"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:background="@drawable/btn_more2"
        android:paddingRight="20px" />

</LinearLayout>

上記の解決策で、画面下部のボタンが固定されます。


ボタンがリストの一番下に浮くようにするには、高さを変更し ListView01wrap_content :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.1"
    android:orientation="horizontal">

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="2px"></ListView>
</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="45px"
    android:background="@drawable/drawable"
    android:orientation="horizontal">

    <Button
        android:id="@+id/moreButton"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:background="@drawable/btn_more2"
        android:paddingRight="20px" />
</LinearLayout>