如何通过编程为TextView设置边距?

102
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无法这样做。


你要在哪里添加这些TextView? - Triode
为什么你的XML文件中没有添加视图,就像这样: <View android:layout_width="match_parent" android:layout_height="2dp" android:background="#7C56C3" /> - Mr Nice
10个回答

186

设置为LayoutParams。

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

13
它将在哪个单位中设置边距?是在dp、px、sp或其他什么单位? - Rahul Sharma
2
出于某种原因,我收到了一个警告,需要最低API级别为19,这有意义吗? - Lion789
2
在上述情况下,由于创建了一个新的params对象,所以是必需的。如果params是从textview中获取的,那么你所说的就是正确的:tv1.getlayoutParams().set..() - Goran Horia Mihail
非常好的快速帮助!谢谢。 - Reshma
设置边距,以像素为单位。 - Bokili Production
显示剩余4条评论

13

根据您的父视图而定。

如果您在文本视图中使用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);

8

在 Kotlin 中,我会这样做:

    binding.playBtn.updateLayoutParams<ViewGroup.MarginLayoutParams> {
        setMargins(0,16,0,0) //parameters are in pixel
    }
    binding.playBtn.setPadding(10)

8
使用以下代码段来使用 Kotlin:
(textView.layoutParams as ConstraintLayout.LayoutParams).apply {
        marginStart=8.dpToPixels()
        topMargin=8.dpToPixels()
        marginEnd=8.dpToPixels()
        bottomMargin=8.dpToPixels()
    }

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


6

这些答案都很好,但我正在使用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

1
这个应该尝试一下。
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
        params.setMargins(10,20,30,20);
        txt_gender.setLayoutParams(params);

1

编程设置TextView的边距

以下是您可以在应用程序中任何地方使用的方法

创建一个对象类并添加以下代码:

    fun setMargin(left: Int, top: Int, right: Int, bottom: Int, textView: TextView){
    val params: LinearLayout.LayoutParams =
        LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
    params.setMargins(left, top, right, bottom)
    textView.setLayoutParams(params)
}

然后你可以在任何地方调用它,并且当然你可以为任何想要的内容更改布局。

你可以像这样调用这个函数。

setMargin(0, 70, 0, 0, title)

1

使用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
}

关于将 Int 转换为 dp,这里有另一个扩展程序

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

您可以按照以下方式调用此扩展来设置水平边距为8dp:
yourTextView.setMargins(8, 0, 8, 0)

1
你可以使用这段简单的代码给任何TextView添加边距。
TextView textView = new TextView(this);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) textView.getLayoutParams();
params.setMargins(20, 30, 40, 50);
textView.setLayoutParams(params);

0
如果您在适配器中使用Kotlin,可以像这样添加:AdapterKotlin
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val params = holder.tvNext.layoutParams as MarginLayoutParams
        params.bottomMargin=0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接