ListViewとボタンを使用したAndroidレイアウト


101

わかりました、この特定のレイアウトは私を困らせます。そして、リストビューがボタンの上に拡張されないように下部にボタンの行がある、リストビューを持つ方法を見つけることができないようで、ボタンは常に画面の下部にスナップされます。ここに私が欲しいものがあります:

削除されたImageShackリンクを削除

とても簡単なはずですが、私が試したすべてが失敗しました。何か助け?

これが私の現在のコードです:

    RelativeLayout container = new RelativeLayout(this);
    container.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

    //** Add LinearLayout with button(s)

    LinearLayout buttons = new LinearLayout(this);

    RelativeLayout.LayoutParams bottomNavParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    bottomNavParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    bottomNavParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    buttons.setLayoutParams(bottomNavParams);


    ImageButton newLayer = new ImageButton(this);
    newLayer.setImageResource(R.drawable.newlayer);
    newLayer.setLayoutParams(new LinearLayout.LayoutParams(45, LayoutParams.FILL_PARENT));
    buttons.addView(newLayer);

    container.addView(buttons);

    //** Add ListView

    layerview = new ListView(this);

    RelativeLayout.LayoutParams listParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    listParams.addRule(RelativeLayout.ABOVE, buttons.getId());

    layerview.setLayoutParams(listParams);

    container.addView(layerview);

良い質問です、多くの開発者がこれに行き詰まるでしょう。
Signcodeindie 2014年

ありがたいことに、Androidのデザイナーは実際にはかなり甘いです。したがって、レイアウト/ UIを作成するときは、デザイナー/ XMLを使用してみてください。特にこのシナリオでは、ボタンのセットとListViewにすぎません。
Subby、2014年

回答:


137

これはあなたが探しているものだと思います。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">

    <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:id="@+id/testbutton"
        android:text="@string/hello" android:layout_alignParentBottom="true" />

    <ListView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:id="@+id/list"
        android:layout_alignParentTop="true" android:layout_above="@id/testbutton" />

</RelativeLayout>

Javaでレイアウトを書いていますが、それは私が基本的に使用しているものです。listViewは引き続きボタンの上に拡張されます。
クレプティーン

1
私が変更しているのは、ListViewでaddRule(RelativeLayout.ABOVE)を呼び出せないため、ListViewの周りにrelativeLayoutを追加していることだけです。
クレプティーン

2
このコードは正常に動作するはずです。上記android:layout_above="@id/testbutton"を維持しListViewますButton
CommonsWare 2010年

これを使用すると、リストがボタンの上で停止し、内部でスクロールが開始されます。
lars

7
あなたは呼び出すことはありませんaddRule(RelativeLayout.ABOVE)上のRelativeLayoutいずれかで、。あなたはそれをに呼びますRelativeLayout.LayoutParams。その後、追加ListViewするRelativeLayoutことを供給します、RelativeLayout.LayoutParams。長期的な保守性のために、XMLに切り替えてインフレートすることを検討してください。
CommonsWare 2010年

57

私は何年も同じ問題を抱えていました。

ListViewをボタンの上に維持し、リストが長い場合にボタンが隠れないようにする解決策は、ListViewにandroid:layout_weight = "1.0"を設定することです。ボタンのlayout_weightを未設定のままにして、ボタンが自然なサイズのままになるようにします。そうしないと、ボタンがスケーリングされます。これは、LinearLayoutで動作します。

Android ApiDemosに例があります: ApiDemos / res / layout / linear_layout_9.xml


あと数時間節約してください。ボタンが表示されなかった理由を理解できませんでした。:)
凍るような素晴らしい

これが機能する理由は完全にはわかりませんが、機能します:)
Bevor

20

