android SystemUI阿拉伯语言下系统图标和通知图标交换位置

大家都知道,阿拉伯语言的顺序和我们正常读取语言的顺序不一样,阿拉伯的读取方式是从右到左,即RTL,而我们平常的是LTR,导致有android系统有些应用在阿拉伯语言切换下需要重写调整界面,其实android4.2开始,有对layoutRtl进行支持,来适配RTL下app的兼容阿拉伯语/波斯语等阅读习惯,可以在manifest的application标签添加:android:supportsRtl 取值:true/false,与此同时,layout中引入了如下属性兼容右左模式:

  1. paddingStart & paddingEnd 是根据左右对齐方式来起作用的
  2. 左对齐时, paddingStart 对应 paddingLeft, paddingEnd 对应 paddingRight
  3. 右对齐时, 正好相反 
  4. 使用MarginStart和MarginEnd来替代MarginLeft和MarginRight

以上是新增加的RTL的属性,下面讲讲上次遇到的bug,将SystemUI状态栏中系统图标和通知图标交换位置的代码
交换前代码:
<?xml version="1.0" encoding="utf-8"?>
<!--
/* apps/common/assets/default/default/skins/StatusBar.xml
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License"); 
** you may not use this file except in compliance with the License. 
** You may obtain a copy of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** Unless required by applicable law or agreed to in writing, software 
** distributed under the License is distributed on an "AS IS" BASIS, 
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
** See the License for the specific language governing permissions and 
** limitations under the License.
*/
-->

<!-- M: Support "SystemUI - Dual SIM". -->
<!--    android:background="@drawable/status_bar_closed_default_background" -->
<com.android.systemui.statusbar.phone.PhoneStatusBarView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
    android:id="@+id/status_bar"
    android:background="@drawable/system_bar_background"
    android:orientation="vertical"
    android:focusable="true"
    android:descendantFocusability="afterDescendants"
    android:fitsSystemWindows="true"
    >

    <ImageView
        android:id="@+id/notification_lights_out"
        android:layout_width="@dimen/status_bar_icon_size"
        android:layout_height="match_parent"
        android:paddingStart="6dip"
        android:paddingBottom="2dip"
        android:src="@drawable/ic_sysbar_lights_out_dot_small"
        android:scaleType="center"
        android:visibility="gone"
        />

    <LinearLayout android:id="@+id/status_bar_contents"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingStart="6dip"
        android:paddingEnd="6dip"
        android:orientation="horizontal"
        >

       

        <LinearLayout android:id="@+id/system_icon_area"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <LinearLayout android:id="@+id/statusIcons"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:orientation="horizontal"/>    
    
            <LinearLayout
                android:id="@+id/signal_battery_cluster"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:paddingStart="2dp"
                android:orientation="horizontal"
                android:gravity="center"
                >
                <include layout="@layout/gemini_signal_cluster_view" 
                    android:id="@+id/signal_cluster"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
	           <!-- M: Support Laptop Battery Status . @{ -->
                <com.mediatek.systemui.statusbar.util.LaptopBatteryView
                    android:id="@+id/laptop_battery"
                    android:layout_height="18dp"
                    android:layout_width="20dp"
                    android:layout_marginBottom="0.33dp"
                    android:layout_marginStart="4dip"
                    android:visibility="gone"
                    />
	           <!-- M: Support Laptop Battery Status . }@ -->
            <!-- M: Support "SystemUI - Battery Percentage". @{ -->
            <TextView
                android:id="@+id/percentage"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:visibility = "gone"
                android:paddingStart="4dip"
                android:textAppearance="@style/TextAppearance.StatusBar.Clock"
                />
            <!-- M: Support "SystemUI - Battery Percentage". }@ -->
                <!-- battery must be padded below to match assets -->
                <com.android.systemui.BatteryMeterView
                    android:id="@+id/battery"
                    android:layout_height="16dp"
                    android:layout_width="10.5dp"
                    android:layout_marginBottom="0.33dp"
                    android:layout_marginStart="4dip"
                    />
            </LinearLayout>
    
            <com.android.systemui.statusbar.policy.Clock
                android:id="@+id/clock"
                android:textAppearance="@style/TextAppearance.StatusBar.Clock"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:singleLine="true"
                android:paddingStart="6dip"
                android:gravity="center_vertical|start"
                />
        </LinearLayout>

        
          <LinearLayout
            android:id="@+id/notification_icon_area"
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal"
            >
            <com.android.systemui.statusbar.StatusBarIconView android:id="@+id/moreIcon"
                android:layout_width="@dimen/status_bar_icon_size"
                android:layout_height="match_parent"
                android:src="@drawable/stat_notify_more"
                android:visibility="gone"
                />

            <com.android.systemui.statusbar.phone.IconMerger android:id="@+id/notificationIcons"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentStart="true"
                android:gravity="center_vertical|end"
                android:orientation="horizontal"/>  
        </LinearLayout>


    </LinearLayout>

    <LinearLayout android:id="@+id/ticker"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingStart="6dip"
        android:animationCache="false"
        android:orientation="horizontal" >
        <ImageSwitcher android:id="@+id/tickerIcon"
            android:layout_width="@dimen/status_bar_icon_size"
            android:layout_height="@dimen/status_bar_icon_size"
            android:layout_marginEnd="4dip"
            >
            <com.android.systemui.statusbar.AnimatedImageView
                android:layout_width="@dimen/status_bar_icon_size"
                android:layout_height="@dimen/status_bar_icon_size"
                android:scaleType="center"
                />
            <com.android.systemui.statusbar.AnimatedImageView
                android:layout_width="@dimen/status_bar_icon_size"
                android:layout_height="@dimen/status_bar_icon_size"
                android:scaleType="center"
                />
        </ImageSwitcher>
        <com.android.systemui.statusbar.phone.TickerView android:id="@+id/tickerText"
            android:layout_width="0dip"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:paddingTop="2dip"
            android:paddingEnd="10dip">
            <TextView
                android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                />
            <TextView
                android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                />
        </com.android.systemui.statusbar.phone.TickerView>
    </LinearLayout>
