13

画面の上部にテキスト ビューがあり、画面の下部に下部バーがあるレイアウトを構築しようとしています。これらの各ビューは固定されたままにし、2 つのビューの間に ListView を配置する必要があります。

TOPBAR
LISTVIEW (scrollable)
BOTTOM BAR

私のレイアウト (以下を参照)はほとんど機能します。上部と下部のコンポーネントは固定されたままで、リストビューはスクロールします。「問題」は、ListView の最後の行が下部のバーの後ろに隠れていることです。

レイアウトを調整する方法について何か提案はありますか?

ありがとう!

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
            android:layout_alignParentTop="true"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            >
        <TextView
                android:background="@drawable/blackgrad"
                android:gravity="center"
                android:id="@+id/title"
                android:layout_height="50dip"
                android:layout_width="fill_parent"
                android:text="blah blah"
                android:textColor="#ffffff"
                android:textSize="18sp"
                />
        <ListView
                android:background="#ffffff"
                android:cacheColorHint="#ffffffff"
                android:id="@android:id/list"
                android:layout_height="fill_parent"
                android:layout_width="fill_parent"
                />
    </LinearLayout>
    <LinearLayout
            android:background="#efefef"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_width="fill_parent"
            android:layout_height="50dip"
            android:orientation="horizontal">
        <Button
                android:layout_height="wrap_content"
                android:id="@+id/back"
                android:text="Back"
                android:layout_width="wrap_content" />

        <Button
                android:layout_height="wrap_content"
                android:id="@+id/home"
                android:text="Home"
                android:layout_width="wrap_content" />

        <Button
                android:layout_height="wrap_content"
                android:id="@+id/next"
                android:text="Next"
                android:layout_width="wrap_content" />


    </LinearLayout>
</RelativeLayout>
4

6 に答える 6

28

ここで簡単な提案をします。新しい XML を作成し、これを試してみてください。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <TextView
        android:text="Header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
    <TextView
        android:text="Footer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_gravity="bottom"/>
</LinearLayout>
于 2010-10-21T17:44:53.600 に答える
5

OPs レイアウトの問題は、最初の線形レイアウトがandroid:layout_height="fill_parent"親を埋めるように設定されていることです。さらにビューを追加しようとしていることはわかりません。あなたがしなければならないことは、サイズを知っている順序でビューを追加することです。トップパーとボトムバーのサイズがわかるので、それらを として追加できますandroid:layout_height="wrap_content"。次に、コンパイル時にサイズが不明であるため、リストビューを追加します。

于 2010-10-21T17:44:03.850 に答える
4

ID と layout_below/layout_above 属性を使用して、同様の方法であなたがやろうとしていることを達成しました。のView配置は異なりますが、最終的な結果は同じです。上に 1 つ、下に 1 つ、ListView他の 2 つの の間のA。LinearLayout

あなたは私が持っているListViewことがわかります:

android:layout_above="@+id/event_list_buttons"
android:layout_below="@id/title_container"

これらの属性ListViewは、 top と bottomLinearLayoutの間に配置されます。

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

    <LinearLayout style="@style/TitleBar">
        <ImageView style="@style/TitleBarLogo" android:src="@drawable/logo_small_transparent" />

        <View style="@style/TitleBarSpring" />

        <ImageView style="@style/TitleBarSeparator" />
        <ImageButton style="@style/TitleBarAction" android:src="@drawable/ic_title_refresh"
            android:id="@+id/title_refresh_button" android:onClick="onClick" />
        <ProgressBar style="@style/TitleBarProgressIndicator"
            android:id="@+id/title_refresh_progress" android:visibility="gone" />

        <ImageView style="@style/TitleBarSeparator" />
        <ImageButton style="@style/TitleBarAction" android:src="@drawable/ic_title_search" />
    </LinearLayout>

    <ListView android:layout_width="fill_parent"
        android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/android:list" android:layout_above="@+id/event_list_buttons"
        android:layout_below="@id/title_container" android:fastScrollEnabled="true"
        android:background="@color/white"></ListView>

    <LinearLayout android:layout_width="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/event_list_buttons"
        android:layout_height="wrap_content" android:layout_alignParentBottom="true"
        android:gravity="center_horizontal">

        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/events_list_view_organizing_button"
            android:text="Organizing" android:onClick="onClick"></Button>
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/events_list_view_attending_button"
            android:text="Attending" android:onClick="onClick"></Button>

    </LinearLayout>
