Мой вопрос прост,
Как установить мои кнопки layout_gravity программно?
Я нашел это в интернете, но он просто выбрасывает исключение Nullpointer:
Button MyButton = new Button(this);
LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
lllp.gravity=Gravity.RIGHT;
MyButton.setLayoutParams(lllp);
MyLinearLayout.addView(MyButton);
Любое решение?
android
android-layout
Адам Вархеги
источник
источник
Ответы:
Ява
Котлин
Для значений гравитации и как установить гравитацию проверить гравитацию .
В основном, вы должны выбрать в
LayoutParams
зависимости от родителя. Это может бытьRelativeLayout
, иLinearLayout
т.д ...источник
layout_gravity
(то естьLayoutParams.gravity
). Былоgravity
быbutton.setGravity()
setGravity()
это layout_gravity, но это неправильно. Я могу подтвердить, что этот ответ является правильным для установки layout_gravity программно.Я не хотел бы воскрешать старые темы, но это проблема, на которую нет правильного ответа, и более того, я сам столкнулся с этой проблемой.
Вот длинный кусок, если вам интересен только ответ, пожалуйста, прокрутите весь код до кода:
Android: гравитация и Android: layout_gravity работает по-разному. Вот статья, которую я прочитал, которая помогла мне.
Суть статьи: гравитация влияет на вид после того, как высота / ширина назначены. Таким образом, центр тяжести не повлияет на вид, который выполняется FILL_PARENT (думайте об этом как об автоматическом поле). Центр layout_gravity БУДЕТ влиять на представление, которое является FILL_PARENT (думайте об этом как о автопэде).
По сути, Android: layout_gravity не может быть доступен программно, только Android: гравитация. В случае с ОП и в моем случае принятый ответ не размещает кнопку вертикально по центру.
Чтобы улучшить ответ Karthi:
Ссылка на
LinearLayout.LayoutParams
.android: layout_gravity показывает «Нет связанных методов», что означает, что нельзя получить доступ программно. В то время как гравитация - это поле в классе.
источник
Для layout_gravity используйте ответ, указанный "karthi". Этот метод устанавливает гравитацию, чтобы поместить детей в представление.
источник
У меня была похожая проблема с программной настройкой layout_gravity для кнопок в GridLayout.
Хитрость заключалась в том, чтобы установить гравитацию на кнопке layoutParams ПОСЛЕ того, как кнопка была добавлена к родителю (GridLayout), в противном случае гравитация будет игнорироваться .
источник
Если вы хотите изменить
layou_gravity
существующее представление, сделайте это:Не забывайте использовать право в
LayoutParams
зависимости от типа макета вашего представления. Пример:источник
используйте это, чтобы добавить больше чем одна сила тяжести
источник
Этот вопрос старый, но у меня была такая же проблема, и я решил ее так
источник
KOTLIN устанавливает более одной силы тяжести на FrameLayout без изменения размера:
источник
Я использую что-то вроде этого: (Xamarin и C # код)
SetGravity помещает мой textView в центр макета. Так что свойство макета SetGravity относится к содержимому макета
источник
Если вам нужно установить Gravity для просмотра, используйте следующее
Для настройки layout_gravity для кнопки используйте поле тяжести для layoutparams как
попробуйте эту надежду это очищает спасибо
источник
Остальные ответы верны, я хочу добавить больше объяснений. Layout_gravity - о том, как расположить представление в родительском представлении.
Вы должны установить гравитацию ** после вызова метода parentView.addView () **. Мы можем увидеть код:
И проблема нулевого указателя в том, что он не вызывает addView перед getLayoutParams ().
В аннотации уже сказано: «Этот метод может возвращать ноль, если это представление не прикреплено к родительской ViewGroup или {@ link # setLayoutParams (android.view.ViewGroup.LayoutParams)} не было успешно вызвано. Когда представление присоединено к родителю ViewGroup, этот метод не должен возвращать ноль. "
источник
Если вы хотите поместить представление в центр родительского элемента, вы можете сделать следующее:
этот раздел кода заставляет LinearLayout поместить первые элементы представления в центр родительского элемента. Таким образом, мы не учитываем начальную ширину и высоту, чтобы упорядочить вид в центре. Я делаю раздел кода хорошо.
источник
RelativeLayout, попробуйте этот код, он работает для меня:
yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
источник
Отлично работает !!! Ни один из приведенных выше ответов не работает для меня. В Xml-файле настройки тяжести и настройки layout_gravity различны. Проверьте код ниже
Также отметьте это, где вы можете найти четкое объяснение гравитации и layout_gravity.
источник
Большинство вышеприведенных ответов верны, поэтому написаны вспомогательные методы, чтобы вы могли использовать их непосредственно в своем проекте.
источник
Я переключился с LinearLayout.LayoutParams на RelativeLayout.LayoutParams, чтобы наконец получить желаемый результат для созданного мной пользовательского кругового обзора.
Но вместо гравитации вы используете addRule
RelativeLayout.LayoutParams mCircleParams = new RelativeLayout.LayoutParams (окружность по высоте, окружность по высоте);
источник
Попробуйте этот код
или
источник
layout_gravity
неgravitiy
.источник
источник