我有一个应用程序,显示活动中的全屏位图。为了提供快速加载时间,我将它们加载到内存中。但是当屏幕改变方向时,我想清除缓存,以便再次使用适合新维度的位图填充它。唯一的问题是,为了做到这一点,我需要检测何时发生方向变化。有谁知道如何检测到这个?
答案 0 :(得分:23)
请参阅官方文档http://developer.android.com/guide/topics/resources/runtime-changes.html
更改它实际上会创建一个新视图,并且将再次调用onCreate。
此外,您可以通过
进行检查@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
答案 1 :(得分:4)
您可以检查onSavedInstanceState
方法中的onCreate
,如果它不为空则表示这是配置更改。
答案 2 :(得分:3)
另一种方法是使用OrientationEventListener。
可以像这样使用:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
}
检查方向:
OrientationEventListener mOrientationEventListener = new OrientationEventListener(
this, SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
//checking if device was rotated
if (orientationPortrait != isPortrait(orientation)) {
orientationPortrait = !orientationPortrait;
Log.d(TAG, "Device was rotated!");
}
}
};
不要忘记启用和禁用监听器:
private boolean isPortrait(int orientation) {
return (orientation >= (360 - 90) && orientation <= 360) || (orientation >= 0 && orientation <= 90);
}
答案 3 :(得分:2)
通常情况下,方向更改会调用OnCreate()
,除非您已经做了一些其他操作。
你可以把逻辑放在那里。