如何以编程方式在布局文件的底部添加多个视图没有它们重叠 [英] How to programmatically add multiple views at the bottom of a layout file without them overlapping

查看:159
本文介绍了如何以编程方式在布局文件的底部添加多个视图没有它们重叠的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经成功添加到我的布局的底部采用的堆叠外汇和其他资源的新观点。但是,如果我尝试以编程方式添加第二个观点,两种观点出现重叠。

这code座成功增加了一个新的观点,以我的布局文件。

  @覆盖
保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);        RelativeLayout的activityMain =(RelativeLayout的)findViewById(R.id.activity_main);        //首先查看
        查看playControlsPanelMinimized =新的视图(本);
        RelativeLayout.LayoutParams PARAMS =新RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        最终浮动规模= activityMain.getContext()getResources()getDisplayMetrics()密度。;
        浮DPS = 10;
        INT像素=(INT)(DPS *规模+ 0.5F);
        params.height =像素;
        playControlsPanelMinimized.setLayoutParams(PARAMS);
        playControlsPanelMinimized.setBackgroundColor(Color.parseColor(#00FFFF));
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized);

然而,当我通过简单地重复code。与新的变量添加第二个观点,我看到有一个重叠的行为,我只看到了第一个视图的效果。

  @覆盖
保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);        RelativeLayout的activityMain =(RelativeLayout的)findViewById(R.id.activity_main);        //首先查看
        查看playControlsPanelMinimized =新的视图(本);
        RelativeLayout.LayoutParams PARAMS =新RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        最终浮动规模= activityMain.getContext()getResources()getDisplayMetrics()密度。;
        浮DPS = 10;
        INT像素=(INT)(DPS *规模+ 0.5F);
        params.height =像素;
        playControlsPanelMinimized.setLayoutParams(PARAMS);
        playControlsPanelMinimized.setBackgroundColor(Color.parseColor(#00FFFF));
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized);        //第二个视图
        查看playControlsPanelMinimized2 =新的视图(本);
        RelativeLayout.LayoutParams params2 =新RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        。最终浮动scale2 = activityMain.getContext()getResources()getDisplayMetrics()密度。
        浮DPS2 = 10;
        INT pixels2 =(INT)(DPS2 * scale2 + 0.5F);
        params2.height = pixels2;
        playControlsPanelMinimized2.setLayoutParams(params2);
        playControlsPanelMinimized2.setBackgroundColor(Color.parseColor(#00FFFF));
        params2.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized2);

编辑:

我改变了 activity_main.xml中来LinearLaout,并调整相应我的变量,但现在我再也看不到了意见。

 的LinearLayout activityMain =(的LinearLayout)findViewById(R.id.activity_main);        //首先查看
        查看playControlsPanelMinimized =新的视图(本);
        LinearLayout.LayoutParams PARAMS =新LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        最终浮动规模= activityMain.getContext()getResources()getDisplayMetrics()密度。;
        浮DPS = 10;
        INT像素=(INT)(DPS *规模+ 0.5F);
        params.height =像素;
        playControlsPanelMinimized.setLayoutParams(PARAMS);
        playControlsPanelMinimized.setBackgroundColor(Color.parseColor(#00FFFF));
        //params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized);

修改

我想相对布局方法的新技术无济于事作为尚未

 查看playControlsPanelMinimized =新的LinearLayout(本);
        RelativeLayout.LayoutParams PARAMS =新RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        最终浮动规模= activityMain.getContext()getResources()getDisplayMetrics()密度。;
        浮DPS = 10;
        INT像素=(INT)(DPS *规模+ 0.5F);
        params.height =像素;
        playControlsPanelMinimized.setLayoutParams(PARAMS);
        playControlsPanelMinimized.setBackgroundColor(Color.parseColor(#00FFFF));
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized);        查看A =新的视图(本);
        查看B =新的视图(本);
        RelativeLayout.LayoutParams params2 =新RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        A.setLayoutParams(params2);
        B.setLayoutParams(params2);        playControlsPanelMinimized.addView(A);
        playControlsPanelMinimized.addView(B)


解决方案

  • 使用lnearLayout,而不是相对布局,可能是你需要使用 weightsum
    定位以垂直/水平

  • 另一种观点的
  • 把正确的观点,并设置它的XML。

I have successfully added a new view to the bottom of my layout using the resources on Stack Exchange and other. However, if I try to add a second view programmatically, the two views appear to overlap.

This code block successfully adds a new view to my layout file.

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RelativeLayout activityMain = (RelativeLayout)findViewById(R.id.activity_main);

        // First view
        View playControlsPanelMinimized = new View(this);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        final float scale = activityMain.getContext().getResources().getDisplayMetrics().density;
        float dps = 10;
        int pixels = (int) (dps * scale + 0.5f);
        params.height = pixels;
        playControlsPanelMinimized.setLayoutParams(params);
        playControlsPanelMinimized.setBackgroundColor(Color.parseColor("#00FFFF"));
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized);

However, when I add a second view by simply repeating the code with new variables, I see there is an overlap behavior, to the effect that I only see the first view.

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RelativeLayout activityMain = (RelativeLayout)findViewById(R.id.activity_main);

        // First view
        View playControlsPanelMinimized = new View(this);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        final float scale = activityMain.getContext().getResources().getDisplayMetrics().density;
        float dps = 10;
        int pixels = (int) (dps * scale + 0.5f);
        params.height = pixels;
        playControlsPanelMinimized.setLayoutParams(params);
        playControlsPanelMinimized.setBackgroundColor(Color.parseColor("#00FFFF"));
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized);

        // Second View
        View playControlsPanelMinimized2 = new View(this);
        RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        final float scale2 = activityMain.getContext().getResources().getDisplayMetrics().density;
        float dps2 = 10;
        int pixels2 = (int) (dps2 * scale2 + 0.5f);
        params2.height = pixels2;
        playControlsPanelMinimized2.setLayoutParams(params2);
        playControlsPanelMinimized2.setBackgroundColor(Color.parseColor("#00FFFF"));
        params2.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized2);

edit:

I changed activity_main.xml to LinearLaout, and adjusted my variables accordingly, but now I no longer see the views.

        LinearLayout activityMain = (LinearLayout)findViewById(R.id.activity_main);

        // First View
        View playControlsPanelMinimized = new View(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        final float scale = activityMain.getContext().getResources().getDisplayMetrics().density;
        float dps = 10;
        int pixels = (int) (dps * scale + 0.5f);
        params.height = pixels;
        playControlsPanelMinimized.setLayoutParams(params);
        playControlsPanelMinimized.setBackgroundColor(Color.parseColor("#00FFFF"));
        //params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized);

edit

I am trying a new technique with the relative layout method to no avail as of yet

View playControlsPanelMinimized = new LinearLayout(this);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        final float scale = activityMain.getContext().getResources().getDisplayMetrics().density;
        float dps = 10;
        int pixels = (int) (dps * scale + 0.5f);
        params.height = pixels;
        playControlsPanelMinimized.setLayoutParams(params);
        playControlsPanelMinimized.setBackgroundColor(Color.parseColor("#00FFFF"));
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        activityMain.addView(playControlsPanelMinimized);

        View A = new View(this);
        View B = new View(this);
        RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        A.setLayoutParams(params2);
        B.setLayoutParams(params2);

        playControlsPanelMinimized.addView(A);
        playControlsPanelMinimized.addView(B);

解决方案

  • Use lnearLayout instead of Relative layout, may be you need to use weightsum set orientation to vertical / horizontal
  • put view right of other view and set it in xml .

这篇关于如何以编程方式在布局文件的底部添加多个视图没有它们重叠的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