45

无论我在哪里看,FrameLayout似乎都被用作FragmentContainer. 为什么FrameLayout总是看到用Fragments

4

3 回答 3

43

您基本上可以使用RelativeLayout或者LinearLayout它仍然可以使用,但是您的问题的答案在FrameLayout's 文档中:

FrameLayout 旨在阻止屏幕上的一个区域以显示单个项目。通常,应该使用 FrameLayout 来保存单个子视图,因为很难以一种可缩放到不同屏幕尺寸的方式组织子视图,而不会使子视图相互重叠。但是,您可以使用 android:layout_gravity 属性将多个子项添加到 FrameLayout 并通过为每个子项分配重力来控制它们在 FrameLayout 中的位置。

您可以在此处阅读更多信息FrameLayoutFrameLayout/Android 开发人员

于 2013-07-05T18:53:37.820 回答
21

框架布局的主要目的是阻止适合最大子视图所需的区域。如果您使用 Frame Layout 作为 Fragment Container,您可以确保始终有可用空间来容纳最大的 Fragment 布局。

在某些情况下,您可能需要同时在屏幕上显示超过 1 个片段,在这种情况下,您应该更喜欢相对或线性布局。

于 2013-07-05T19:13:37.793 回答
2

一切都基于用户要求和所需的定制。

根本不需要使用 FrameLayout。

例如在下面的代码中没有采用布局,并且片段本身仅包含单个 imageview 。

public class MyFragment extends Fragment implements OnClickListener{

    String TAG="MyFragment";
    Context c;
    MyFragment(Context con){
    c=con;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        ImageView v=new ImageView(c);
            //other imageview stuff

        return v;
    }
    @Overrides
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Log.i(TAG, "onClcik");

    }
}
于 2013-07-05T19:14:51.057 回答