2012-06-09 1 views
1

У меня есть изображение, которое находится в верхней центральной части экрана и кнопка, которая выравнивает параметрParentRight. И установите для этого изображение ниже. Я хочу, чтобы, когда он находится на пейзажном изображении, изображение не так долго, я хочу переместить кнопку на верх. Есть ли способ достичь этого? БлагодаряAndroid - Переместите кнопку вверх, когда переключитесь в альбомный режим

Портрет Просмотр

_________________ 
|[ <--Image--> ]| 
|   [Button]| 

Ландшафтный вид

_________________________________ 
|  [ <--Image--> ]   | 
|       [Button]| 
|         | 

ответ

1

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

Слушайте ориентацию экрана. Я не уверен, как ваше приложение обрабатывает его в данный момент. Перезагружает приложение (поведение по умолчанию) или вы предотвращаете его, переопределяя onConfigChanged?

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

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
windowManager.getDefaultDisplay().getOrientation(); 

Теперь вы знаете свою ориентацию экрана, вы можете установить расположение кнопки программно. Вместо alignParentRight вы можете использовать alignRightOf относительно ImageView, предполагая, что используете RelativeLayout.

Чтобы установить макет программно (см here для источника):

RelativeLayout.Layoutparams params = (RelativeLayout.LayoutParams)button.getLayoutParams(); 
params.addRule(RelativeLayout.RIGHT_OF, R.id.id_to_be_left_of); 

button.setLayoutParams(params); //causes layout update 
+0

«Перезагружает приложение (поведение по умолчанию) или вы предотвращаете его, переопределяя onConfigChanged»: он не перезапустит действие. – Manto

+0

Мне нужно что-то вроде onOrientationChange() {Move Buttons}. Кнопки уже есть, но когда пользователь меняет ориентацию, кнопки должны перемещаться без перезапуска. – Manto

0

Вы должны создать отдельный макет для альбомной и портретной mode.see this.

+0

Я знаю, что может быть вариант, и я попытался таким образом. Но переключение между этой компоновкой и макетом из папки макета-земли занимает слишком много времени, чтобы загрузить ... Есть ли способ, которым я могу сделать что-то вроде gravity = top. – Manto

+0

, тогда вы должны использовать решение, предложенное @BDFun. – Eight

Смежные вопросы