web-dev-qa-db-ja.com

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

申し分なく、この特定のレイアウトは単に私を悩ます。また、リストビューがボタンの上に拡張されず、ボタンが常に画面の下部にスナップされるように、ボタンの列が下部にあるlistViewを持つ方法を見つけることができないようです。私が欲しいものは次のとおりです。

死んだ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);
101
Kleptine

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

<?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>
135
lars

私は長年にわたって同じ問題を抱えていました。

ListViewをボタンの上に保持するが、リストが長いときにボタンを隠さないようにする解決策は、ListViewでAndroid:layout_weight = "1.0"を設定することです。ボタンのlayout_weightを未設定のままにしておくと、ボタンは自然なサイズのままになります。そうしないと、ボタンが拡大縮小されます。これは、LinearLayoutで機能します。

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

57
David Ingram

私はこの質問に対する答えを探していましたが、これは最初の結果の1つでした。 「ベストアンサー」として現在選択されているものを含め、すべての回答が、質問されている問題に対処していないように感じます。述べられている問題は、2つのコンポーネントButtonListViewのオーバーラップがあり、ListViewが画面全体を占有し、Buttonが視覚的に上に浮いていることです(前面of)ListView(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を使用していることに注意してください。

これは、ボタンが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_weightListViewに追加していた次のビットに役立ちます

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

20
Dallas

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

<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>
8
Patrick Kafka

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

1
Doo Dah

これは動作するはずです。リストビューの上にボタンを配置するには、ボタンを別のlinearlayout内に配置します。

<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
Rhys

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

0
Pete