2

我看到了一些相關的問題,但我無法解決我的問題。 我爲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

回答

5

如果您在xml中創建了兩種不同類型的視圖(用於橫向和縱向),並且您必須在不同類型的視圖上編寫邏輯,則不要在清單中使用android:configChanges

如果在清單沒有android:configChanges和你有橫向和縱向套不同的佈局,然後當你改變方向的控制會來的onCreate()這個方法,你可以寫你的邏輯裏。

1

你有沒有代碼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

1

你怎麼說,方法不叫?日誌沒有被打印?吐司是不是顯示?

其次,你提到的問題是在layout.addViewonCreate()。請注意,如果清單中存在android:configChanges,則不會在方向更改中調用onCreate()。您需要將以編程方式修改UI佈局的代碼片段移動到方法中。