【问题标题】:How can I add Views dynamically in a Relative layout or in any Layout如何在相对布局或任何布局中动态添加视图
【发布时间】:2020-06-21 05:02:28
【问题描述】:

嗯,我的问题有点复杂(对我来说)。 假设我有一个RelativeLayout(或其他任何需要的Layout)。

现在我制作了一些View,例如TextView。(多个View)。 那些View 将包括我将从java代码中给出的以下特征。

  1. 我想将View 添加到布局中的特定位置。
  2. 两个或多个View可以重叠(如下图)
  3. 这是一种 AddView(child, positionX, width, height);我知道没有这样的方法。但我需要一个。

其中 positionX 是一个整数,用于定义 View 将在 Layout 中从顶部设置的位置。

现在我想将这些 View 添加到 Layout 中,如下图所示。

(所有View 将是矩形大小;抱歉编辑不当。)

我该怎么做? 我非常需要解决方案。

我希望我已经解释了我英语不好的问题:(

提前谢谢

【问题讨论】:

    标签: java android viewgroup


    【解决方案1】:

    正如你所提到的,

    所有视图都是矩形大小

    我们以按钮yourButton 为例。您需要传递两个值,一个来自顶部,另一个来自您要放置视图的左侧。然后使用以下方法,如您所愿,addView() 在RelativeLayout 中实现所需的输出:

    private void addView(child, positionFromTop, positionFromLeft, width, height) {
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        layoutParams.topMargin = (int)(positionFromTop);
        layoutParams.leftMargin = (int)(positionFromLeft);
        yourButton.setLayoutParams(layoutParams);
    }
    

    如果需要,您可以通过编程以类似的方式使用宽度和高度自定义布局。请参阅此answer 以获取如何以编程方式调整自定义视图大小的代码。希望对您有所帮助!

    【讨论】:

      【解决方案2】:

      您也可以使用google提供的FlexBox layout动态添加视图。您可以查看此Medium 帖子以了解有关 Flexbox 布局的清晰概念

      【讨论】:

        【解决方案3】:

        试试这个:

        //-----Main Layout-----\\
        LinearLayout l1 = findViewById(R.id.myLinear);
        ll.setOrientation(LinearLayout.VERTICAL);
        
        //-----First layout-----\\
        LinearLayout l11 = new LinearLayout(this);
        l11.setBackgroundColor(android.R.color.holo_orange_dark);
        l1.addView(l11, new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        
        //-----Second layout-----\\
        LinearLayout l12 = new LinearLayout(this);
        l12.setBackgroundColor(android.R.color.holo_green_dark);
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        layoutParams.setMargins(-30, 20, 20, 0); //Negative margin top to superposition views
        l1.addView(l12, layoutParams);
        

        【讨论】:

          【解决方案4】:

          如果您想动态添加多个视图,可以尝试将它们重构为一个复合视图(放置它们会更容易)

          https://www.vogella.com/tutorials/AndroidCustomViews/article.html

          您使用什么类型的 ViewGroup?如果它的约束布局,您可以使用 ConstraintLayout.LayoutParams 以与提到的 SaadAAkash 相同的方式以编程方式设置约束

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-31
            • 2016-06-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多