onConfigurationChanged()未在方向更改中调用

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 :)

+0

什么是`.manifest`文件?你的意思是`AndroidManifest.xml`吗? – WarrenFaith 2011-12-16 10:47:20

如果您在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"> 
+0

我的应用程序始终以风景为导向。我已经覆盖了禁用自动定位的方法。在overConided onConfigurationChanged之前我有一些代码,但没有更多。我发布这个,因为只有这2个代码添加它为我工作。 – Vince 2011-12-16 10:28:30

+0

它不能,应用程序总是作为风景运行 – Vince 2011-12-16 10:31:16

+0

我也使用了一个名为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.addViewonCreate()。请注意,如果清单中存在android:configChanges,则不会在方向更改中调用onCreate()。您需要将以编程方式修改UI布局的代码片段移动到方法中。