如何从右到左设计android.support.design.widget.NavigationView?

Posted

技术标签:

【中文标题】如何从右到左设计android.support.design.widget.NavigationView?【英文标题】:How to design right to left android.support.design.widget.NavigationView? 【发布时间】:2016-03-09 06:58:10 【问题描述】:

我想自定义 android.support.design.widget.NavigationView 类以使 NavigationItems 从右到左,以便导航项图标出现在文本的右侧。

使用的支持库版本:

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:design:23.1.1'

这是用于activity_main.xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
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:id="@+id/drawer_layout"
android:layout_
android:layout_
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
    android:id="@+id/app_bar_main"
    layout="@layout/app_bar_main"
    android:layout_
    android:layout_ />

<com.myapp.support.CustomNavigationView
    android:id="@+id/nav_view"
    android:layout_
    android:layout_
    android:layout_gravity="start"
    android:background="@color/colorPrimaryDark"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
    app:itemIconTint="@color/drawer_item_tint"
    app:itemTextColor="@color/drawer_item_text"
    app:menu="@menu/activity_main_drawer">

</com.myapp.support.CustomNavigationView>


</android.support.v4.widget.DrawerLayout>

这是我从支持库中的 NavigationView 类继承的 CustomNavigationView 类:

package com.myapp.support;

import android.content.Context;
import android.os.Build;
import android.support.design.widget.NavigationView;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;

public class CustomNavigationView extends NavigationView
    public CustomNavigationView(Context context) 
        this(context, null);
    

    public CustomNavigationView(Context context, AttributeSet attrs) 
        this(context, attrs, 0);
    

    public CustomNavigationView(Context context, AttributeSet attrs, int defStyleAttr) 
        super(context, attrs, defStyleAttr);
        //for api levels more than 17
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
            ViewCompat.setLayoutDirection(this, ViewCompat.LAYOUT_DIRECTION_RTL);

    


我使用了 ViewCompat.setLayoutDirection 方法;但它仅适用于 API 级别 17 及更高级别。 我没有找到任何其他方法或属性,例如 LayoutParams。 那么低层应该怎么做呢?还有其他方法可以强制图标出现在文本的右侧吗?

【问题讨论】:

将您的 CustomNavigationView 重力更改为 END。 没用。它只强制抽屉从页面右侧打开。我需要将导航菜单项放在其文本的右侧。 您可以为此创建自定义导航抽屉。 Android-NavigationView from right to left的可能重复 【参考方案1】:

我认为这应该在这里工作是你可以通过编程和在 xml 中做的事情

1> android:layout_gravity="right" 或结束

提示尝试在 android.support.v4.widget.DrawerLayout 标记和 com.myapp.support.CustomNavigationView 标记中设置此属性。

其次是代码:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
        R.drawable.ic_drawer, R.string.drawer_open,
        R.string.drawer_close) 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
        if (item != null && item.getItemId() == android.R.id.home) 
            if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) 
                mDrawerLayout.closeDrawer(Gravity.RIGHT);
             else 
                mDrawerLayout.openDrawer(Gravity.RIGHT);
            
        
        return false;
    
;

【讨论】:

也没什么用。我认为它只会强制抽屉从页面右侧打开。我需要将导航菜单项中的图标放在相应文本的右侧。 您以错误的方式和上下文发布了问题 也许问题标题不完整,但我在第一行解释了我真正需要的内容:“使 NavigationItems 从右到左,以便导航项图标出现在文本的右侧。”跨度>

以上是关于如何从右到左设计android.support.design.widget.NavigationView?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CGAffineTransform Scale 从右到左添加动画和放大动画

如何设置导航抽屉从右到左打开

IOS:UIViewAnimationTransitionCurlUp 从右到左

如何在从右到左的位置(视差)连续移动 Sprite?

如何从右到左显示 RadListView

如何使用 python 3 和 tkinter 模块从右到左对齐菜单栏中的项目?