Android定位技巧需要

时间:2012-05-22 11:38:48

标签: java android orientation

所以我在活动中有一个网页视图

我需要保持方向与设备所在的方向相同,当用户打开活动时(所以如果LANDSCAPE在活动开启时 - >保持那个!..如果PORTRAIT - &gt ;保持那个)

所以

  • 不需要XML清单符号..我不想强制特定的方向,只是为了保持打开一个!

这两个试探性无效:

 public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(null);

public void onConfigurationChanged(Configuration newConfig) {
      newConfig.orientation = getResources().getConfiguration().orientation;
      super.onConfigurationChanged(newConfig);

所以想法?

4 个答案:

答案 0 :(得分:0)

对于修复活动方向

设置清单活动

android:screenOrientation="portrait"

android:screenOrientation="landscape"

答案 1 :(得分:0)

您应该阅读Androids活动生命周期。 当您重新打开一个活动时,会构建一个新实例。因此没有“先前”的定位。 如果您希望在暂停活动时使用相同的方向,则应将之前的方向存储在生命周期中持续存在的值中。

编辑:如果你想让你的例子工作,你应该在清单中声明它们。

答案 2 :(得分:0)

把android:configChanges =" orientation"在你的活动清单中告诉android,活动将自己处理屏幕方向的变化。

答案 3 :(得分:0)

我不确定你为什么要实现这个功能,但这应该有效:

  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState == null) // you only want to save orientation when you are loading the activity for the first time
    {
        ((MyApp)getApplication()).orientation = getResources().getConfiguration().orientation; // I saved the orientation in the application class, but you can save it anywhere you like except in "this"
        Log.d("test", "orientation in onCreate: "+((MyApp)getApplication()).orientation);
    }

}
@Override
protected void onResume() {
    super.onResume();
    Log.d("test", "setContentview with orientation in onResume "+((MyApp)getApplication()).orientation);
    if(((MyApp)getApplication()).orientation==Configuration.ORIENTATION_LANDSCAPE)
    {
        setContentView(R.layout.my_layout_portrait);
    }
    else if(((MyApp)getApplication()).orientation ==Configuration.ORIENTATION_PORTRAIT)
    {
        setContentView(R.layout.my_layout_landscape);
    }
}

另一方面,强迫这样的方向对我来说是一个坏主意。