Android получает кнопку не в центре экрана

У меня есть кнопка, которую я пытаюсь сделать в центре экрана:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/black"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    android:paddingBottom="0dp"
    tools:context="com.vroy.trapper.MainMenuActivity">



    <Button
        android:id="@+id/playBtn"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/play_button_text"
        android:background="@drawable/round_button"
        />


</RelativeLayout>

(Я установил ширину / высоту в 0dp, потому что я их программно изменяю.)

Проблема заключается в том, что в то время как на вкладке "Дизайн XML" кнопка, по-видимому, находится в центре экрана (если я установил ширину / высоту 50dp для тестирования), когда я фактически запускаю программу, кнопка появляется в верхнем левом углу экрана.,

Как мне убедиться, что кнопка на самом деле находится в центре экрана?

Вот код, где я устанавливаю ширину / высоту кнопки:

 int screenWidth = getResources().getDisplayMetrics().widthPixels;
  //  int screenHeight = getResources().getDisplayMetrics().heightPixels;

    Button playBtn = (Button) findViewById(R.id.playBtn);
    int playBtnWidth = screenWidth/3;
    playBtn.setLayoutParams(new LayoutParams(playBtnWidth, playBtnWidth));

1 ответ

Решение

Устанавливая LayoutParams программным способом, вы сбрасываете всю информацию в этих параметрах на значения по умолчанию (за исключением высоты и ширины, так как вы устанавливаете их в конструкторе). Попробуйте создать LayoutParams как переменную, затем установите расположение макета.

LayoutParams params = new LayoutParams(playBtnWidth, playBtnWidth);
params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
playBtn.setLayoutParams(params);

Ссылка на RelativeLayout

Другие вопросы по тегам