我有一个活动,其中我想要显示一个片段。活动的代码如下:
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,而不是兼容库中的片段(如果重要的话)。有谁知道如何解决这一问题?
答案 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);