Когда вы используете Относительный макет, вы должны добавить правила к параметрам макета, чтобы центрировать дочерние представления.К объекту относительного макета параметров необходимо добавить правило, подобное этому
rlp.addRule(RelativeLayout.CENTER_HORIZONTAL,RelativeLayout.TRUE);
Другие правила могут быть добавлены в соответствии с вашими требованиями.Гравитация невозможна на относительном макете.
Я предполагаю, что это весь макет XML для действия.Если это так, это должно работать,
ImageButton hangupButton = (ImageButton)findViewById(R.id.screen_p2pcall_hangup);
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 120, getResources().getDisplayMetrics());
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 50, getResources().getDisplayMetrics());
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(width,height);
rlp.addRule(RelativeLayout.CENTER_HORIZONTAL,RelativeLayout.TRUE);
hangupButton.setLayoutParams(rlp);
hangupButton.setVisibility(RelativeLayout.VISIBLE);
Редактировать: Решение с кодом
Я немного отредактировал ваш XML-код для тестирования в моем проекте.Существуют атрибуты, которые нельзя использовать, такие как «ориентация».Это применимо только в линейном расположении.В следующий раз, когда вы отправите вопрос, разбейте ваш xml на следующую строку, чтобы нам не нужно было прокручивать влево и вправо, чтобы прочитать все.
layout xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:text="Unknown" android:layout_width="wrap_content"
android:id="@+id/screen_p2pcall_status_text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"/>
<ImageView android:layout_width="wrap_content"
android:src="@drawable/icon"
android:id="@+id/screen_p2pcall_android"
android:layout_height="wrap_content"
android:layout_below="@+id/screen_p2pcall_status_icon"
android:layout_centerHorizontal="true"
android:layout_marginTop="36dp"/>
<ImageView android:layout_width="wrap_content"
android:src="@android:drawable/presence_invisible"
android:id="@+id/screen_p2pcall_status_icon"
android:layout_height="wrap_content"
android:layout_below="@+id/screen_p2pcall_status_text"
android:layout_centerHorizontal="true"/>
<TextView android:text="Unknown" android:id="@+id/screen_p2pcall_peer"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_below="@+id/screen_p2pcall_android"
android:layout_centerHorizontal="true"/>
<ImageButton android:layout_width="120dp"
android:id="@+id/screen_p2pcall_hangup"
android:src="@android:drawable/sym_call_missed"
android:layout_height="50dp"
android:layout_below="@+id/screen_p2pcall_peer"
android:layout_toRightOf="@+id/screen_p2pcall_status_icon"
android:layout_marginTop="18dp"/>
<ImageButton android:layout_width="120dp"
android:id="@+id/screen_p2pcall_answer"
android:src="@android:drawable/sym_action_call"
android:layout_height="50dp"
android:layout_alignTop="@+id/screen_p2pcall_hangup"
android:layout_toLeftOf="@+id/screen_p2pcall_hangup"/>
</RelativeLayout>
Теперь яиспользовал этот код в моем методе onCreate, и он скрывает левую нижнюю кнопку и горизонтально центрирует правую нижнюю кнопку
ImageButton hangupButton = (ImageButton)findViewById(R.id.screen_p2pcall_hangup);
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 120, getResources().getDisplayMetrics());
int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 50, getResources().getDisplayMetrics());
int marginTop = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 18, getResources().getDisplayMetrics());
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(width,height);
rlp.addRule(RelativeLayout.CENTER_HORIZONTAL,RelativeLayout.TRUE);
rlp.addRule(RelativeLayout.BELOW, R.id.screen_p2pcall_peer);
rlp.topMargin = marginTop;
hangupButton.setLayoutParams(rlp);
((ImageButton)findViewById(R.id.screen_p2pcall_answer))
.setVisibility(RelativeLayout.INVISIBLE);
Это должно работать.