Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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
Android-将手机锁定为纵向,但允许平板电脑同时具有横向和纵向功能_Android_Android Layout_Onconfigurationchanged - Fatal编程技术网

Android-将手机锁定为纵向,但允许平板电脑同时具有横向和纵向功能

Android-将手机锁定为纵向,但允许平板电脑同时具有横向和纵向功能,android,android-layout,onconfigurationchanged,Android,Android Layout,Onconfigurationchanged,我正在尝试编写一个应用程序,希望手机锁定为纵向,但允许平板电脑版本同时具有横向和纵向 基于以下所有问题,我已经创造了一些几乎有效的东西 到目前为止,我所做的是将活动扩展到我自己的基本活动中,并在onCreate和覆盖的onConfiguration Changed中包含方向更改代码 @Override protected void onCreate(Bundle savedInstanceState) { if(!(new DeviceHelper().isT

我正在尝试编写一个应用程序,希望手机锁定为纵向,但允许平板电脑版本同时具有横向和纵向

基于以下所有问题,我已经创造了一些几乎有效的东西

到目前为止,我所做的是将活动扩展到我自己的基本活动中,并在onCreate和覆盖的onConfiguration Changed中包含方向更改代码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if(!(new DeviceHelper().isTablet(this)))
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        super.onCreate(savedInstanceState);
        setupActionBar(getActivity());


    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        //don't reload the current page when the orientation is changed
        if(!(new DeviceHelper().isTablet(this)))
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        super.onConfigurationChanged(newConfig);

    }
这一切都很好(我重写了onConfigurationChanged,以避免活动被破坏和重新创建,这会导致一瞬间出现黑屏)

我的主要问题是,如果你把手机放在横向位置,那么活动仍然是纵向的……太完美了!但是,由于手机处于实际的横向布局,因此使用横向布局,这是平板电脑的布局

我的理解是,当调用setRequestedOrientation时,它应该立即启动OnConfiguration Changed,但是,首先调用片段,然后错误地膨胀布局,然后调用OnConfiguration Changed,这意味着已经设置了横向布局

我知道我可以根据配置在我的每个活动中设置布局,但我真的不想这样做

因此,如何让应用程序根据setRequestedOrientation从相应的res文件夹使用相应的布局文件呢

谢谢

这一切都很好(我重写了onConfigurationChanged,以避免活动被破坏和重新创建,这会导致一瞬间出现黑屏)

我很确定这是你问题的根源。您应该能够在不覆盖
onConfigurationChanged
的情况下完成您想要做的事情。让操作系统处理配置更改并提供正确的布局文件

如果你这样做,你应该是良好的平板电脑。他们不应该设定特定的方向,他们应该为每项活动打开正确的方向。使用快速黑屏,手机设备将出现您正在谈论的问题。现在的情况是,活动将首先在手机所在的方向打开,比如说横向。然后,它将在代码中设置方向为纵向,并进行配置更改,重新创建活动并导致您看到的瞬间闪光

有一些方法可以缓解这种情况

  • 对于每个活动,请使用
    AndroidManifest.xml
    中的
    android:screenOrientation=“behind”
    。这将以上一个活动所在的方向开始活动(手机的纵向,平板电脑的纵向)。然后你就不必担心活动会被创建两次,因为它总是以正确的方向开始

  • 然而,这并不能修复您的第一个活动。您可以在应用程序启动时处理启动程序活动,使其只闪烁一次,也可以在清单中将启动程序活动设置为
    android:screenOrientation=“肖像”
    ,并确保将平板电脑设置为
    setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u未指定)在代码中。这可能会导致平板电脑启动时出现闪存

仅使用第一个要点就足够了,但您应该根据应用程序的用户体验要求定制您的实现

这一切都很好(我重写了onConfigurationChanged,以避免活动被破坏和重新创建,这会导致一瞬间出现黑屏)

我很确定这是你问题的根源。您应该能够在不覆盖
onConfigurationChanged
的情况下完成您想要做的事情。让操作系统处理配置更改并提供正确的布局文件

如果你这样做,你应该是良好的平板电脑。他们不应该设定特定的方向,他们应该为每项活动打开正确的方向。使用快速黑屏,手机设备将出现您正在谈论的问题。现在的情况是,活动将首先在手机所在的方向打开,比如说横向。然后,它将在代码中设置方向为纵向,并进行配置更改,重新创建活动并导致您看到的瞬间闪光

有一些方法可以缓解这种情况

  • 对于每个活动,请使用
    AndroidManifest.xml
    中的
    android:screenOrientation=“behind”
    。这将以上一个活动所在的方向开始活动(手机的纵向,平板电脑的纵向)。然后你就不必担心活动会被创建两次,因为它总是以正确的方向开始

  • 然而,这并不能修复您的第一个活动。您可以在应用程序启动时处理启动程序活动,使其只闪烁一次,也可以在清单中将启动程序活动设置为
    android:screenOrientation=“肖像”
    ,并确保将平板电脑设置为
    setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u未指定)在代码中。这可能会导致平板电脑启动时出现闪存


仅使用第一个要点就足够了,但您应该根据应用程序的用户体验要求定制您的实现

如果您的横向布局仅适用于平板电脑,我建议您将其放入平板电脑布局文件夹,即:layout-sw600dp-land(适用于7英寸平板电脑横向布局)和layout-sw720dp-land(适用于10英寸平板电脑横向布局)。这样,平板电脑布局将仅用于平板电脑。如果您没有为手机声明横向布局,它将使用常规纵向布局。分离平板电脑和手机的布局文件夹