不能在FracmentTransaction.replace的片段中使用layout_centerInParent

时间:2014-07-10 15:58:39

标签: android android-layout android-fragments

我有一个活动,其中我想要显示一个片段。活动的代码如下:

public class ProductListingActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_product_listing);

    Fragment currentFragment = new ProductListFragment();
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.setCustomAnimations(enterAnim, exitAnim);
    transaction.replace(R.id.rootView, currentFragment);
    transaction.show(currentFragment);
    transaction.commit();
    getFragmentManager().executePendingTransactions();
}

这是activity_product_listing.xml的代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black" >

</RelativeLayout>

ProductListFragment只是一个具有以下布局的普通片段:

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

    <include
        id="@+id/headerView"
        android:layout_alignParentTop="true"
        layout="@layout/subview_home_top_title_with_back_button" />

    <ImageView
        android:id="@+id/loadingImg"
        android:layout_width="match_parent"
        android:layout_height="@dimen/home_logo_smaller_height"
        android:layout_centerInParent="true"
        android:contentDescription="@null"
        android:scaleType="fitCenter"
        android:src="@drawable/logo_main" />

</RelativeLayout>

我的目的是在活动的rootView RelativeLayout的位置显示片段,但问题是片段的ImageView(标识为loadingImg)不显示在活动的中心虽然我已设置android:layout_centerInParent="true",但它显示在所包含的视图(ID为headerView)的正下方。

我无法发现我的代码有任何问题,可能是我误解了FragmentTransaction.replace()。我使用Android.app.Fragment,而不是兼容库中的片段(如果重要的话)。有谁知道如何解决这一问题?

1 个答案:

答案 0 :(得分:0)

我找到了问题的原因。这是因为当添加到视图时,尽管声明了match_parent,但片段的根视图未设置为match_parent。我将片段根视图的布局参数设置为match_parent,如下所示:

// Expand our root view to fill parent view
RelativeLayout.LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mView.findViewById(R.id.outerWrapper).setLayoutParams(params);