2011-10-28 102 views
36

對不起,代碼轉儲巨大,但我真的迷失了。Android Fragment不尊重match_parent作爲高度

MyActivity.java的onCreate:

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_singlepane_empty); 
mFragment = new PlacesFragment(); 
getSupportFragmentManager().beginTransaction() 
        .add(R.id.root_container, mFragment) 
        .commit(); 

PlacesFragment.java onCreateView:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null); 
return mRootView; 

注意:mRootView是關於它的ViewGroup中全球性的,沒有問題,我相信。 PlacesFragment是一個ListFragment。

佈局:

activity_singlepane_empty.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root_container" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#00f"> 
    <include layout="@layout/actionbar"/> 

    <!-- FRAGMENTS COME HERE! See match_parent above --> 

</LinearLayout> 

list_content.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/listContainer" 
     android:background="#990" 
     > 

     <ListView android:id="@android:id/list" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:drawSelectorOnTop="false" /> 

     <TextView android:id="@id/android:empty" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:gravity="center" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="@string/no_data_suggest_connection"/> 

</FrameLayout> 

問題:你可以看到,預期的行爲將有空上面的TextView在屏幕上居中顯示。在Eclipse中的設計預覽中,它是可以的。只有在作爲片段添加到root_view時,FrameLayout纔會填滿整個屏幕。

root_container是藍色的,FrameLayout是淡黃色的,請參閱下面的調試目的。 黃色窗格不應該填滿整個屏幕嗎?!?!?!?

enter image description here

+0

如果你使用ScrollView checkout這個:http://stackoverflow.com/questions/10211338/view-inside-scrollview-doesnt-take-all-place –

回答

69

我有同樣的問題,並認爲當你在該片段中的onCreateView與零膨脹的佈局,像你這樣在這裏發生的情況:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null); 

相反,你必須這樣做:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content,container, false); 

其中包含3個ner是Viewgroup。至少,這解決了我的問題。

+2

http://developer.android.com/reference/android/view/LayoutInflater.html 可選視圖是生成的層次結構的父級(如果attachToRoot爲true),或者只是提供一組LayoutParams的對象返回層次結構的根值(如果attachToRoot爲false)。 接受的答案。謝謝。 – davidcesarino

+1

另請參閱http://stackoverflow.com/questions/5026926/making-sense-of-layoutinflater – Stevie

3

出於某種原因,FrameLayout裏沒有得到來自XML的佈局。

我還需要將其設置爲代碼(片段的onCreateView):

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null); 
FrameLayout fl = (FrameLayout) mRootView.findViewById(R.id.listContainer); 
fl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
return mRootView; 
+0

這是一個古老的答案。從那以後,我將驗收標記轉換成諾曼的答案。當然這個答案提供了更多的靈活性,但我很高興接受他,因爲這個問題顯然是一個易於使用的解決方案。 – davidcesarino

0

我做這件事的方法是建立在XML代碼透明圖像,使片段的相對佈局,並在ImageViewlayout_alignParentBottom="true",這樣的圖像粘在底部,使片段填補父

代碼這裏:

temp_transparent.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:thickness="0dp" 
    android:shape="rectangle"> 
<gradient 
    android:startColor="#00000000" 
    android:endColor="#00000000" 
    android:type="linear" 
    android:angle="270"/> 

fragment_m y_invites。XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:id="@+id/my_invites_fragment" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="#ffffff"> 


<ListView 
    android:id="@+id/list_invites" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:divider="@color/list_divider" 
    android:dividerHeight="1dp" 
    android:layout_alignParentTop="true" > 
</ListView> 

<ImageView 
    android:id="@+id/transparent_image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentBottom="true" 
    android:layout_below="@id/list_invites" 
    android:src="@drawable/temp_transparent" /> 

4
<android.support.v4.widget.NestedScrollView 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    android:fillViewport="true" 
    > 

    <include layout="@layout/screen_main_fragment" /> 

</android.support.v4.widget.NestedScrollView> 

我不得不改變layout_height = 「WRAP_CONTENT」 到 「match_parent」,使其工作。

相關問題