2016-03-20 3 views
4

после того, как я нажму кнопку, я хотел бы переместить текстовое поле программно из фактического положения + 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-файла и только программно изменить значение поля слева?

ответ

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 НУ использовать Котлин, это может быть упрощено путем создания функции расширения

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) 

Примечание: Эта функция расширения будет оставить все другие поля без изменений, никаких полей не будут перезаписаны

Смежные вопросы