4

Ich habe einen BottomNavigationView, die ich so instanziiert:Margen Navigationspunkt in BottomNavigationView

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

/menu/menu.xml sieht wie folgt aus:

<?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> 

und/ziehbar/Home_icon Aussehen wie folgt:

<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> 

Wie Sie sehen können, habe ich Grenzen um die Schaltflächen der navigat Bei Items berühren sich jedoch die Grenzen. Daher möchte ich einen Rand zwischen den Menütasten hinzufügen. Wie kann ich das machen?

enter image description here

Wie Sie auch aus dem Screenshot sehen kann, ich verhindern Modus verschieben. Ich tue dies durch

BottomNavigationViewHelper.removeShiftMode(navigationView); 

unter Verwendung von Code aus here aufrufen.

Die Ränder um die Tasten wie folgt zugesetzt wurden:

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

während stateListDrawable auf eine StateListDrawable bezieht, die sich ändert, wenn ein anderes Menü-Taste gedrückt wird. Die StateListDrawable bezieht sich auf einen XML-Selektor, der wiederum in eine XML-Form, wie dies bezieht sich, zum Beispiel:

<?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> 
+0

Wie haben Sie diese Grenzen hinzugefügt? – azizbekian

+0

@azizbekian Bitte sehe meine Bearbeitung. – kalabalik

Antwort

2

Nach sorgfältiger Prüfung und mit Quellen zu experimentieren, habe ich kam mit dem grundlegendsten und legitimer Lösung up - Einsatz das Ziehbare selbst.

Nachdem die XML-ziehbar wie folgt erklärt:

<?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> 

Sie folgende Ausgabe erhalten werden:

enter image description here

Ich strebte zunächst eine programmatische Lösung zu finden, aber es stellt sich heraus, nicht der Fall ist Es gibt so viele Nähte, um das zu tun (zumindest das sind meine Ergebnisse). Um genau zu sein, sind die Layout-Parameter jedes Elements eine Instanz von ViewGroup.LayoutParams. Wäre der Artikel mit ViewGroup.MarginLayoutParams ausgelegt worden, dann wäre es möglich, für jeden Artikel einzeln eine Marge festzulegen. Bis dahin sollte stattdessen die Hintergrund-Zeichnungs-XML angewendet werden.

+0

Das funktioniert! – kalabalik