Désolé pour l'immense vidage de code, mais je suis vraiment perdu.
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;
Notes: mRootView est un ViewGroup global, pas de problème, je crois. PlacesFragment est un ListFragment.
Disposition:
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>
Problème: comme vous pouvez le voir, le comportement attendu serait que le TextView vide ci-dessus apparaisse centré sur l'écran. Sur l'aperçu de la conception dans Eclipse, c'est OK. Ce n'est que lorsqu'il est ajouté à root_view en tant que fragment que FrameLayout ne remplira pas tout l'écran.
root_container est bleu et FrameLayout est jaunâtre, voir ci-dessous à des fins de débogage. Le volet jaune ne doit-il pas remplir tout l'écran?!?!?!?
J'ai eu le même problème et je pense que cela se produit lorsque vous gonflez la mise en page dans onCreateView du fragment avec null, comme vous l'avez fait ici:
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
Au lieu de cela, vous devez faire ceci:
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content,container, false);
Où conteneur est le groupe de vues. Au moins, cela a résolu le problème pour moi.
<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>
J'ai dû changer layout_height = "wrap_content" en "match_parent" pour le faire fonctionner.
Pour une raison quelconque, FrameLayout ne tire pas sa mise en page du XML.
Je dois le définir également dans le code (onCreateView de Fragment):
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;
La façon dont je l'ai fait était de créer une image transparente dans du code xml, de faire du fragment une disposition relative et de makelayout_alignParentBottom="true"
dans le ImageView
, de cette façon l'image colle au bas et fait que le fragment remplisse le parent
Code ici:
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" />