Android 屏幕方向监听

正常情况下可以在 Activity 中能够监听到,但是如果是在Window上就不那么好监听了.

ok 首先说一下正常情况下 屏幕方向的监听
1. 在mainfest文件中得Activity中加入如下属性 android:configChanges="orientation|screenSize"
如下: 
<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize"
    >
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>
2. 在Activity 中重写 onConfigurationChanged 方法如下:
@Override
public void onConfigurationChanged(Configuration newConfig) {
    LogUtil.e(TAG, "orientation = " + newConfig.orientation);
    super.onConfigurationChanged(newConfig);
}
这样就可以监听到 屏幕方向变化了,
不过还有一个问题就是,  它只能监听90度的变化,  如果 一个方向的横屏转到另一个方向的横屏监听不了, 即转了180的就监听不了, 因为这种的屏幕方向变化, 并不会导致 Configuration 变化,

额 还有一点需要说明的是, 入股哦没有 加上 android:configChanges="orientation|screenSize” 的话, 那种每次屏幕发生变化都会导致Activity 重新初始化,走onCreate方法

如果想Activity 保持一个固定方向不变化的话可以加入以下属性:
android:screenOrientation="portrait”           竖屏
android:screenOrientation=“landscape”      横屏


ok 下面讲在 Window上如何监听屏幕方向变化:
其实也没有什么好的方法, 只是每次屏幕变化都会到时View 重新layout 只能在layout的时候自己去获取屏幕放了 
addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        boolean isPortrait = getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
        // 监听屏幕方向变化
    }
});

当然其实Window 也是可以保持屏幕的:
只要在相应的layoutParms 参数中加入如下: 
mDanmakuViewParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

不过这样会导致 Window下面的Activity 的方向页转不了了


你可能感兴趣的:(android,屏幕方向)