Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方向更改时未调用OnConfiguration Changed()_Java_Android_Orientation_Android Relativelayout_Onconfigurationchanged - Fatal编程技术网

Java 方向更改时未调用OnConfiguration Changed()

Java 方向更改时未调用OnConfiguration Changed(),java,android,orientation,android-relativelayout,onconfigurationchanged,Java,Android,Orientation,Android Relativelayout,Onconfigurationchanged,我看到了一些相关的问题,但我无法解决我的问题。 我已经为纵向和横向模式创建了单独的布局 我已经修改了AndroidManifest.xml文件以进行相应的方向更改,但是当我在活动中实现它时,onConfigurationChanged()不起作用 现在问题出现在layout.addView(graphView,lp)。 我已经在GraphView类中编写了绝对硬编码值 所以它在纵向模式下工作得很好,但在切换到横向模式时graphView的位置不正确 为了解决这个问题,我创建了专门为横向模式编码的

我看到了一些相关的问题,但我无法解决我的问题。 我已经为纵向和横向模式创建了单独的布局

我已经修改了
AndroidManifest.xml
文件以进行相应的方向更改,但是当我在活动中实现它时,
onConfigurationChanged()
不起作用

现在问题出现在layout.addView(graphView,lp)onCreate()中进行编码>。 我已经在
GraphView
类中编写了绝对硬编码值

所以它在纵向模式下工作得很好,但在切换到横向模式时graphView的位置不正确

为了解决这个问题,我创建了专门为横向模式编码的
GraphViewLand
类。但不会从
onConfigurationChanged()
调用它

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

我做错什么了吗

我刚从以下地方读到:

对于您所说要在此处处理的任何类型的配置更改,您将收到对当前活动的onConfigurationChanged(配置)方法的调用,而不是重新启动但是,如果配置更改涉及任何您未处理的内容,活动仍将重新启动,并且不会调用OnConfiguration Changed(配置)。

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);
    }
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");
    }
}
onConfigurationChanged()方法

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);
    }
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");
    }
}

任何提示:)

您是否在活动类中将配置更改为覆盖进行编码? 基本覆盖:

// 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">

如何说未调用
onConfigurationChanged()
方法?日志没有打印吗?敬酒的人不在吗


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

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


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

我的应用程序始终以横向为方向。我已重写该方法以禁用自动定向。我以前在重写的OnConfiguration中更改了一些代码,但现在没有了。我之所以发布这篇文章,是因为只添加了这两个代码,它对我有效。它不能,应用程序总是作为landscape运行。我也使用了一个名为cocos2d android的库,我调用了一个实用方法来强制设置景观(为了安全…):应用程序是活动:这是什么意思:如果我编写android:screenOrientation=“landscape”在我的清单中,然后以纵向模式启动应用程序,它正在运行您之前指出的硬要求只是市场过滤器的硬件要求。我记不起来了,我得试试,但这里没有。我认为它在emulator中工作得很好。我一直在找,没错。日志没有打印出来,我甚至连祝酒词都没有。但是如果我没有在
onCreate()
中编写用于添加graphView的代码,我的
graphView
将如何显示?因此,我在
onCreate()
中调用
graphView
,在
onConfigurationChanged()
中调用另一个类,即
graphView
,但没有调用它。如果您甚至没有看到日志,那么我回答的第二部分就不相关了。我建议你看看Sunil Kumar Sahoo对这个问题的回答。这与您的案例更相关。
.manifest
文件是什么?您的意思是
AndroidManifest.xml
?好的,那么我需要实现
onConfigurationChanged()
方法吗?不,您也不需要,但是由于活动已被销毁和创建,您应该正确地保存和恢复应用程序状态,以便将应用程序上下文返回给用户。使用Bundle:,使用onRetainonconfigurationInstance(从未尝试过…)记事本图图练习3中的一些代码示例(不专用于配置更改):@Vince,但前一条注释中的第一个链接解释了如何保存布尔值、字符串等变量以进行检索。我想检索状态。