安卓布局横屏模式无法正常工作

10
我一直在查看stackoverflow上的问题,并尝试了我所看到的所有方法,但是横向布局无法正常工作。我的代码里有一个名为onConfigurationChanged的方法。
@Override
 public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);           
}

还有清单文件:

<activity
        android:name="com.sde.PlayerTrack"
        android:theme="@style/AppTheme"
        android:configChanges="orientation|keyboardHidden|screenSize"
        >
    </activity>

我还尝试从Android清单中删除configChanges条目,然后加载横向布局,但我拥有的组件(TextView、滚动条等)无法正常工作。

你能帮我吗?

5个回答

25

从您的清单文件中删除orientation,并将您的横向布局xml文件放入layout-land文件夹中。


1
我之前已经做过这个,它可以工作,但是我的进度条没有正常工作。谢谢。 - Garmael
你在进度条方面遇到了什么问题?能详细解释一下吗? - Cheerag
我有一个异步类,它在启动活动时加载歌曲。然后当屏幕旋转到横向布局时,它可以工作,但歌曲不是连续的,而是重新加载。 - Garmael
这种方式会重新加载数据。不好。
我希望当屏幕旋转时,不重新加载数据,而是只自动选择layout-land或layout-port文件夹中的布局。
请帮忙。
- MrSiro
错误地在清单文件中留下了configChanges。无法感谢您提供的答案。我差点放弃了。 - Umair

10

最终,我的解决方案是:

AndroidManifest.xml 文件:

<activity
        android:name="activity.name"
        android:configChanges="orientation|keyboardHidden|screenSize"       
        >

在活动中实现方法onConfigurationChanged(Configuration newconfig):

@Override
 public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);     
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            createHorizontalalLayout();            
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            createVerticalLayout();             
        }
}
使用 createVerticalLayout () 和 createHorizontalLayout () 方法以编程方式创建布局。

3

对我来说,缺少的部分是干净的构建。不知何故,我的更改没有反映出来。 以下是我执行的步骤。

  1. layout文件夹旁边创建一个layout-land文件夹。

  2. 将activity_main.xml复制到layout-land文件夹中,并修改activity_main.xml以适应横向布局。

  3. 重要的是,您能够在设计视图中预览两个布局。当您进入布局文件的设计视图时,会看到一种移动旋转类型的图标。您应该能够使用该图标在布局预览之间切换。如果您能够切换,则意味着您的文件夹结构是正确的。您甚至可以使用此方法执行步骤1和步骤2。 确保您修复布局错误。

  4. 您的AndroidManifest.xml文件中不应具有属性android:configChanges =“”中的“方向”项

对我来说,现在它是空的

<activity android:name="com.sudoxer.app.MainActivity" android:configChanges="">
  1. 在进行这个更改后,清理项目并重新构建它。

您应该看到您期望的结果。


0

如果你正在运行Android模拟器4.4,请检查它是否存在某种方向上的错误。我曾经遇到过同样的问题,将模拟器更改为4.0.3后一切正常。请访问site以获取更多详细信息。


0
我曾经遇到过这个问题,经过大量调试后发现罪魁祸首在 build.gradle 文件中。Android Studio 添加了这行代码。
sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res/layout-land'] } }

当我试图手动创建layout-land时,我一直在搞砸。但是当我删除了那行代码后,一切恢复正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接