Android - кнопка центра изображения во время выполнения - PullRequest
1 голос
/ 03 октября 2011

У меня есть кнопка изображения, определенная в xml-файле. Во время выполнения я хочу сделать его видимым (возможно с setVisibility(), чтобы это не было проблемой), но я также хочу центрировать его горизонтально, как атрибут XML android:layout_gravity="center_horizontal". Как вы делаете это во время выполнения, в javacode, хотя? Я не смог найти какие-либо методы, которые можно использовать для программной установки гравитации изображения.

РЕДАКТИРОВАТЬ: я использую RelativeLayout в файле XML

EDIT2: XML-код

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent" android:gravity="center_horizontal">
    <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_gravity="center_horizontal" android:layout_centerHorizontal="true"></TextView>

    <ImageView android:layout_width="wrap_content" android:src="@drawable/android_avatar_big" 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>

    <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"></ImageView>

    <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"></TextView>

    <ImageButton android:layout_width="120dp" android:id="@+id/screen_p2pcall_hangup" android:src="@drawable/phone_hang_up_48" android:layout_height="50dp" android:layout_below="@+id/screen_p2pcall_peer" android:layout_toRightOf="@+id/screen_p2pcall_status_icon" android:layout_marginTop="18dp"></ImageButton>

    <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"></ImageButton>

</RelativeLayout>

Java-код, где я хочу изменить центрирование @+id/screen_p2pcall_hangup по горизонтали во время выполнения:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.screen_p2pcall);
        final ImageButton hangup = (ImageButton)findViewById(R.id.screen_p2pcall_hangup);
        // ????
    }

Спасибо

1 Ответ

2 голосов
/ 03 октября 2011

Когда вы используете Относительный макет, вы должны добавить правила к параметрам макета, чтобы центрировать дочерние представления.К объекту относительного макета параметров необходимо добавить правило, подобное этому

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);

Это должно работать.

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