web-dev-qa-db-ja.com

Androidフラグメントは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

40
davidcesarino

私は同じ問題を抱えていたので、ここで行ったように、フラグメントのonCreateViewのレイアウトをnullで膨らませると起こると思います。

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

代わりに、これを行う必要があります。

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

コンテナはビューグループです。少なくとも、それは私のために問題を解決しました。

73
Norman
<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"に変更する必要がありました。

5
user1070356

何らかの理由で、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;
4
davidcesarino

私がやった方法は、xmlコードで透明な画像を作成し、フラグメントを相対レイアウトにしてmakelayout_alignParentBottom="true"ImageViewで、この方法で画像が下にくっついて、フラグメントが親を埋めます

ここにコード:

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_my_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" />
0
Diogo Peres