Как установить layout_gravity программно? - PullRequest
294 голосов
/ 08 ноября 2011

Мой вопрос прост,

Как настроить мои кнопки 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);

Есть решение?

Ответы [ 17 ]

3 голосов
/ 06 сентября 2014

Если вам нужно установить гравитацию для вида, используйте следующее

Button b=new Button(Context);
b.setGravity(Gravity.CENTER);

Для настройки layout_gravity для кнопки используйте гравитационное поле для макета параметров как

LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.CENTER;

попробуй это надеюсь, что это очищает спасибо

3 голосов
/ 30 июля 2013

Если вы хотите поместить представление в центр родительского элемента, вы можете сделать следующее:

public class myLayout extends LinearLayout {

    public myLayout(Context context) {
      super(context);

      RelativeLayout vi = (RelativeLayout) ((LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
            R.layout.activity_main, null);
      LinearLayout.LayoutParams cc = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
      cc.gravity = Gravity.CENTER;
      this.setGravity(Gravity.CENTER);
      this.addView(vi);
  }
}

в этом разделе кода LinearLayout помещает первые элементы представления в центр родительского элемента.Таким образом, мы не учитываем начальную ширину и высоту, чтобы упорядочить вид в центре.Я делаю раздел кода хорошо.

2 голосов
/ 11 июля 2017

Отлично работает !!! Ни один из приведенных выше ответов не работает для меня. В Xml-файле настройки силы тяжести и настройки layout_gravity различны. Проверьте код ниже

// here messageLL is the linear layout in the xml file
// Before adding any view just remove all views
   messageLL.removeAllViews();
// FrameLayout is the parent for LinearLayout
FrameLayout.LayoutParams params = new 
   FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
   params.gravity = Gravity.CENTER|Gravity.CENTER_VERTICAL;
   messageLL.setLayoutParams(params);
   messageText.setVisibility(View.GONE);
   messageNoText.setVisibility(View.VISIBLE);
   messageLL.addView(messageNoText);

Также отметьте Здесь вы можете найти четкое объяснение гравитации и layout_gravity.

2 голосов
/ 21 июля 2016

в RelativeLayout, попробуйте этот код, он работает для меня: yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

0 голосов
/ 28 августа 2018
 int width=getResources().getDisplayMetrics().widthPixels; 
 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
                    (width, width);

            params.gravity = Gravity.CENTER;

           iv_main_text = new HTextView(getContext());
            iv_main_text.setLayoutParams(params);
            iv_main_text.setBackgroundColor(Color.BLUE);
            iv_main_text.setTextSize(60);
            iv_main_text.setGravity(Gravity.CENTER);
            iv_main_text.setTextColor(Color.BLACK);
0 голосов
/ 07 июля 2017

Попробуйте этот код

    Button btn = new Button(YourActivity.this);
    btn.setGravity(Gravity.CENTER | Gravity.TOP);
    btn.setText("some text");

или

    btn.setGravity(Gravity.TOP);
0 голосов
/ 25 июня 2015

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

Но вместо гравитации вы используете addRule

RelativeLayout.LayoutParams mCircleParams = новый RelativeLayout.LayoutParams (окружность по высоте, окружность по высоте);

    mCircleParams.addRule(RelativeLayout.CENTER_IN_PARENT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...