以编程方式添加视图不起作用

问题描述:

我创建了很多自定义视图,我试图将它们添加到我的片段中。他们得到补充,但我似乎无法让他们去我想要的地方。应该有2列和3行,但最终为1列,所有自定义视图堆叠在一起。这里是我的代码添加视图和设置布局PARAMS的片段布局:以编程方式添加视图不起作用

RelativeLayout fm = (RelativeLayout) view.findViewById(R.id.fragmentLayout); 

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    CustomImages cs = new CustomImages(getActivity()); 
    cs.setId(R.id.one); 
    cs.setLayoutParams(params); 

    params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); 
    params.addRule(RelativeLayout.RIGHT_OF, cs.getId()); 
    CustomImages2 cs2 = new CustomImages2(getActivity()); 
    cs2.setId(R.id.two); 
    cs2.setLayoutParams(params); 

    RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params2.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    params2.addRule(RelativeLayout.BELOW, cs2.getId()); 
    CustomImages3 cs3 = new CustomImages3(getActivity()); 
    cs3.setId(R.id.three); 
    cs3.setLayoutParams(params); 

    RelativeLayout.LayoutParams params3 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params3.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); 
    params3.addRule(RelativeLayout.RIGHT_OF, cs3.getId()); 
    CustomImages4 cs4 = new CustomImages4(getActivity()); 
    cs4.setId(R.id.four); 
    cs4.setLayoutParams(params); 

    RelativeLayout.LayoutParams params4 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params4.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    params4.addRule(RelativeLayout.BELOW, cs4.getId()); 
    CustomImages5 cs5 = new CustomImages5(getActivity()); 
    cs5.setId(R.id.five); 
    cs5.setLayoutParams(params); 

cs3.setLayoutParams(params); 
cs4.setLayoutParams(params); 
cs5.setLayoutParams(params); 

我相信params应该与params2,分别为params3params4所取代。

UPDATE:
此外,你应该指定LAYOUT_BELOW是在不上头,并正确地做这一切的观点:

params2.addRule(RelativeLayout.BELOW, cs.getId()); // not cs2 
params3.addRule(RelativeLayout.BELOW, cs2.getId()); // add this 
params4.addRule(RelativeLayout.BELOW, cs3.getId()); // not cs4 
+0

我已经试过了,它具有完全相同的行为。 – 2014-09-10 20:56:51

+0

@MaxKleine这并不意味着你不应该这样做。同时检查我的更新回答 – 2014-09-10 21:08:26

+0

是的,修复。谢谢。 – 2014-09-11 09:03:32