2010-06-22 54 views
15

我敢肯定,我錯過了一些簡單的事情來實現它,但已經通過每一個已知的組合,我可以拿出來得到我是什麼希望能夠工作。當ListView項不填充頁面時,我試圖讓ListView頁腳位於屏幕的底部。Android的ListView頁腳視圖不被放置在屏幕的底部

例如,我有一個帶有三個項目的ListView和一個FooterView(使用ListView的addFooterView)的頁面,我希望該footerView坐在屏幕的底部。當ListView包含足夠的項目以滾動屏幕時,footerView應位於列表的末尾(而不是屏幕的底部)。

下面列出了我嘗試使用的XML。任何和所有的幫助非常感謝!

Layout.xml

<?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" 
android:background="@+drawable/background"> 
<ListView 
    android:id="@+id/menu" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:listSelector="@android:color/transparent" 
    android:divider="@null"> 
</ListView></RelativeLayout> 

ListViewRow.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
style="@style/Nationwide.menu"> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/nav_item" 
    style="@style/Nationwide.menu.row"> 
    <ImageView 
     android:id="@+id/image_icon" 
     style="@style/Nationwide.menu.leftIcon" /> 
    <TextView 
     android:id="@+id/nav_text" 
     style="@style/Nationwide.menu.text" /> 
    <ImageView 
     android:id="@+id/chevron_symbol" 
     style="@style/Nationwide.menu.rightIcon" /> 
</LinearLayout> 
<View 
    android:layout_height="1dp" 
    android:background="@drawable/nav_item_divider_dark" /> 
<View 
    android:layout_height="1dp" 
    android:background="@drawable/nav_item_divider_light" /></LinearLayout> 

ListViewFooter.xml

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

的Java

LayoutInflater inflater = this.getLayoutInflater(); 
    View footerView = inflater.inflate(R.layout.footer, null); 

    footerView.findViewById(R.id.footer_image).setBackgroundDrawable(resources.getDrawable(R.drawable.cone_footer)); 

    mMenuListView.addFooterView(footerView); 

到目前爲止我嘗試的事情包括:

  • 添加頁腳視圖作爲以上所示
  • 添加繪製資源爲對一個的ListView背景(這導致ListView中不跨越整個寬度在奇數的方式在屏幕和滾動的由於9貼片可拉伸區域)
  • 添加cone_footer作爲單獨的視圖中的佈局

提前感謝!

+0

我很抱歉,但我沒有添加足夠的Java代碼。在將footerView添加到listView後,將運行此代碼。 mMenuListView.setAdapter(panel); – 2010-06-22 14:12:30

回答

3

如果其他人在尋找類似的答案,這裏是我最終做的解決我所遇到的問題。由於我希望添加的「頁腳」僅僅是一個圖像來填充屏幕上的一些空間(因爲當視圖很短時),而且ListView方法並不是我實現時所需要的,所以我們結束了這個作爲我們的XML佈局:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res/com.example.android.apis" 
    style="@style/company.mainContainer"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical"> 
     <!-- enter page content here --> 

     <View android:layout_height="0px" android:layout_weight="1" 
      android:visibility="invisible" /> 

     <ImageView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|right" 
      android:scaleType="fitXY" 
      android:src="@drawable/footer_cone"> 
     </ImageView> 

    </LinearLayout> 

</ScrollView> 

希望這可以幫助別人!

16

我希望footerView坐在屏幕的底部 。

這不是addFooterView()的工作原理。

當ListView中包含足夠的項目滾動屏幕時, footerView應該坐下在 結束列表(而不是在 屏幕的底部)。

那也不是addFooterView()的工作方式。

如果您希望它與列表一起滾動(例如,如果三個列表項佔據屏幕的上半部分,則頁腳正好在三個項目的下面),然後使用addFooterView() ...但是隨後頁腳始終滾動列表。

如果您不希望它與列表一起滾動,一種方法是使用RelativeLayout作爲您的父級,將您的頁腳錨定到屏幕底部,並讓ListView位於頁面頂部和頁腳之間。但是,頁腳從不滾動。

+0

啊,所以如果內容沒有填滿屏幕並滾動,沒有辦法將視圖有條件錨定到屏幕的底部? 回到設計師我們去...真棒。 感謝您的回覆。 – 2010-06-22 14:30:07

+2

現在我又讀了一遍,我不清楚設計師想要什麼。 他們希望頁腳與此列表一起滾動:如果列表(包含頁腳)小於屏幕,強制頁腳對齊屏幕底部。否則,只需在最後一個listView行之後顯示它即可。 – 2010-06-22 14:32:53

+0

@George Walters II:Android內置的任何東西都可以簡單地實現這一目標。正如tlayton所暗示的那樣,可能有一種方法可以實現類似的外觀,但是很困難,並且可能以UX爲代價(例如,不再可以通過D-pad導航)。 – CommonsWare 2010-06-22 14:51:28

1

你想要做的事實際上很複雜。您希望「頁腳」與列表一起滾動(有時至少),這意味着它需要包含在ListView佈局中。但是,你也有(其他時候)需要將相同的頁腳放置在相對於屏幕的位置,或者更準確地說,相對於ListView的某些父佈局(或父 - 母等),這意味着不需要包含頁腳在ListView中。這兩種情況需要相互排斥所涉及的元素。

雖然這不是糟糕的SDK設計部分。從你的描述看來,你可能會以錯誤的方式思考問題。從概念上講,這個元素是否真的是頁腳,如果它不總是在列表的「腳」上,但有時候一直在屏幕的底部?你可以通過組合ListViews,ScrollViews,RelativeLayouts和一些android:layout_height技巧來製作你想要的佈局。然而,簡單地採取替代方法來設計您的設計可能會更好。

+0

那麼,它應該是語義上的列表頁腳,我認爲我需要做的就是動態地在視圖之前添加一個視圖,該視圖將放置適當的空間以將圖像放置在我們想要的位置。 – 2010-06-22 14:55:39

+0

嗨, 我需要幫助,在我的列表視圖中設置頁腳,並擴大列表,當我點擊頁腳事件,讓我指導方針做同樣的事情,請給我一步一步的過程。 – MGSenthil 2010-09-02 14:11:18

1

同樣喜歡這個

<RelativeLayout> 
    <include android:id="@+id/header" layout="@layout/header" android:layout_width="fill_parent" android:layout_alignParentTop="true" /> 

    <include android:id="@+id/footer" layout="@layout/footer" android:layout_width="fill_parent" android:layout_alignParentBottom="true" /> 

    <ListView android:layout_below="@id/header" android:layout_above="@id/footer"/> 
</RelativeLayout> 
1

這裏是保證金招我用才達到這種行爲。

基本上,您將ListView設置爲wrap_content,並且您使用負邊距將Button置於ListView底部邊距空間中。

這使用固定高度,但您也可以在運行時測量按鈕,並設置正向和負向邊距。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ListView 
    android:id="@+id/list_item" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="50dp" 
    android:layout_alignParentTop="true" /> 

<Button 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:layout_below="@+id/list_item" 
    android:paddingBottom="@dimen/margin" 
    android:layout_topMargin="-50dp" 
    android:paddingTop="@dimen/margin" 
    android:text="@string/add" /> 

</RelativeLayout> 
相關問題