【问题标题】:How to set margins for TextView programmatically?如何以编程方式设置 TextView 的边距?
【发布时间】:2013-03-26 11:50:59
【问题描述】:
TextView tv1 = new TextView(this);      
tv1.setPadding(5, 0, 5, 0);
tv1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
tv1.setBackgroundColor(Color.parseColor("#0099cc"));
tv1.setTextColor(Color.WHITE);
tv1.setTextSize(11);
tv1.setGravity(Gravity.LEFT | Gravity.BOTTOM);
tv1.setText("Test1");
ll.addView(tv1);

TextView tv2 = new TextView(this);      
tv2.setPadding(5, 0, 5, 0);
tv2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
tv2.setBackgroundColor(Color.parseColor("#0099cc"));
tv2.setTextColor(Color.WHITE);
tv2.setTextSize(11);
tv2.setGravity(Gravity.LEFT | Gravity.BOTTOM);
tv2.setText("Test2");
ll.addView(tv2);

如您所见,在这段代码中,我设置了TextView 的背景颜色。我想要做的是我想将这两个TextView 彼此分开,这样它们的背景颜色就会被一条线分开。我不希望他们联系。据我了解,如果我可以设置TextView 的边距,则可以这样做,但据我所知,TextView 无法这样做。

【问题讨论】:

  • 你要在哪里添加这些textViews?
  • 为什么你不在你的 xml 文件中添加视图...像这样

标签: android textview


【解决方案1】:

设置为 LayoutParams。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(10,10,10,10);
tv1.setLayoutParams(params);

【讨论】:

  • @SanjayKumar nope,API 级别 1 可以使用此调用。我根据这个答案做了一个例子。检查github.com/shanwu/shanwu_coding_base/tree/…
  • 边距设置的单位是dp,px,sp还是其他单位?
  • 出于某种原因,我收到警告说这需要 min api lvl 19 才有意义?
  • 你实际上不需要最后一个tv1.setLayoutParams(params);。 Java 传递引用!
  • @Cigogne Eveillée 在上述情况下,由于创建了一个新的 params 对象,因此需要它。如果参数是从文本视图中获得的,那么是的,你说的是正确的:tv1.getlayoutParams().set..()
【解决方案2】:

这取决于你的父视图。

如果您在 textview 上使用 LinearLayout 作为父视图,请提供如下参数

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(10,10,10,10);
tv1.setLayoutParams(params);

如果您在 textview 上使用 RelativeLayout 作为父视图,请提供如下所示的参数

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(10,10,10,10);
tv1.setLayoutParams(params);

【讨论】:

    【解决方案3】:

    对于 Kotlin,使用以下代码 sn-p

    (textView.layoutParams as ConstraintLayout.LayoutParams).apply {
            marginStart=8.dpToPixels()
            topMargin=8.dpToPixels()
            marginEnd=8.dpToPixels()
            bottomMargin=8.dpToPixels()
        }
    

    根据使用的布局更改 LayoutParams。 谢谢。

    【讨论】:

      【解决方案4】:

      所有这些答案都很好,但我使用的是 ConstraintLayout,所以这里是代码:

      ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
      params.setMargins(10, 10, 10, 10);
      textview.setLayoutParams(params); // note that textview would be your instanced TextView object
      

      【讨论】:

        【解决方案5】:

        这个应该试试

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
                params.setMargins(10,20,30,20);
                txt_gender.setLayoutParams(params);
        

        【讨论】:

          【解决方案6】:

          使用 Kotlin 扩展:

          这是为 textview 设置边距的简单扩展。

          fun View.setMargins(marginLeft: Int, marginTop: Int, marginRight: Int, marginBottom: Int) {
            val params: LinearLayout.LayoutParams =
              LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
            params.setMargins(margin.dp, 0, margin.dp, 0)
            this.layoutParams = params
          }
          

          对于Intdp 的转换,这里是另一个扩展

          val Int.dp: Int
            get() = (this * Resources.getSystem().displayMetrics.density).toInt()
          

          你可以调用这个扩展来给水平边距8dp,如下所示

          yourTextView.setMargins(8, 0, 8, 0)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-23
            • 1970-01-01
            • 1970-01-01
            • 2014-11-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-24
            相关资源
            最近更新 更多