【问题标题】:App crash in landscape using alias resources使用别名资源的横向应用程序崩溃
【发布时间】:2017-11-21 21:17:15
【问题描述】:

这真的是一个非常简单的应用程序。借助别名资源,此应用应在纵向模式下显示纵向,在横向模式下显示横向。

我会一步一步解释我做了什么。

  1. 我使用以下代码在 res/values 中创建了 refs.xml 文件:

    <resources>
       <item name = "activity_dualfragment" type="layout">@layout/activity_main</item>
    </resources>
    
  2. 我使用以下代码在 res/values-land 中创建了 refs.xml 文件。

    <resources>
       <item name = "activity_dualfragment" type="layout">@layout/activity_main_land</item>
    </resources>
    
  3. 我在 layout 文件夹中创建了 activity_main_land 布局,文本为“landscape”。

  4. 最后,我在 onCreate 方法中的 MainActivity.java 中分配了别名资源。

    setContentView(R.layout.activity_dualfragment);

那么有什么问题吗?请帮忙。

更新: 好的,错误是由于我删除了主活动中的浮动图标,错误消失了,现在应用程序不会崩溃。但是会发生什么情况是,当我的设备在我运行应用程序之前处于纵向时,即使我将其方向更改为横向,它也会显示纵向,但是如果我的设备处于横向,那么即使我将其设为纵向,它也会显示横向。那么发生了什么? @nigam

【问题讨论】:

  • 为什么我的代码没有显示出来?
  • 感谢@Nigam Patro。如何添加代码?
  • 删除了资源标签,它起作用了。
  • @nigam 谢谢。您能找出应用崩溃的问题吗?
  • 您遇到的崩溃是什么?请发布 logcat 错误。

标签: android


【解决方案1】:

您应该在清单文件中的活动标签下使用这一行:

android:configChanges="keyboardHidden|orientation|screenSize"

并使用以下方法获取当前屏幕的方向:

int orientation = this.getResources().getConfiguration().orientation;

if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    //code for portrait mode
  Log.d("Orientation", "ORIENTATION_PORTRAIT");
} else {
    //code for landscape mode
  Log.d("Orientation", "ORIENTATION_LANDSCAPE");
}

【讨论】:

  • 请在代码显示后再次查看我的问题。我想使用别名资源更改布局。
【解决方案2】:

您可以为两个方向创建单独的布局。布局版本将由 Android 系统自动分配。您可以根据方向版本放置具有不同文本的 TextView。

布局文件必须具有相同的名称,但必须放置到不同的子目录。您可以使用 Android Studio 通过右键单击 -> 新建 -> 新建资源文件 -> 限定符方向来创建它,如下所示:

【讨论】:

  • 不能使用资源别名改变布局吗?我知道还有其他方法,但我正在创建的项目需要这个技巧才能发挥作用。
  • 不幸的是@soche123,我所描述的方式是我所知道的创建布局的方向版本的唯一可靠方式。
【解决方案3】:

好的,我已经解决了更新中提到的问题。正是清单文件中的这一行代码导致了问题。 android:configChanges="keyboardHidden|方向|screenSize" 现在我将其删除后,我的应用会根据使用别名的方向显示不同的布局。

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多