Android-将手机锁定为纵向,但允许平板电脑同时具有横向和纵向功能
我正在尝试编写一个应用程序,希望手机锁定为纵向,但允许平板电脑版本同时具有横向和纵向 基于以下所有问题,我已经创造了一些几乎有效的东西 到目前为止,我所做的是将活动扩展到我自己的基本活动中,并在onCreate和覆盖的onConfiguration Changed中包含方向更改代码Android-将手机锁定为纵向,但允许平板电脑同时具有横向和纵向功能,android,android-layout,onconfigurationchanged,Android,Android Layout,Onconfigurationchanged,我正在尝试编写一个应用程序,希望手机锁定为纵向,但允许平板电脑版本同时具有横向和纵向 基于以下所有问题,我已经创造了一些几乎有效的东西 到目前为止,我所做的是将活动扩展到我自己的基本活动中,并在onCreate和覆盖的onConfiguration Changed中包含方向更改代码 @Override protected void onCreate(Bundle savedInstanceState) { if(!(new DeviceHelper().isT
@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
的情况下完成您想要做的事情。让操作系统处理配置更改并提供正确的布局文件
如果你这样做,你应该是良好的平板电脑。他们不应该设定特定的方向,他们应该为每项活动打开正确的方向。使用快速黑屏,手机设备将出现您正在谈论的问题。现在的情况是,活动将首先在手机所在的方向打开,比如说横向。然后,它将在代码中设置方向为纵向,并进行配置更改,重新创建活动并导致您看到的瞬间闪光
有一些方法可以缓解这种情况
- 对于每个活动,请使用
中的AndroidManifest.xml
。这将以上一个活动所在的方向开始活动(手机的纵向,平板电脑的纵向)。然后你就不必担心活动会被创建两次,因为它总是以正确的方向开始android:screenOrientation=“behind”
- 然而,这并不能修复您的第一个活动。您可以在应用程序启动时处理启动程序活动,使其只闪烁一次,也可以在清单中将启动程序活动设置为
,并确保将平板电脑设置为android:screenOrientation=“肖像”
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u未指定)代码>在代码中。这可能会导致平板电脑启动时出现闪存
仅使用第一个要点就足够了,但您应该根据应用程序的用户体验要求定制您的实现 如果您的横向布局仅适用于平板电脑,我建议您将其放入平板电脑布局文件夹,即:layout-sw600dp-land(适用于7英寸平板电脑横向布局)和layout-sw720dp-land(适用于10英寸平板电脑横向布局)。这样,平板电脑布局将仅用于平板电脑。如果您没有为手机声明横向布局,它将使用常规纵向布局。分离平板电脑和手机的布局文件夹