【问题标题】:Add margins to navigation item in BottomNavigationView在 BottomNavigationView 中为导航项添加边距
【发布时间】:2017-12-11 23:54:41
【问题描述】:

我有一个BottomNavigationView,我这样实例化它:

BottomNavigationView navigationView = findViewById(R.id.bottom_navigation);
navigationView.setOnNavigationItemSelectedListener(this);

/menu/menu.xml 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/first_id"
        android:icon="@drawable/home_icon"
        android:title="Item" />

    <item
        android:id="@+id/second_id"
        android:icon="@drawable/home_icon"
        android:title="Item" />

    <item
        android:id="@+id/third_id"
        android:icon="@drawable/home_icon"
        android:title="Item" />

    <item
        android:id="@+id/fourth_id"
        android:icon="@drawable/home_icon"
        android:title="Item" />
</menu>

而 /drawable/home_icon 看起来像这样:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="#FFFFF0"
        android:pathData="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"
        android:strokeColor="#FFFFF0"
        android:strokeWidth="1" />
</vector>

如您所见,导航项的按钮周围有边框,但是,边框彼此接触。因此,我想在菜单按钮之间添加一个边距。我该怎么做?

从屏幕截图中也可以看出,我正在阻止转换模式。我通过调用来做到这一点

BottomNavigationViewHelper.removeShiftMode(navigationView);

使用来自here的代码。

按钮周围的边框是这样添加的:

int stateListDrawable = drawableStateLists.get(currentFragment);
navigationView.setItemBackgroundResource(stateListDrawable);

stateListDrawable 指的是StateListDrawable,当按下不同的菜单按钮时它会发生变化。 StateListDrawable 指的是一个 xml 选择器,该选择器又指的是一个像这样的 xml 形状,例如:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="5dp"/>
    <stroke
        android:width="2dp"
        android:color="@color/intro"/>
</shape>

【问题讨论】:

  • 你是如何添加这些边框的?
  • @azizbekian 请看我的编辑。

标签: java android android-layout android-view bottomnavigationview


【解决方案1】:

在仔细检查和试验来源之后,我想出了最基本和合法的解决方案 - 插入可绘制对象本身。

已经像这样声明了 xml 可绘制对象:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="10dp"
    android:insetRight="10dp">
    <shape android:shape="rectangle">
        <corners android:radius="5dp" />
        <stroke
            android:width="2dp"
            android:color="#ffffff" />
    </shape>
</inset>

你会得到以下输出:

我首先努力寻找一种程序化的解决方案,但结果发现并没有那么多接缝可以做到这一点(至少这是我的发现)。准确地说,每个项目的布局参数都是ViewGroup.LayoutParams 的实例。如果该项目使用ViewGroup.MarginLayoutParams 进行布局,那么就有可能为每个项目单独设置边距。在此之前,应改为应用背景可绘制 xml。

【讨论】:

  • 应该如何实现?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 2011-12-30
相关资源
最近更新 更多