当前使用的是横向或纵向布局?

时间:2019-03-06 06:46:04

标签: android android-layout android-fragments kotlin multi-window

我正面临一个问题,需要通过使我的视图智能化当前使用的视图类型来解决该问题。

我有两种布局,一种是纵向的,另一种是横向的。

  • MyFragmentLayout.xml
  • MyFragmentLayout.xml (地)

我当前正在为孩子设置带有一些填充的“片段视图”,并且我希望该视图知道当前正在使用哪种布局类型(纵向/横向)。 这是我使用的代码:

 val verticalPadding = if (context.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE)

            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50f, displayMetrics)

        else

            TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150f, displayMetrics)

在方向改变的情况下,以上工作都是完美的。

问题:

我正在为我的应用程序提供多窗口支持,而我面临的问题是 Window 处于纵向模式(即方向为纵向)

但是由于可用区域而导致的应用程序将布局从纵向模式切换为横向模式。

ScreenShot 如您所见,带有红色条的上部窗口处于“纵向”模式,但是应用程序使用的是“横向布局”。(对我而言,这很完美)

我想知道如何独立于移动设备的当前方向来确定我的应用程序当前正在使用哪种布局。

2 个答案:

答案 0 :(得分:1)

我不知道这是否是最好的方法,但是您可以为布局提供不同的容器ID,并在onViewCreated方法中搜索这些ID。

例如

  • MyFragmentLayout.xml:
androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/portraitContainer"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent">
  • MyFragmentLayout.xml(陆地)
<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/landscapeContainer"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent">

然后,在您的onViewCreated方法中:

View v = view.findview(R.id.portraitContainer)
if (v !=null){
  // portrait layout loaded
} else{
  // landscape layout loaded
}

让我知道这是否有帮助;)

答案 1 :(得分:0)

我针对该问题的当前解决方案如下。

我创建了:

  • dimens.xml(/ values文件夹)

  • dimens.xml (地)(/ values-land文件夹)

要存储Padding Dimension用于不同类型的布局(纵向和横向)。

val verticalPadding = context.resources
                             .getDimension
                             .getDimension(R.dimens.vertical_padding)

这是我发现的最佳方法。我正在寻找一种更好的方法,可以通过JAVA/Kotlin代码控制,而 不能通过单独的xml文件

在上述解决方案中,当应用程序选择使用 MyFragmentLayout.xml(地)时 (横向布局),然后应用程序自动从 尺寸(土地)

中获取尺寸