使用Fragment显示活动的视图覆盖FrameLayout

时间:2014-09-25 19:21:10

标签: java android android-layout android-fragments

我有以下活动:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="es.xxx.xxx.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:background="#CCFF0000"
        android:id="@+id/lyNetworkError">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="No hay conexión a internet"
                android:textAlignment="center"/>

        </LinearLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/container"/>

</RelativeLayout>

在其FrameLayout中,应用程序将加载其他片段。

这是onCreate活动代码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Constants.setAppContext(this);
        setContentView(R.layout.activity_main);

        Log.d("LoadFragment", "1 "+ loadFragment);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.container, new MainFragment()).commit();
        }
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(networkStateReceiver, filter);

        fragmentManager = getSupportFragmentManager();
        lyNetworkError = (LinearLayout) findViewById(R.id.lyNetworkError);

    }

问题在于LinearLayout(包含TextView)没有显示(可以通过LinearLayout呈现片段渲染,因为如果我删除了getSupportFragmentManager().beginTransaction().replace(R.id.container, new MainFragment()).commit();,则会出现LinearLayout)

那么,如何在片段上显示LinarLayout(在FrameLayout中加载)?

1 个答案:

答案 0 :(得分:1)

如果LinearLayout和您的Fragment显示在屏幕上的正确位置时,每个单独显示,那么您可以简单地颠倒FrameLayout和{{的顺序XML中的1}}。

问题是LinearLayout允许其子项重叠。 RelativeLayout中的最后一项将显示在&#34;以上&#34;或者&#34;在顶部&#34;布局中的其他项目。由于您尚未为视图指定任何布局限制,因此RelativeLayout会将它们都放在默认位置(即左上角)。由于您的RelativeLayout设置为填充父视图的宽度和高度,因此它将覆盖其他所有内容。

如果您确实希望FrameLayout显示在LinearLayout上方,那么您可以使用FrameLayout的定位属性(explained very well here)来定位您的观看次数。 具体来说,你会找到这样的东西:

RelativeLayout

<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/lyNetworkError" android:id="@+id/container"/> 属性告诉android:layout_below您希望它始终位于ID为FrameLayout的视图下方(下方与文字在一张纸上,而不是在三维中空间)。