2014-04-21 65 views
1

看起來很簡單,固執地說這個ListView不會居中(或者它的內容在 - 對我無關緊要)。居中ListView橫向

這是活動佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.drobiazko.den.mobineon.MainActivity" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:gravity="center_horizontal" 
    android:background="@drawable/bg"> 

    <RelativeLayout android:id="@+id/clock_container" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <!--<RelativeLayout android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:background="@android:color/holo_blue_dark">--> 

     <com.drobiazko.den.mobineon.ListViewRowsHeight 
      android:id="@+id/listview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:overScrollMode="never" 
      android:scrollbars="none" 
      android:divider="@null" 
      android:listSelector="@android:color/transparent" 
      android:persistentDrawingCache="scrolling|animation" 
      android:background="@android:color/holo_green_dark" /> 
    <!--</RelativeLayout>--> 
</LinearLayout> 

這是ListView的項目佈局:

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

    <ImageView android:id="@+id/btn_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     style="@style/custom_btn_icon" /> 

    <TextView android:id="@+id/btn_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     style="@style/custom_btn_name" /> 

    <TextView android:id="@+id/btn_count" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     style="@style/custom_btn_count" /> 
</RelativeLayout> 

我用盡了一切(包括簡化佈局到最大),但它仍然不會去。

有趣的是,由於父LinearLayout的android:gravity="center_horizontal",第一個相對佈局clock_container - 中心像一個魅力。爲什麼不會ListView?

後來補充: 通過FOliveira的回答啓發,我已經做了一些調查,發現: 一切正常,家長LinearLayoutandroid:gravity="center_horizontal"恭敬地中心他的孩子。 ListView的子項左對齊的原因是ListView儘管具有android:layout_width="wrap_content"屬性,但仍具有所有可能的寬度。

任何人都知道這是爲什麼?

+0

'ListView'將'wrap_content'作爲'layout_height'。永遠不要這樣做,這違背了ListView的目的,並且不能正常工作。 –

+0

不是我懷疑你的意見,但它的工作原理!也許是因爲我的ListView適配器設置爲只顯示6個項目,並允許滾動其餘的所有內容... –

+1

我意識到它並不真正與您的問題相關,但將'wrap_content'放在ListViews的高度是一些東西你永遠不應該這樣做。 'ListView'不是爲此設計的,只是想一想:你有一個'ListView',因爲你想滾動一堆不適合屏幕的項目。通過將'wrap_content'設置爲'layout_height',您告訴'ListView'完全相反,與所有子視圖的組合一樣高。像'wrapper_content'這樣的'ListView'只會導致長期的問題。這同樣適用於任何'ScrollView'。 –

回答

0

首先,我會刪除第一個線性佈局,只保留相對佈局作爲父級。

將相對佈局設置爲主要父級後,請將CENTER_IN_PARENT屬性設置爲true。

您所犯的錯誤是您將線性佈局子的重力設置爲居中水平,這是正確的,但受此選項影響的唯一子項是相對佈局本身。

+0

這裏沒有錯 - 看我編輯的問題。 –