Intereting Posts
ConnectivityManager.requestNetwork в Android 6.0 Получение недопустимой ошибки параметра android_key, после первого входа в систему в Facebook Android SDK Где схемы для файлов XML в проекте Android? Как получить динамический динамический идентификатор дочернего вида с щелчком мыши на LinearLayout? Как исправить ошибку «Сбой при подключении к службе камеры» в Android-эмуляторе Android Bluetooth Где я могу получить UUID? Обработка прерывания Exception во время ожидания сигнала выхода (ошибка в Android?) Как использовать Toast, когда я не могу использовать «это» как контекст Фрагмент – InstantationException: нет пустого конструктора -> Google Maps v2? Как мы можем не допустить, чтобы Служба была убита ОС? Что возвращает EditText.getText () в android, если он пуст? Android-аннотации и наследование Используйте android.R.layout.simple_list_item_1 с легкой темой Разрешение экрана Android Закрытие приложения Android при завершении отладки кода

Изменить правильную маржу в представлении программы?

Может ли этот атрибут динамически изменяться в Java-коде?

android:layout_marginRight 

У меня есть TextView , который должен динамически менять свое положение на несколько пикселей влево.

Как это сделать программно?

Solutions Collecting From Web of "Изменить правильную маржу в представлении программы?"

EDIT: более общий способ сделать это, который не зависит от типа макета (кроме того, что это тип макета, который поддерживает поля):

 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 . В принципе, вы захотите получить объект LayoutParams TextView и изменить поля, а затем вернуть его обратно в 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); 

Я не могу проверить это прямо сейчас, так что мое кастинг может быть выключен немного, но LayoutParams – это то, что нужно изменить, чтобы изменить маржу.

ЗАМЕТКА

Не забывайте, что если ваш TextView находится внутри, например, RelativeLayout , следует использовать RelativeLayout.LayoutParams вместо LinearLayout.LayoutParams

Используйте LayoutParams (как уже объяснено). Однако будьте осторожны, чтобы выбрать LayoutParams. Согласно https://stackoverflow.com/a/11971553/3184778 «вам нужно использовать тот, который относится к PARENT вида, над которым вы работаете, а не фактическое представление»

Если, например, TextView находится внутри TableRow, вам нужно использовать TableRow.LayoutParams вместо RelativeLayout или LinearLayout

Используйте эту функцию для установки всех типов полей

  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); }