Добавить прописку на вид программно
Я разрабатываю приложение 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?
Ответы
Ответ 1
view.setPadding(0,padding,0,0);
Это установит верхнее дополнение к padding
-пикселям.
Если вы хотите установить его вместо dp
, вы можете сделать conversion:
float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);
Ответ 2
Чтобы ответить на второй вопрос:
view.setPadding(0,padding,0,0);
как предложено SpK и Jave, будет задано заполнение в пикселях. Вы можете установить его в dp, вычислив значение dp следующим образом:
int paddingPixel = 25;
float density = context.getResources().getDisplayMetrics().density
int paddingDp = (int)(paddingPixel * density);
view.setPadding(0,paddingDp,0,0);
Надеюсь, что это поможет!
Ответ 3
Если вы сохраняете дополнение в файлах ресурсов, вы можете просто вызвать
int padding = getResources().getDimensionPixelOffset(R.dimen.padding);
Он выполняет преобразование для вас.
Ответ 4
Вы можете настроить прописку на ваш взгляд программно по всему ниже кода -
view.setPadding(0,1,20,3);
А также доступны разные типы прокладок -
Padding
PaddingBottom
PaddingLeft
PaddingRight
PaddingTop
Эти ссылки будут ссылаться на сайт разработчиков Android. Надеюсь, вам это поможет.
Ответ 5
используйте ниже метод динамического добавления прокладки
setPadding(int left, int top, int right, int bottom)
Пример:
view.setPadding(2,2,2,2);
Ответ 6
Использование 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.
Ответ 7
Напиши следующий код, чтобы установить дополнение, он может вам помочь.
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 в соответствии с родительским расположением детского представления
Ответ 8
В то время как прокладка программно преобразуется в значения, связанные с плотностью, путем преобразования пикселя в Dp.