Добавить отступы на виде программно - PullRequest
212 голосов
/ 13 марта 2012

Я разрабатываю приложение для Android v2.2.

У меня есть фрагмент .

В обратном вызове onCreateView(...) моего класса фрагмента я раздуваю компоновку фрагмента, как показано ниже:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.login, null);

    return view;
}

Приведенный выше файл макета (login.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
 >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username" />


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username" />

</LinearLayout>

Я хотел бы установить paddingTop для указанного выше элемента <LinearLayout>, и я хочу сделать это в Java код вместо того, чтобы делать это в XML.

Как установить paddingTop в <LinearLayout> в моем фрагменте кода класса Java ??

Ответы [ 10 ]

453 голосов
/ 13 марта 2012

view.setPadding(0,padding,0,0);

Это установит верхний отступ равным padding -пикселям.

Если вы хотите вместо этого установить dp, вы можете выполнить преобразование :

float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);
89 голосов
/ 13 марта 2012

Чтобы ответить на ваш второй вопрос:

view.setPadding(0,padding,0,0);

, как предложили SpK и Jave, установит отступ в пикселях. Вы можете установить его в dp, рассчитав значение dp следующим образом:

int paddingDp = 25;
float density = context.getResources().getDisplayMetrics().density
int paddingPixel = (int)(paddingDp * density);
view.setPadding(0,paddingPixel,0,0);

Надеюсь, это поможет!

83 голосов
/ 16 сентября 2013

Если вы сохраняете заполнение в файлах ресурсов, вы можете просто позвонить

int padding = getResources().getDimensionPixelOffset(R.dimen.padding);

. Это сделает преобразование за вас.

13 голосов
/ 13 марта 2012

Вы можете установить заполнение для вашего вида программно по всему тексту кода ниже -

view.setPadding(0,1,20,3);

А также доступны различные типы заполнения -

Заполнение

PaddingBottom

PaddingLeft

PaddingRight

PaddingTop

Эти ссылки будут ссылаться на сайт разработчиков Android.Надеюсь, это вам очень поможет.

8 голосов
/ 04 мая 2017

Использование TypedValue - намного более чистый способ преобразования в пиксели по сравнению с вычислением вручную:

float paddingDp = 10f;
// Convert to pixels
int paddingPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, paddingDp, context.getResources().getDisplayMetrics());
view.setPadding(paddingPx, paddingPx, paddingPx, paddingPx);

По сути, TypedValue.applyDimension преобразует требуемый отступ в пиксели соответствующим образом в зависимости от свойств отображения текущего устройства.

Для получения дополнительной информации см .: TypedValue.applyDimension Docs .

5 голосов
/ 30 октября 2018

Используя Kotlin и библиотеку android-ktx, вы можете просто сделать

view.updatePadding(top = 42)

См. Документы здесь

5 голосов
/ 07 сентября 2017

используйте метод ниже для динамической установки заполнения

setPadding(int left, int top, int right, int bottom)

Пример:

view.setPadding(2,2,2,2);
2 голосов
/ 13 сентября 2016

Напишите следующий код для установки отступов, это может помочь вам.

TextView ApplyPaddingTextView = (TextView)findViewById(R.id.textView1);
final LayoutParams layoutparams = (RelativeLayout.LayoutParams) ApplyPaddingTextView.getLayoutParams();

layoutparams.setPadding(50,50,50,50);

ApplyPaddingTextView.setLayoutParams(layoutparams);

Используйте LinearLayout.LayoutParams или RelativeLayout.LayoutParams в соответствии с родительским макетом дочернего представления

1 голос
/ 15 июля 2018
Context contect=MainActivity.this;
TextView tview=new TextView(context);
tview.setPaddingRelative(10,0,0,0);
0 голосов
/ 17 октября 2016

При программном заполнении преобразуйте в значения, связанные с плотностью, преобразовав пиксель в Dp.

...