onConfigurationChanged()未在方向更改中调用
我看到了一些相关的问题,但我无法解决我的问题。 我为PORTRAIT和LANDSCAPE模式创建了单独的布局。onConfigurationChanged()未在方向更改中调用
我修改了AndroidManifest.xml
文件以进行相应的方向更改,但在我在活动中实施时不起作用。
现在问题在于layout.addView(graphView, lp);
在onCreate()
。 我在GraphView
类中写了绝对的硬编码值。
因此,它可以完美的处理PORTRAIT模式,但是当我切换到LANDSCAPE模式时graphView不能正确放置。
要解决此问题,我创建了GraphViewLand
类,它专门为LANDSCAPE模式编码。但它没有从中调用。
其余布局完美,因为我为每个方向创建了单独的main.xml
文件。但由于graphView
是以编程方式创建的,因此未正确放置。
我在这里做错了什么吗?
我刚刚从here阅读:
对你说,你处理有什么类型的配置更改,您将收到一个电话到你当前活动的onConfigurationChanged(配置)方法,而不是被重新启动。 但是,如果配置更改涉及任何您不处理的操作,该操作仍将重新启动,并且不会调用onConfigurationChanged(Configuration)。
onCreate()方法
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
RelativeLayout layout = (RelativeLayout) findViewById(R.id.MainLayout);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.ALIGN_TOP, btnindex.getId());
GraphView graphView = new GraphView(this, values, "CurrentGraph",
horlabels, verlabels);
layout.addView(graphView, lp);
}
onConfigurationChanged()方法
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
Log.v("LAND", "SCPAE");
}
}
任何帮助appriciated :)
如果您在xml中创建了两种不同类型的视图(用于横向和纵向),并且您必须在不同类型的视图上编写逻辑,则不要在清单中使用android:configChanges
。
如果在清单没有android:configChanges
和你有横向和纵向套不同的布局,然后当你改变方向的控制会来的onCreate()这个方法,你可以写你的逻辑里。
你有没有代码onConfigurationChanged为覆盖在您的活动类? 基本覆盖:
// Called on rotation.
// Does not call onDestroy anymore due to android:configChanges="keyboardHidden|orientation" in manifest
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
}
我的信息舱单申报:
<activity android:name=".Slime"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="landscape">
我的应用程序始终以风景为导向。我已经覆盖了禁用自动定位的方法。在overConided onConfigurationChanged之前我有一些代码,但没有更多。我发布这个,因为只有这2个代码添加它为我工作。 – Vince 2011-12-16 10:28:30
它不能,应用程序总是作为风景运行 – Vince 2011-12-16 10:31:16
我也使用了一个名为cocos2d-android的库,并且我调用了强制风景的实用程序方法(用于安全...):https://github.com/ZhouWeikuan /cocos2d/blob/master/cocos2d-android/src/org/cocos2d/nodes/CCDirector.java#L278 theApp是Activity:http://developer.android.com/reference/android/app/Activity.html#setRequestedOrientation( int) – Vince 2011-12-16 10:35:16
你怎么说,方法不叫?日志没有被打印?吐司是不是显示?
其次,你提到的问题是在layout.addView
onCreate()
。请注意,如果清单中存在android:configChanges
,则不会在方向更改中调用onCreate()
。您需要将以编程方式修改UI布局的代码片段移动到方法中。
什么是`.manifest`文件?你的意思是`AndroidManifest.xml`吗? – WarrenFaith 2011-12-16 10:47:20