正常情况下可以在 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 的方向页转不了了