Android Studio开发跳棋游戏真机棋盘按钮顺序反转问题
问题原因
该问题由Android的RTL布局适配机制触发:
- Android Studio内置模拟器默认使用LTR(从左到右)布局方向,适配中文、英文等从左书写的语言,因此水平
LinearLayout会按XML中编写的顺序从左到右排列子控件,棋盘显示正常。 - 真机出现顺序反转,说明当前设备要么开启了开发者选项中的「强制使用RTL布局方向」开关,要么系统当前设置为阿拉伯语、希伯来语这类从右到左书写的语言。水平
LinearLayout默认会跟随系统布局方向调整排列顺序,RTL模式下子控件会从右往左排布,和XML编写顺序完全相反,最终出现所有行棋子顺序颠倒的现象。
修复方案
根据需求二选一即可:
方案1:单页面强制LTR布局(适配成本最低)
在棋盘页面的根布局标签中添加android:layoutDirection="ltr"属性,强制当前页面无论系统设置如何,都固定使用从左到右的布局方向,修改后的根布局示例:
<LinearLayout 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" android:orientation="vertical" android:layout_gravity="center" android:layoutDirection="ltr" tools:context=".MainActivity">
添加后所有水平排列的棋盘行都会固定按XML编写顺序展示,不会再随系统设置反转。
方案2:全局关闭RTL适配
如果你的整个应用都不需要适配RTL语言,可以直接在项目的AndroidManifest.xml文件的<application>标签中添加android:supportsRtl="false",示例:
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="false" android:theme="@style/Theme.YourAppName">
设置后App内所有页面都不会响应系统RTL设置,固定使用从左到右的布局逻辑。
补充:如果后续需要适配RTL语言,不建议使用上述两种强制固定LTR的方案,需要将布局中所有涉及位置的
left/right属性替换为start/end属性做专门适配。但跳棋这类固定规则的棋盘类游戏,直接强制LTR是最稳妥高效的方案。
内容的提问来源于stack exchange,提问作者Itamar Bloom
相关产品推荐
相关产品推荐

