MenuItem图标无法在RTL布局中正确显示

时间:2019-01-14 10:42:24

标签: android android-layout right-to-left android-menu optionmenu

在RTL中,选项菜单项图标未正确显示! 但是在LTR中,所有内容都能很好地显示。

借助此命令,我制作了RTL程序

getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

我的菜单layout.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:gravity="start"
    android:layoutDirection="rtl"
    android:layout_gravity="start">
    <item
        android:id="@+id/action_more"
        android:icon="@drawable/ic_add_white_24dp"
        android:title=""
        app:showAsAction="always">
        <menu>
            <item
                android:id="@+id/action_settings"
                android:icon="@drawable/ic_wb_sunny_black_24dp"
                android:title="آیتم شماره 1"/>

            <item
                android:id="@+id/action_settings2"
                android:icon="@drawable/ic_star_black_24dp"
                android:title="آیتم شماره 2"/>

            <item
                android:id="@+id/action_settings3"
                android:icon="@drawable/ic_wb_sunny_black_24dp"
                android:title="آیتم شماره 3"/>
        </menu>
    </item>
</menu>

请帮助我解决此问题。

Screenshot

5 个答案:

答案 0 :(得分:4)

我在RTL布局中遇到了同样的问题,如果您使用的是支持库 AndroidX ,则可以应用以下简单修补程序:

  1. 在您的项目中,在res -> layout中使用名称abc_list_menu_item_icon.xml创建新的布局文件。
  2. 将下面的代码复制到步骤1中的文件中。

    <?xml version="1.0" encoding="utf-8"?>
    <!-- Copyright (C) 2007 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.
    -->
    
    <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
               android:id="@+id/icon"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_gravity="center_vertical"
               android:layout_marginLeft="8dip"
               android:layout_marginRight="-8dip"
               android:layout_marginStart="8dip"
               android:layout_marginEnd="-8dip"
               android:layout_marginTop="8dip"
               android:layout_marginBottom="8dip"
               android:scaleType="centerInside"
               android:duplicateParentState="true"/>
    

答案 1 :(得分:1)

自定义工具栏弹出主题,覆盖

android:layout_marginStart android:layout_marginEnd

首先将此行添加到您的res / values / styles.xml

<style name="PopupTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:layout_marginStart">2dp</item>
    <item name="android:layout_marginEnd">2dp</item>
</style>

然后将工具栏的popupTheme设置为“ PopupTheme”,如下所示:

......
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    app:navigationIcon="@drawable/arrow_back"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    app:popupTheme="@style/PopupTheme"
    app:title="@string/toolbar_title"/>
......

干杯!

答案 2 :(得分:0)

此修复程序可在appcompat:1.3.0-alpha02

中获得

在更新日志中:

在带有图标(I2f5c5)的菜单项中支持RTL: https://android-review.googlesource.com/c/platform/frameworks/support/+/1353122

答案 3 :(得分:0)

正如我所见,您使用的是 vector/xml drawable(即不是 png),在这种情况下,您可以使用 inset,特别是 android:insetRight 属性

您可以将其应用于所有可绘制对象:(ic_wb_sunny_black_24dp, ic_star_black_24dp, & ic_wb_sunny_black_24dp)

矢量可绘制示例:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetRight="16dp">
    <vector
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24"
        android:viewportHeight="24"
        app:tint="@color/item_text">
        <path
            android:fillColor="@color/item_text"
            android:pathData="M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M7.4,15.4L12,10.8L16.6,15.4L18,14L12,8L6,14L7.4,15.4Z" />
    </vector>
</inset>

xml drawable 示例:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetRight="16dp">

    <shape android:shape="oval">

        <solid android:color="@color/highlight_1" />
        <stroke
            android:width="2dp"
            android:color="@color/transparent" />
        <size
            android:width="30dp"
            android:height="30dp" />
    </shape>

</inset>

答案 4 :(得分:-1)

您必须使用您的语言创建另一个文件夹

ex:阿拉伯语为 layout-ar