iT邦幫忙

0

android BottomNavigationView 可以設scroll bar嗎?

大家好:
想請教我有一個bottom_nav_menu.xml
使用上是OK了
但我想要新增個scroll bar,按哪個按鈕他就會移到哪
&我想要圖是和文字的間距大一點,但我

android:title="\n地點"

文字就會不見......還有哪些替代方案呢

程式碼:
bottom_nav_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/A"
        android:icon="@drawable/A"
        android:title="A" />
    <item
        android:id="@+id/B"
        android:icon="@drawable/B"
        android:title="B" />
    <item
        android:id="@+id/C"
        android:icon="@drawable/C"

        android:title="C" />
    <item
        android:id="@+id/D"
        android:icon="@drawable/D"
        android:title="D" />
</menu>

java:

  BottomNavigationView   nav_view=(BottomNavigationView)findViewById(R.id.nav_view);
        nav_view.setSelectedItemId(R.id.location);

        nav_view.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch (menuItem.getItemId()){
                    case R.id.A:
                        startActivity(new Intent(getApplicationContext(),A.class));
                    return true;
                  //.........
                }
                return false;
            }
        });

xml:

 <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        app:labelVisibilityMode="labeled"
        android:background="?android:attr/windowBackground"
        android:layout_alignParentBottom="true"
        app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
        app:menu="@menu/bottom_nav_menu" />

謝謝大家

1 個回答

1
最佳解答

根據你的需求 覺得你可以考慮使用 TabLayout

可以參考看看這個Sample 當你想要調整內容時 你可以只調整Item.xml來達到需求目的

// Activity onCreate呼叫createTabLayout()

private void createTabLayout() {
        TabLayout tab = findViewById(R.id.tabLayout);
        String[] tabText = {"A", "B", "C", "D"}; // tabItem 文字
        int[] tabImage = {R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher}; // tabItem 圖片
        for (int i = 0; i < tabText.length; i++) {
            tab.addTab(tab.newTab().setCustomView(customTabView(tabText[i], tabImage[i])));
        }
        tab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                // 選擇位置
                Log.i( "onTabSelected: ", String.valueOf(tab.getPosition()));
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                // 取消選擇的位置
                Log.i( "onTabUnselected: ", String.valueOf(tab.getPosition()));
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        });
    }

    private View customTabView(String tabText, int imageId) {
        View view = LayoutInflater.from(this).inflate(R.layout.tab_item, null);
        TextView tabTextView = view.findViewById(R.id.tabText);
        ImageView tabImageView = view.findViewById(R.id.tabImage);
        tabTextView.setText(tabText);
        tabImageView.setImageResource(imageId);
        return view;
    }

layout.xml

<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".TabLayoutTest">

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

tab_item.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/tabImage"
        android:layout_width="36dp"
        android:layout_height="36dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/stickern" />

    <TextView
        android:id="@+id/tabText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="@+id/tabImage"
        app:layout_constraintStart_toStartOf="@+id/tabImage"
        app:layout_constraintTop_toBottomOf="@+id/tabImage" />
</androidx.constraintlayout.widget.ConstraintLayout>
看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2021-05-24 18:20:36 檢舉

好久沒見了, 最近還好嗎?

小魚
謝謝關心 除身體有些狀況外 稍微還算可以
感謝你還記得我 那你最近還好嗎?
很久沒有接觸Android了 感覺都快已經不認識
今天看到這問題還稍微認識了新元件
希望能幫人解答

神威 iT邦新手 1 級 ‧ 2021-05-26 11:06:56 檢舉

謝謝莓莓( • ` v´• ) ,我會參考這個辦法,目前還是暫用BottomNavigationView,我已經找到文字跟icon拉開的方法了,但scrollbar還不曉得怎麼做,研究中....謝謝

神威
稍微幫你搜尋了一下 但是我沒有辦法幫你做測試
但是你可以參考看看關鍵字或是嘗試此內容的作法
https://stackoverflow.com/questions/54741711/how-to-set-indicator-in-bottomnavigationview

小魚 iT邦大師 1 級 ‧ 2021-05-26 20:30:20 檢舉

還好,
所以最近做哪一方面的工作?

神威 iT邦新手 1 級 ‧ 2021-05-27 08:58:39 檢舉

莓莓( • ` v´• ) 謝謝你,我已經做出來了~~

神威 不客氣 是我給你的那一個方法嗎 還是你自己有其他方法做出來 我也想知道怎麼做

小魚 跟之前一樣 不過受到疫情影響稍微可以抽點時間出來看程式

神威 iT邦新手 1 級 ‧ 2021-05-28 15:05:02 檢舉

莓莓( • ` v´• )你好:
你的方法我有試用,我也有用自己的方法,不過比較土就是了...
不介意我獻醜一下:

com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:background="?android:attr/windowBackground"
        app:labelVisibilityMode="labeled"
 app:itemIconTint="@drawable/bottom_navigation_selector"
 app:itemTextColor="@drawable/bottom_navigation_selector"
        app:menu="@menu/bottom_nav_menu">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <View
                android:id="@+id/t"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_weight=".75"
                android:layout_marginTop="95dp"

                />
            <View
                android:id="@+id/line2"
                android:layout_width="0dp"
                android:layout_height="6dp"
                android:layout_weight=".25"
                android:layout_marginTop="95dp"

                android:background="#00CE7C"/>

        </LinearLayout>

    </com.google.android.material.bottomnavigation.BottomNavigationView>

利用view畫線,再用LinearLayout設定比例即可完成~~
謝謝

能達成需求都能視為好方法吧

我還沒想到可以這麼做 謝謝你分享方法

我要發表回答

立即登入回答