无法以编程方式添加RelativeLayout

时间:2016-10-15 10:40:16

标签: android

我无法以编程方式将RelativeLayout添加到现有的xml布局中。仅显示xml布局。分享我的代码

fragment_home.xml:

<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="com.timetable.act.MainActivity$PlaceholderFragment" 
android:id="@+id/homeLayout"
android:background="@color/white">  


<ImageButton
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_marginTop="380dp"
    android:layout_marginLeft="240dp"
    android:background="@drawable/circle"
    android:id="@+id/addEvent"
    android:src="@drawable/ic_mode_edit_white_24dp"
    android:layout_gravity="right|bottom"
    android:contentDescription="@string/hello" />
</RelativeLayout>

PlaceholderFragment.java

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = null;

        switch (Integer.valueOf(getArguments().get(ARG_SECTION_NUMBER).toString())) {
        case 1:
            rootView = inflater.inflate(R.layout.fragment_home, container, false);
            displyAllEvent(rootView);

            break;
        case 2:
            rootView = inflater.inflate(R.layout.fragment_setting, container, false);
            break;
        default:
            rootView = inflater.inflate(R.layout.fragment_main, container, false);
            break;
        }
        return rootView;
    }
private void displyAllEvent(View mainView){
        Drawable drawableShadow = ContextCompat.getDrawable(getActivity(),R.drawable.tile_shadow);

        RelativeLayout tileLayout = new RelativeLayout(getActivity());
        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);

        tileLayout.setBackground(drawableShadow);
        tileLayout.setPadding(R.dimen.tilePadding,R.dimen.tilePadding,R.dimen.tilePadding,R.dimen.tilePadding);
        tileLayout.setLayoutParams(rlp);
        tileLayout.setId(999);

        RelativeLayout.LayoutParams titleLayout = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);

        TextView titleView = new TextView(getActivity());
        titleView.setText("Testing title with test");
        titleView.setId(111);
        titleView.setTextColor(R.color.white);
        titleView.setLayoutParams(titleLayout);

        tileLayout.addView(titleView);

        RelativeLayout.LayoutParams textLeftLayout = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        textLeftLayout.addRule(RelativeLayout.BELOW, titleView.getId());

        TextView startHView = new TextView(getActivity());
        startHView.setText("left Text");
        startHView.setId(222);
        startHView.setTextColor(R.color.white);
        startHView.setLayoutParams(textLeftLayout);

        tileLayout.addView(startHView);

        RelativeLayout.LayoutParams textRightLayout = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        textRightLayout.addRule(RelativeLayout.BELOW, titleView.getId());
        textRightLayout.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        textLeftLayout.addRule(RelativeLayout.ALIGN_RIGHT, startHView.getId());

        TextView startMView = new TextView(getActivity());
        startMView.setText("Right Text");
        startMView.setId(333);
        startMView.setTextColor(R.color.white);
        startMView.setLayoutParams(textRightLayout);

        tileLayout.addView(startMView);

        RelativeLayout parentView = (RelativeLayout)mainView.findViewById(R.id.homeLayout);
        parentView.addView(tileLayout);
    }

输出: enter image description here

1 个答案:

答案 0 :(得分:0)

不是在运行时创建相对布局,而是可以简单地创建一个预先存在的子布局,其所有子窗口都可见... E.g:

if (myCondition) { 
    myLayout = (RelativeLayout) myContext.findViewById(R.id.myLayoutID);
    myLayout.setVisibilty(View.visible); 
    myLayoutTextView = (TextView) myContext.findViewById(R.id.myTextView);
    myLayoutTextView.setVisibility(View.VISIBLE);
}

如果布局中还有一个按钮,您希望在布局处于活动状态时可单击该按钮,则可以执行以下操作:

Button myButton = (Button) findViewById(R.id.myButton);
myButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        if (myCondition) {
            //Do Stuff Here
        }
});