2014-01-02 2 views
0

У меня есть относительный макет, который охватывает почти весь экран устройства. Когда я меняю ориентацию мобильного телефона, относительная ширина макета становится его высотой и наоборот. Я попытался реализовать onConfigurationChanged в другом классе (он не может быть в основном действии) для изменения его ширины и высоты вручную, но он не называется. Вот реализация:«onConfigurationChanged» не вызывается в другом классе

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     // I'd change its width and height here... 
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     // ... and here. 
    } 

} 

Я также поместить это в файл manifest.xml:

<activity 
     android:name="br.com.dialogscreator.MySecondActivity" 
     android:configChanges="orientation|keyboardHidden|screenSize" > 
</activity> 

я упускаю что-нибудь? Вот образ того, что происходит с моим относительным макетом:

RelativeLayout

Спасибо сейчас!

+2

'onConfigurationChanged' только вызывается на текущей видимой деятельности. – Tenfour04

ответ

0

С подсказкой Tenfour04 я создал флаг в mainActivity, чтобы узнать ориентацию экрана в каждом классе. Ниже, как я это сделал:

public static boolean isScreenPortrait; 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     isScreenPortrait = true; 
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     isScreenPortrait = false; 
    } 
} 

Тогда, когда мне нужно, я могу назвать флаг из другого класса, например:

if (MainActivity.isPortrait) { // Do what you want when the screen orientation is portrait. 
Смежные вопросы