如何在向父母添加更多布局时让RelativeLayout相应地改变高度?

时间:2014-04-26 03:13:03

标签: android android-layout android-linearlayout relativelayout

有些人可以帮我解决布局问题吗?我有问题让它显示我喜欢的方式。

我在线性布局中有两个相对布局。 RelativeLayout 1用于容纳一个片段,RelativeLayout 2包含'main'布局,当没有片段时它应填充屏幕,但在添加片段时调整大小。

我动态创建布局:

    LinearLayout mainLayout = new LinearLayout(this);
    mainLayout.setLayoutDirection(LinearLayout.VERTICAL);

    unityPlayerLayout = new RelativeLayout(this);
    youtubeLayout = new RelativeLayout(this);


    LinearLayout.LayoutParams mainParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);

    mainLayout.setLayoutParams(mainParams);


    RelativeLayout.LayoutParams youtubeLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,600);

    RelativeLayout.LayoutParams unityPlayerLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.MATCH_PARENT);
    unityPlayerLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);


    mainLayout.addView(youtubeLayout,0,youtubeLayoutParams);
    mainLayout.addView(unityPlayerLayout);
    unityPlayerLayout.addView(playerView,0,unityPlayerLayoutParams);

添加片段后,unityPlayerLayout不会调整大小并与底部对齐。它被推到右边,我可以看到几个像素的条子,这很奇怪,因为youtubeLayout和mainLayout应该匹配屏幕。

所以,总结一下:在youtubeLayout中添加一个片段后,我需要unityPlayerLayout来调整它的高度并放到底部,但实际上unityPlayerLayout会被推到右边,并且不会调整它的高度。

任何人都有任何想法?非常感谢!

2 个答案:

答案 0 :(得分:1)

您需要为主Layout orientation设置LinearLayout,而不是方向

更改

mainLayout.setLayoutDirection(LinearLayout.VERTICAL);

mainLayout.setOrientation(LinearLayout.VERTICAL);

答案 1 :(得分:0)

// try this way,hope this will help you...
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout mainLayout = new LinearLayout(this);
        RelativeLayout unityPlayerLayout = new RelativeLayout(this);
        unityPlayerLayout.setBackgroundColor(getResources().getColor(android.R.color.holo_red_dark));
        RelativeLayout youtubeLayout = new RelativeLayout(this);
        youtubeLayout.setBackgroundColor(getResources().getColor(android.R.color.holo_red_light));

        mainLayout.setOrientation(LinearLayout.VERTICAL);
        mainLayout.addView(youtubeLayout,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,600));
        mainLayout.addView(unityPlayerLayout,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,0,1f));
        setContentView(mainLayout,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
    }