按下按钮后,我想以编程方式从实际位置+ 20左边缘移动文本字段。
这是我的xml文件:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtField"
android:layout_below="@+id/txtField2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="20dp"
android:layout_toLeftOf="@+id/Seperator"
android:layout_toStartOf="@+id/Seperator"
android:layout_marginRight="10p" />
....
</RelativeLayout>
我试过这段代码:
parameter = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
parameter.setMargins(30, 32, 10, 0); // left, top, right, bottom
txtField.setLayoutParams(parameter);
这是半最优的。 有没有办法使用xml文件的所有值,只能以编程方式更改左边距值?
答案 0 :(得分:13)
是的,
以下面的方法为例,更新给定视图的左边距:
public static void setMarginLeft(View v, int left) {
ViewGroup.MarginLayoutParams params =
(ViewGroup.MarginLayoutParams)v.getLayoutParams();
params.setMargins(left, params.topMargin,
params.rightMargin, params.bottomMargin);
}
答案 1 :(得分:11)
试试这段代码:
parameter = (RelativeLayout.LayoutParams) txtField.getLayoutParams();
parameter.setMargins(leftMargin, parameter.topMargin, parameter.rightMargin, parameter.bottomMargin); // left, top, right, bottom
txtField.setLayoutParams(parameter);
答案 2 :(得分:4)
您也可以尝试
// if cell is of kind textview cell
return UITableViewAutomaticDimension
// else
return some static value
答案 3 :(得分:0)
如果您使用kotlin,可以通过创建扩展功能
来简化fun View.setMarginLeft(leftMargin: Int) {
val params = layoutParams as ViewGroup.MarginLayoutParams
params.setMargins(left, params.topMargin, params.rightMargin, params.bottomMargin)
layoutParams = params
}
现在您只需要一个视图,此扩展功能可以在任何地方使用。
val textView = findViewById(R.id.textView)
val marginLeft = context.resources.getDimension(R.dimen.marginLeft).toInt()
textView.setMarginLeft(marginLeft)
注意:此扩展功能将保留所有其他边距,不会覆盖任何边距
答案 4 :(得分:0)
扩展 @enyciaa答案:通过使用Kotlin,您可以使用扩展,但是可以为每个边距边创建一个扩展函数,可以对所有边使用空值,然后仅填充不为null的值:
fun View.setMargin(leftMargin: Int? = null, topMargin: Int? = null,
rightMargin: Int? = null, bottomMargin: Int? = null) {
val params = layoutParams as ViewGroup.MarginLayoutParams
params.setMargins(
leftMargin ?: params.leftMargin,
topMargin ?: params.topMargin,
rightMargin ?: params.rightMargin,
bottomMargin ?: params.bottomMargin)
layoutParams = params
}
因此,如果您要仅设置 左页边距,可以通过指定以下参数名称来做到这一点:
textView.setMargin(leftMargin = marginValue)
答案 5 :(得分:0)
这适用于 Android 30
val textView = TextView(this)
val layoutParams = ViewGroup.MarginLayoutParams(10, 10)
layoutParams.marginStart = 5
textView.layoutParams = layoutParams
设置填充 -
textView.setPadding(2, 2, 2, 2)