活动重叠在棒棒糖的片段

时间:2015-02-08 08:08:04

标签: android android-fragments android-5.0-lollipop

我想从Fragment调用一个简单的Activity。它在棒棒糖前工作正常。但是在棒棒糖设备上,活动布局的Button与片段布局重叠。这是我的代码:

MyFragment

public class MyFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater,  ViewGroup container, Bundle savedInstanceState) {
    return  inflater.inflate(R.layout.layout_myfragment,container,false);
}}

MainActivity

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

    MyFragment frag = new MyFragment();
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.fragment, frag , "TagMy");
    transaction.commit();
}

MainActivity的布局:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:id="@+id/main">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="120dp" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragment">
     </RelativeLayout>


</RelativeLayout>

Fragment 的布局:

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:background="#ff0000">
</FrameLayout>

enter image description here

2 个答案:

答案 0 :(得分:0)

你需要在RelativeLayout main中有一个片段容器。

对于片段容器,使用RelativeLayout或FrameLayout。

在XML中,将片段容器放在主布局中,然后放在Button和TextView之后。原因是当小部件占用相同的空间时(就像你的情况下你的按钮和片段容器一样),最后一个出现在你的XML文件中的是最后一个。

您不应将主布局用作片段容器。

编辑:一旦更改了XML文件(使用RelativeLayout或FrameLayout作为容器),您需要更新FragmentTransaction以使用此容器:

transaction.add(R.id.fragment, frag , "TagMy");

此外,我可以在您的代码中看到您在XML文件中创建了一个Fragment。我认为这是你想用作容器的东西。你不应该这样做是因为你混合了两种片段方法:静态和动态。如果在XML中设置Fragment,它是静态的,无法删除,但如果只在XML中设置容器,然后使用FragmentManager在代码中实例化片段(就像你在做的那样);你是动态添加它们。

因此,再次使用RelativeLayout或FrameLayout,但不使用Fragment作为容器。并更新您的FragmentTransaction。 =)

答案 1 :(得分:0)

嘿,你肯定已经开始了,但我遇到了同样的问题,在我的情况下,按钮重叠了片段,因为它有一个高程。

Elevation仅适用于Lollipop,因为它是Lollipop中引入的Material Design的一部分。

我现在才开始玩它。

所以要回答你的问题,如果你的问题也是由于海拔升高,你可以摆脱海拔,或者给你的碎片提供更高的海拔(在片段的主要布局上设置海拔)。

我希望它有所帮助。