以编程方式更改视图的右边距?

Java代码中可以dynamic改变这个属性吗?

android:layout_marginRight 

我有一个TextView ,它必须改变它的位置dynamic左边的一些像素。

如何以编程方式做到这一点?

编辑:这样做不依赖于布局types(除了它是支持边距的布局types)的更一般的方式:

 public static void setMargins (View v, int l, int t, int r, int b) { if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) { ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); p.setMargins(l, t, r, b); v.requestLayout(); } } 

你应该检查TextView的文档。 基本上,你会想要得到TextView的LayoutParams对象,并修改边距,然后将其设置回TextView。 假设它在LinearLayout中,请尝试如下所示:

 TextView tv = (TextView)findViewById(R.id.my_text_view); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams(); params.setMargins(0, 0, 10, 0); //substitute parameters for left, top, right, bottom tv.setLayoutParams(params); 

我现在不能testing它,所以我的铸件可能会有一点偏差,但是LayoutParams是需要修改来改变边距的。

注意

不要忘记,如果你的TextView是内部的,例如,一个RelativeLayout ,你应该使用RelativeLayout.LayoutParams而不是LinearLayout.LayoutParams

使用LayoutParams(已经解释过)。 但要小心select哪个LayoutParams。 根据https://stackoverflow.com/a/11971553/3184778 “你需要使用与你正在工作的视图的父母有关的,而不是实际的视图”

例如,如果TextView在TableRow中,那么您需要使用TableRow.LayoutParams而不是RelativeLayout或LinearLayout

使用此function设置所有types的边距

  public void setViewMargins(Context con, ViewGroup.LayoutParams params, int left, int top , int right, int bottom, View view) { final float scale = con.getResources().getDisplayMetrics().density; // convert the DP into pixel int pixel_left = (int) (left * scale + 0.5f); int pixel_top = (int) (top * scale + 0.5f); int pixel_right = (int) (right * scale + 0.5f); int pixel_bottom = (int) (bottom * scale + 0.5f); ViewGroup.MarginLayoutParams s = (ViewGroup.MarginLayoutParams) params; s.setMargins(pixel_left, pixel_top, pixel_right, pixel_bottom); view.setLayoutParams(params); }