2016-03-20 52 views
4

我按下按鈕後,我想從實際位置+20左邊的空白處以編程方式移動文本框。android以編程方式設置保證金

這是我的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文件的所有值,並且只能以編程方式更改頁邊距左值?

回答

3

試試這個代碼:

parameter = (RelativeLayout.LayoutParams) txtField.getLayoutParams(); 
parameter.setMargins(leftMargin, parameter.topMargin, parameter.rightMargin, parameter.bottomMargin); // left, top, right, bottom 
txtField.setLayoutParams(parameter); 
+0

謝謝:)這工作得很好:) – Stack108

+0

爲xamarin覆蓋,將引發無效轉換異常。 –

6

沒錯,

就拿下面的方法更新給定視圖的左邊距:

public static void setMarginLeft(View v, int left) { 
    ViewGroup.MarginLayoutParams params = 
           (ViewGroup.MarginLayoutParams)v.getLayoutParams(); 
    params.setMargins(left, params.topMargin, 
          params.rightMargin, params.bottomMargin); 
} 
3

您也可以嘗試

ImageView _circle=(ImageView) findViewById(R.id.image); 
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) _circle.getLayoutParams(); 
int _20 = (int)getResources().getDimension(R.dimen.image_margin); 
// Directly set 20 
mlp.setMargins(_20, _20, _20, _20); 
0

如果y OU使用科特林,這可以通過創建一個擴展功能

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) 

注意:此擴展功能將會使所有的其他邊緣完好,無空間將