如何改变TextView的边距

我有编程添加到LinearLayout和一些外部事件,我想减less该TextView的底部边缘到-10,为此,我试着跟随。

LinearLayout.LayoutParams lastTxtParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lastTxtParams.setMargins(0, 0, 0, -10); mOldTextView.setLayoutParams(lastTxtParams); mOldTextView.invalidate(); 

修改已添加到视图的小部件的边距是否正确?
一些如何不工作。

 TextView forgot_pswrd = (TextView) findViewById(R.id.ForgotPasswordText); forgot_pswrd.setOnTouchListener(this); LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); llp.setMargins(50, 0, 0, 0); // llp.setMargins(left, top, right, bottom); forgot_pswrd.setLayoutParams(llp); 

我做了这个,它完美的工作。 也许正如你在-ve中给出的值,这就是为什么你的代码不工作。 你只要把这个代码放在创build视图引用的地方。

你在xml中的布局可能已经有一个layout_margin(Left | Right | etc)属性,这意味着你需要访问这个xml生成的对象并修改它。

我发现这个解决scheme非常简单:

 ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) mTextView .getLayoutParams(); mlp.setMargins(adjustmentPxs, 0, 0, 0); break; 

获取textview的LayoutParams实例,将其向下转换为MarginLayoutParams,并使用setMargins方法设置边距。

这是一个棘手的问题,我把表格布局的行中的边距设置为textview。 见下面:

 TableLayout tl = new TableLayout(this); tl.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); TableRow tr = new TableRow(this); tr.setBackgroundResource(R.color.rowColor); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.setMargins(4, 4, 4, 4); TextView tv = new TextView(this); tv.setBackgroundResource(R.color.textviewColor); tv.setText("hello"); tr.addView(tv, params); TextView tv2 = new TextView(this); tv2.setBackgroundResource(R.color.textviewColor); tv2.setText("hi"); tr.addView(tv2, params); tl.addView(tr); setContentView(tl); 

需要导入LayoutParams以在表格行中使用的类是:

 import android.widget.**TableRow**.LayoutParams; 

重要的是要注意,我添加了表格行的类。 同样的许多其他类可用于使用LayoutParams,如:

 import android.widget.**RelativeLayout**.LayoutParams; 

导入android.widget。 LinearLayout .LayoutParams;

所以相应地使用。

setMargins()设置TextView的INNER边距,而不是布局边距。 那是你想要做的吗? 这两个不同的利润可能相当复杂。

如果要设置布局边距,请更改TextView的LayoutParams(textview.getLayoutParams(),然后更改返回的LayoutParams对象上的参数)。

您不需要更改LinearLayout上的任何内容。

问候,奥利弗

TextView不支持setMargins。 Android文档说:

即使一个视图可以定义一个填充,它也不提供任何对边距的支持。 但是,查看组提供了这样的支持。 有关更多信息,请参阅ViewGroup和ViewGroup.MarginLayoutParams。

绘制完成后,您可能会更改布局边距。 mOldTextView.invalidate()没用。 您需要调用父级的requestLayout()来重新布局新configuration。 在绘图发生之前移动布局更改代码时,一切正常。

这是另一种方法

当我遇到同样的问题时,我不喜欢这里提出的解决scheme。 所以,我想出了另一种方式:我已经在两个字段之间的XML文件中插入了一个TextView,我想用两个重要的字段来分隔:

  1. 能见度设置为“GONE”(不占用任何空间)
  2. 身高设置为我需要分离的任何东西。

     XML: ...//some view up here <TextView android:id="@+id/dialogSeparator" android:layout_width="match_parent" android:layout_height="30dp" android:visibility="gone"/> ...//some view down here 

现在,我的代码,我所需要做的只是简单地把可见性改变成隐形的(即它在那里,并且占据了所需的空间,但它是不可见的)

  JAVA: TextView tvSeparator = (TextView)activity.findViewById(R.id.dialogSeparator); tvSeparator.setVisibility(View.INVISIBLE); //Inside an activity extended class I can use 'this' instead of 'activity'. 

中提琴…我得到了必要的保证金。 顺便说一下,这个解决scheme是针对垂直方向的LinearLayout,但是你可以用不同的布局来实现。

希望这可以帮助。

  TextView tv = (TextView)findViewById(R.id.item_title)); RelativeLayout.LayoutParams mRelativelp = (RelativeLayout.LayoutParams) tv .getLayoutParams(); mRelativelp.setMargins(DptoPxConvertion(15), 0, DptoPxConvertion (15), 0); tv.setLayoutParams(mRelativelp); private int DptoPxConvertion(int dpValue) { return (int)((dpValue * mContext.getResources().getDisplayMetrics().density) + 0.5); } 

textview的getLayoutParams()应该基于xml中的textviewParent转换为相应的Params。

 <RelativeLayout> <TextView android:id="@+id/item_title"> </RelativeLayout> 

要在不同的设备上显示相同的实际大小,请使用上面使用的DptoPxConvertion()方法。 setMargin(左,上,右,下)params将会以像素为单位,而不是在dp中 。 有关更多参考,请参阅此链接答案