私はこの質問に対する答えを探していましたが、これは最初の結果の1つでした。「ベストアンサー」として現在選ばれているものも含め、すべての問題が問題に取り組んでいないように感じます。記載されているという問題点が二つの成分の重なりがあることであるButtonListViewことで、リストビューは、画面全体を占有され、ボタンが視覚的にリストビューは、(最後のビュー/アクセスをブロック(の前に)浮いていますの項目ListView

ここや他のフォーラムで見た答えに基づいて、これを解決する方法について最終的に結論に達しました。

もともと、私は持っていました:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#FF394952">

  <ListView
    android:id="@+id/game_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    />

  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    style="@android:style/ButtonBar">

    <Button
      android:id="@+id/new_game"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/new_game"
      android:textColor="#FFFFFFFF"
      android:background="@drawable/button_background" />
  </LinearLayout>

</RelativeLayout>

RelativeLayoutルートノードとしての使用に注意してください。

これは、Buttonがとオーバーラップしない最終的な作業バージョンListViewです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#FF394952">

  <ListView
    android:id="@+id/game_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_weight="1.0" />

  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    style="@android:style/ButtonBar">

    <Button
      android:id="@+id/new_game"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/new_game"
      android:textColor="#FFFFFFFF"
      android:background="@drawable/button_background" />
  </LinearLayout>

</LinearLayout>

違いは2つだけです。まず、を使用するように切り替えましたLinearLayout。これはandroid:layout_weight、私に追加されていた次のビットに役立ちますListView

これがお役に立てば幸いです。


これは解決しますが、誰が推測するでしょう!?あなたが与えるときandroid:layout_alignParentBottomの内側LinearLayout「:layout_alignParentBottom無効なレイアウトのparamのLinearLayoutで」親、ADTは述べています!
Aswin Kumar 2012

8

最善の方法は、リストビューの下のボタンを設定する相対レイアウトです。この例では、ボタンを同じサイズで並べて配置する方が簡単なため、ボタンも直線的なレイアウトになっています。

<RelativeLayout android:id="@+id/RelativeLayout01" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent">

<ListView android:id="@+id/ListView01" 
android:layout_alignParentTop="true"
android:layout_width="fill_parent" 
android:layout_height="fill_parent">
</ListView>

<LinearLayout android:id="@+id/LinearLayout01" 
android:layout_below="@+id/ListView01" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true">
<Button android:id="@+id/ButtonJoin" 
android:text="Join"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_alignParentBottom="true">
</Button>
<Button android:id="@+id/ButtonJoin" 
android:layout_alignRight="@id/ButtonCancel" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Cancel"
android:layout_alignParentBottom="true">
</Button>
</LinearLayout>

</RelativeLayout>

問題は、リストビューが長すぎる場合、下部のボタンの上に拡張されることです。ボタンの上で停止する方法がわかりません。
クレプティーン

2
RelativeLayoutルールを使用する場合、(1.5、おそらく1.6と思われる)を使用している場合は、ListViewの前にボタンを配置する必要があります。それらを過ぎて。
Tim H

これは私にはうまくいきません。Tim Hが言うように、私にとっては、上記のrepocの回答のように、LinearLayoutの後にListViewを配置してから、ListViewをlayout_aboveにする必要があります。
Nemi

これは機能せず、ボタンは画面に表示されず、スクロールしません
Vaibhav Mishra

1

私はこの投稿がかなり古いことを知っていますが、元の投稿者の質問に答えるために、コードが機能しなかった理由は、buttons.getId()が-1を返したためです。これを行う場合は、call buttons.setId(10)などの設定を行う必要があります。その場合、コードは問題なく機能します。


0

これはうまくいくはずです。リストビューの上にもボタンを配置するには、ボタンを別の線形レイアウト内に配置します。

<LinearLayout> main container // vertical

<LinearLayout> scrollview must be contained in a linear layout //vertical - height to fill parent

    <ScrollView> set the height of this to fill parent

        <ListView> will be contained in the scrollview
        </ListView>

    </ScrollView>

</LinearLayout>

<LinearLayout> //horizontal - height to wrap content

<Button>

</Button>

</LinearLayout>

</LinearLayout>

0

最も簡単な解決策は、2つの線形レイアウトを作成することです。1つはボタンを使用し、もう1つはリストビューを使用します(ボタンの高さでコンテンツをラップし、リストレイアウトの高さで親を一致させます)。次に、リストビューでレイアウトの上にスクロールビューを作成するだけで、ボタンレイアウトは無視されます。それが役に立てば幸いです。申し訳ありませんが、コードを書きたくありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.