</RelativeLayout>
于 2010-10-21T17:14:40.237 に答える
3

このような問題がありました。2 つではなく 3 つのレイアウトを使用し、この種のソリューションを使用しました。

  • 上記のソリューションのように、3 つのレイアウトは RelativeLayout に格納されます。
  • リストビューを含むレイアウトは、android:layout_below を使用して「トップバー」(firstLayout) にリンクされます
  • android:layout_alignParentBottom="true" を使用して、3 番目のレイアウトが「ボトムバー」になります。
  • そして最も重要なこと(あなたの問題):リストビューを含むレイアウトに android:layout_marginBottom を追加します。十分なマージンを見つける前に、値を何度か調整する必要がありました。

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/firstLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:orientation="horizontal" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center_vertical"
            android:layout_marginTop="10dip"
            android:text="@string/show_history_text" />
    </LinearLayout>
    
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/secondLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/firstLayout"
        android:layout_marginBottom="50dip" >
    
        <ListView
            android:id="@+id/ListNotes"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/thirdLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/LightSteelBlue"
        android:gravity="left"
        android:orientation="horizontal" >
    
        <Button
            android:id="@+id/btnClose"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:gravity="center_vertical|left"
            android:onClick="BtnCloseClick"
            android:text="@string/btn_close_history_text" />
    </LinearLayout>
    

于 2012-10-23T07:22:08.917 に答える
2

線形レイアウトに囲まれているときに、layout_weight を使用してこれを行う別の方法を見つけました。ListView の重みを任意の大きな値に設定し、静的な下部バーの重みを非常に小さな値に設定すると、効果が機能します。リスト ビューとボトム バーの高さの両方を「wrap_content」に設定して、すべてを連携させる必要があります。

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

    <ListView 
        android:id="@android:id/list" 
        android:padding="5dp"
        android:divider="@color/bg"
        android:dividerHeight="4dp"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:layout_weight="20"
        >
    </ListView>

     <TextView android:text="Sorry, no results were found" android:id="@android:id/empty" android:layout_width="fill_parent" android:layout_height="fill_parent"></TextView>


    <include layout="@layout/bottom_bar"  android:layout_weight=".1" android:id="@+id/bottomBar" android:layout_alignParentBottom="true" android:layout_width="fill_parent" android:layout_height="wrap_content"></include>

于 2011-10-28T05:22:56.087 に答える
1

この投稿だけで簡単な解決策だと思うことがわかりました

それぞれの場合に android:layout_alignParentBottom="true" と android:layout_alignParentTop="true" を追加するビューリストの前に両方のバーを宣言するだけです。

次に、android:layout_above="id_of_footer" および android:layout_below="id_of_header" プロパティを使用してそれらの間に設定したビューリスト レイアウトを指定します。

これは私のアプリの実例です。フッターバーのみ。

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

<LinearLayout
    android:id="@+id/bottom_bar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="#333333"
    android:padding="@dimen/padding_small" >

    <Button
        android:id="@+id/bt_add_session"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="addSession"
        android:text="@string/add_session" />

    <TextView
        android:id="@+id/lb_summary"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="@string/summary_example"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="#FFFFFF" />
</LinearLayout>

<ListView
    android:id="@+id/vl_sessions"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/bottom_bar" >
</ListView>

于 2012-09-10T17:17:56.597 に答える