申し分なく、この特定のレイアウトは単に私を悩ます。また、リストビューがボタンの上に拡張されず、ボタンが常に画面の下部にスナップされるように、ボタンの列が下部にある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);
これがあなたが探しているものだと思います。
<?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>
私は長年にわたって同じ問題を抱えていました。
ListViewをボタンの上に保持するが、リストが長いときにボタンを隠さないようにする解決策は、ListViewでAndroid:layout_weight = "1.0"を設定することです。ボタンのlayout_weightを未設定のままにしておくと、ボタンは自然なサイズのままになります。そうしないと、ボタンが拡大縮小されます。これは、LinearLayoutで機能します。
Android ApiDemos: ApiDemos/res/layout/linear_layout_9.xml に例があります
私はこの質問に対する答えを探していましたが、これは最初の結果の1つでした。 「ベストアンサー」として現在選択されているものを含め、すべての回答が、質問されている問題に対処していないように感じます。述べられている問題は、2つのコンポーネントButton
とListView
のオーバーラップがあり、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_weight
をListView
に追加していた次のビットに役立ちます
これがお役に立てば幸いです。
最良の方法は、リストビューの下にボタンを設定する相対レイアウトです。この例では、ボタンを同じサイズで並べて配置する方が簡単なため、ボタンも線形レイアウトになっています。
<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>
私はこの投稿がかなり古いことを知っていますが、元の投稿者の質問に答えるために、コードが機能しなかった理由は、buttons.getId()が-1を返すことでした。これを行う場合は、button.setId(10)を呼び出すような設定を行う必要があります。そうすれば、コードは問題なく動作します。
これは動作するはずです。リストビューの上にボタンを配置するには、ボタンを別の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>
最も簡単な解決策は、2つの線形レイアウトを作成することです。1つはボタンを使用し、もう1つはリストビューを使用します(コンテンツをボタンの高さでラップし、親をリストレイアウトの高さと一致させます)。リストビューでレイアウト上にスクロールビューを作成するだけで、ボタンレイアウトは無視されます。それが役立つことを願って、申し訳ありませんが、コードを書き出す気がしませんでした。