</com.android.systemui.statusbar.phone.PhoneStatusBarView>
交换后代码:
<?xml version="1.0" encoding="utf-8"?>
<!--
/* apps/common/assets/default/default/skins/StatusBar.xml
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License"); 
** you may not use this file except in compliance with the License. 
** You may obtain a copy of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** Unless required by applicable law or agreed to in writing, software 
** distributed under the License is distributed on an "AS IS" BASIS, 
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
** See the License for the specific language governing permissions and 
** limitations under the License.
*/
-->

<!-- M: Support "SystemUI - Dual SIM". -->
<!--    android:background="@drawable/status_bar_closed_default_background" -->
<com.android.systemui.statusbar.phone.PhoneStatusBarView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
    android:id="@+id/status_bar"
    android:background="@drawable/system_bar_background"
    android:orientation="vertical"
    android:focusable="true"
    android:descendantFocusability="afterDescendants"
    android:fitsSystemWindows="true"
    >

    <ImageView
        android:id="@+id/notification_lights_out"
        android:layout_width="@dimen/status_bar_icon_size"
        android:layout_height="match_parent"
        android:paddingStart="6dip"
        android:paddingBottom="2dip"
        android:src="@drawable/ic_sysbar_lights_out_dot_small"
        android:scaleType="center"
        android:visibility="gone"
        />

    <LinearLayout android:id="@+id/status_bar_contents"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingStart="6dip"
        android:paddingEnd="6dip"
        android:orientation="horizontal"
        >
        
         <LinearLayout
            android:id="@+id/notification_icon_area"
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="horizontal"
            >
            <com.android.systemui.statusbar.StatusBarIconView android:id="@+id/moreIcon"
                android:layout_width="@dimen/status_bar_icon_size"
                android:layout_height="match_parent"
                android:src="@drawable/stat_notify_more"
                android:visibility="gone"
                />

            <com.android.systemui.statusbar.phone.IconMerger android:id="@+id/notificationIcons"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentStart="true"
                android:gravity="center_vertical"
                android:orientation="horizontal"/>  
        </LinearLayout>

       

        <LinearLayout android:id="@+id/system_icon_area"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <LinearLayout android:id="@+id/statusIcons"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:orientation="horizontal"/>    
    
            <LinearLayout
                android:id="@+id/signal_battery_cluster"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:paddingStart="2dp"
                android:orientation="horizontal"
                android:gravity="center"
                >
                <include layout="@layout/gemini_signal_cluster_view" 
                    android:id="@+id/signal_cluster"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
	           <!-- M: Support Laptop Battery Status . @{ -->
                <com.mediatek.systemui.statusbar.util.LaptopBatteryView
                    android:id="@+id/laptop_battery"
                    android:layout_height="18dp"
                    android:layout_width="20dp"
                    android:layout_marginBottom="0.33dp"
                    android:layout_marginStart="4dip"
                    android:visibility="gone"
                    />
	           <!-- M: Support Laptop Battery Status . }@ -->
            <!-- M: Support "SystemUI - Battery Percentage". @{ -->
            <TextView
                android:id="@+id/percentage"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:visibility = "gone"
                android:paddingStart="4dip"
                android:textAppearance="@style/TextAppearance.StatusBar.Clock"
                />
            <!-- M: Support "SystemUI - Battery Percentage". }@ -->
                <!-- battery must be padded below to match assets -->
                <com.android.systemui.BatteryMeterView
                    android:id="@+id/battery"
                    android:layout_height="16dp"
                    android:layout_width="10.5dp"
                    android:layout_marginBottom="0.33dp"
                    android:layout_marginStart="4dip"
                    />
            </LinearLayout>
    
            <com.android.systemui.statusbar.policy.Clock
                android:id="@+id/clock"
                android:textAppearance="@style/TextAppearance.StatusBar.Clock"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:singleLine="true"
                android:paddingStart="6dip"
                android:gravity="left|center"
                />
        </LinearLayout>

        
         


    </LinearLayout>

    <LinearLayout android:id="@+id/ticker"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingStart="6dip"
        android:animationCache="false"
        android:orientation="horizontal" >
        <ImageSwitcher android:id="@+id/tickerIcon"
            android:layout_width="@dimen/status_bar_icon_size"
            android:layout_height="@dimen/status_bar_icon_size"
            android:layout_marginEnd="4dip"
            >
            <com.android.systemui.statusbar.AnimatedImageView
                android:layout_width="@dimen/status_bar_icon_size"
                android:layout_height="@dimen/status_bar_icon_size"
                android:scaleType="center"
                />
            <com.android.systemui.statusbar.AnimatedImageView
                android:layout_width="@dimen/status_bar_icon_size"
                android:layout_height="@dimen/status_bar_icon_size"
                android:scaleType="center"
                />
        </ImageSwitcher>
        <com.android.systemui.statusbar.phone.TickerView android:id="@+id/tickerText"
            android:layout_width="0dip"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:paddingTop="2dip"
            android:paddingEnd="10dip">
            <TextView
                android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                />
            <TextView
                android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                />
        </com.android.systemui.statusbar.phone.TickerView>
    </LinearLayout>
</com.android.systemui.statusbar.phone.PhoneStatusBarView>


此外,记得在AndroidManifest.xml的application中添加android:supportsRtl="true",从而支持RTL模式

你可能感兴趣的:(android SystemUI阿拉伯语言下系统图标和通知图标交换位置)