无法将视图添加到片段

时间:2016-03-20 00:47:58

标签: android android-layout android-fragments android-linearlayout

我想以编程方式动态构建整个片段布局。所以我创建了这段代码:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.empty_container, container, false);

    final FrameLayout rootView = (FrameLayout) view.findViewById(R.id.empty_container);

    final LinearLayout linearLayout = new LinearLayout(getActivity());
    linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    linearLayout.setOrientation(LinearLayout.HORIZONTAL);
    linearLayout.setBackgroundColor(Color.BLACK);

    rootView.addView(linearLayout);

    final Button button = new Button(getActivity());
    button.setBackgroundColor(Color.GREEN);
    button.setText("button name");
    button.setLayoutParams(new LinearLayout.LayoutParams(100, 100));

    linearLayout.addView(button);

    return view;
}

和xml:

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

我无法弄清楚为什么这不能正常工作。按钮根本不可见(但线性布局是可见的 - 整个屏幕是黑色的)。当我将其中一个按钮布局参数设置为MATCH_PARENT时会突然显示,但是当我将其设置为100像素或WRAP_CONTENT时它不显示。

3 个答案:

答案 0 :(得分:0)

为什么不将根视图设为LinearLayout?然后你可以将根视图转换为LinearLayout,你不需要通过id找到它,因为你已经引用了它。此行还不确定您的意图linearLayout.setGravity(LinearLayout.HORIZONTAL);请检查此链接,了解有效值,以便setGravity http://developer.android.com/reference/android/view/Gravity.html

答案 1 :(得分:0)

按钮隐藏在工具栏下方,尺寸100px x 100px不足以显示它。层次结构查看器帮我解决了这个问题。

答案 2 :(得分:0)

看起来你正在添加它。 打开Android设备监视器,运行应用程序,然后使用树查看器检查您的DOM。您将能够看到是否将视图添加到DOM中。

developer.android.com/tools/help/hierarchy-viewer.html