2

我在 SO 上看到了一些相关问题,但我无法解决我的问题。我为肖像和风景模式创建了单独的布局。

我已修改AndroidManifest.xml文件以进行相应的方向更改,但onConfigurationChanged()在活动中实现它时无法正常工作。

现在问题layout.addView(graphView, lp);onCreate(). 我在GraphView课堂上写了绝对硬编码值。

所以它在肖像模式下完美地工作,但是当我切换到风景模式时,graphView 没有正确放置。

为了解决这个问题,我创建了GraphViewLand专门为 LANDSCAPE 模式编码的类。但它没有被调用onConfigurationChanged()

由于我main.xml为每个方向创建了单独的文件,因此其余的布局非常完美。但由于graphView是以编程方式创建的,因此放置不正确。

我在这里做错什么了吗?

我刚从这里读到这个:

对于您说您在那里处理的任何类型的配置更改,您将收到对当前活动的 onConfigurationChanged(Configuration) 方法的调用,而不是重新启动。但是,如果配置更改涉及您未处理的任何内容,则活动仍将重新启动,并且不会调用 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 :)

4

3 回答 3

5

如果您在 xml 中创建两种不同类型的视图(用于横向和纵向)并且您必须在不同类型的视图上编写逻辑,则不要android:configChanges在清单中使用。

如果android:configChanges清单中没有,并且横向和纵向有不同的布局集,那么当您更改方向时,您的控件将进入该方法内的 onCreate() ,您可以编写逻辑。

于 2011-12-16T10:43:27.787 回答
1

您是否在Activity类中将 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">
于 2011-12-16T10:23:17.800 回答
1

怎么说onConfigurationChanged()方法没有被调用?没有打印日志吗?吐司不是在显示吗?

其次,您提到问题出layout.addViewonCreate(). 请注意,如果android:configChanges清单中存在,则onCreate()不会在方向更改时调用。您需要将以编程方式修改 UI 布局的代码段移动到onConfigurationChanged()方法中。

于 2011-12-16T10:42:06.847 回答