代码之家  ›  专栏  ›  技术社区  ›  Zafar Kurbonov

如何制作标题在下面的固定BottomNavigationView,无移位导航

  •  0
  • Zafar Kurbonov  · 技术社区  · 7 年前

    OriginalPhoto.png

    下面是我自己项目的BottomNavigationView: MyPhoto.png

    此外,我希望标题下面的图标可见的所有时间,而不仅仅是当点击。我该怎么做??

    这是我的activity_菜单的源代码。xml,顺便说一句,它不是activity\u main。xml,因为我的登录页面使用了主活动。此活动在登录页面之后:`

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 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/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="datasite.com.konnex.Menu"
        android:background="#ffffff">
    
        <android.support.v7.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#3fc0ea">
    
            <ImageButton
                android:layout_width="120dp"
                android:layout_height="38dp"
                android:background="@drawable/lg1"
                android:layout_marginLeft="130dp"
                android:layout_marginStart="130dp"/>
    
            <android.support.v7.widget.SearchView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="90dp"
                android:layout_marginStart="90dp"/>
        </android.support.v7.widget.Toolbar>
    
        <RelativeLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
          <GridLayout
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:columnCount="2">
              <FrameLayout
                  android:layout_width="191dp"
                  android:layout_height="150dp"
                  android:id="@+id/fm_cases"
                  android:clickable="true"
                  android:focusable="true"
                  android:foreground="?attr/selectableItemBackground">
                  <ImageView
                      android:layout_width="90dp"
                      android:layout_height="90dp"
                      android:src="@drawable/cases"
                      android:layout_marginLeft="50dp"
                      android:layout_marginStart="50dp"
                      android:layout_marginTop="35dp"
                      android:id="@+id/img_cases" />
                  <TextView
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:text="@string/cases"
                      android:layout_marginLeft="70dp"
                      android:layout_marginStart="70dp"
                      android:layout_marginTop="128dp"
                      android:textSize="18sp"
                      android:textColor="#424242"/>
                  <TextView
                      android:layout_width="22dp"
                      android:layout_height="wrap_content"
                      android:text="@string/string_1"
                      android:textColor="#FFFFFF"
                      android:textSize="17sp"
                      android:layout_marginLeft="122dp"
                      android:layout_marginStart="122dp"
                      android:layout_marginTop="35dp"
                      android:background="#E91E63"
                      android:id="@+id/notif_cases"/>
              </FrameLayout>
    
          </GridLayout>
    
        </RelativeLayout>
    
        <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#fffafa"
            app:menu="@menu/navigation"
            app:itemIconTint="@color/dark"
            app:itemTextColor="@color/dark"
            android:animateLayoutChanges="false"
            android:splitMotionEvents="false"
            android:fitsSystemWindows="true"/>
    
    </LinearLayout>`
    

    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.design.widget.BottomNavigationView;
    import android.support.v4.widget.TextViewCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.GridLayoutManager;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class Menu extends AppCompatActivity {
    
        private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
                = new BottomNavigationView.OnNavigationItemSelectedListener() {
    
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    
                switch (item.getItemId()) {
                    case R.id.nav_about:
                        return true;
                    case R.id.nav_location:
                        return true;
                    case R.id.nav_phone:
                        return true;
                    case R.id.nav_home:
                        return true;
                }
                return false;
            }
        };
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_menu);
    
                FrameLayout fml = (FrameLayout) findViewById(R.id.fm_cases);
                fml.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent i = new Intent(Menu.this, Cases.class);
                        startActivity(i);
    
                    }
                });
        }
    }
    

    提前谢谢!!!我真的需要你们的帮助)

    我的导航。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">
    
    
        <item
            android:id="@+id/nav_about"
            android:icon="@drawable/ic_dashboard_black_24dp"
            android:title="@string/title_about" />
        <item
            android:id="@+id/nav_location"
            android:icon="@drawable/nav_location"
            android:title="@string/title_location"
            />
    
        <item
            android:id="@+id/nav_phone"
            android:icon="@drawable/nav_call"
            android:title="@string/title_phone"
             />
    
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="@string/title_home"
            />
    
    </menu>
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Aalap Patel    7 年前

    尝试使用 AHBottomNavigation

    compile 'com.aurelhubert:ahbottomnavigation:2.0.6'
    

    它会解决你的布局问题,此外,它有很多定制选项。你可以进一步阅读 here ,但对于您的情况,保留标题的简单用法是。。

    public class MyActivity extends AppCompatActivity{
         @BindView(R.id.bottom_navigationbar)
         AHBottomNavigation bottomNavigation;
    
       onCreate(){
    
        bottomNavigation.addItem(new AHBottomNavigationItem("Title1", iconID1);
        bottomNavigation.addItem(new AHBottomNavigationItem("Title2", iconID2);
        bottomNavigation.addItem(new AHBottomNavigationItem("Title3", iconID3);
        bottomNavigation.addItem(new AHBottomNavigationItem("Title4", iconID4);
    
        bottomNavigation.setAccentColor(ContextCompat.getColor(this, themeColor));
    
        //will always show titles
        bottomNavigation.setTitleState(AHBottomNavigation.TitleState.ALWAYS_SHOW); 
    }}
    

    设置ClickListener。

        bottomNavigation.setOnTabSelectedListener((position, wasSelected) -> {
    
    
                    if (position == 0 && !wasSelected) {
    
                    } else if (position == 1 && !wasSelected) {
    
                    } else if (position == 2 && !wasSelected) {
    
                    } else if (position == 3 && !wasSelected) {
    
                    } else if (position == 4 && !wasSelected) {
    
                    }
                    return true;
                }
        );
    
        2
  •  1
  •   Mohit Suthar    7 年前

    应用程序:showAsAction 在菜单项中

     <?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">
    
        <item
            android:id="@+id/nav_about"
            android:icon="@drawable/ic_dashboard_black_24dp"
            app:showAsAction="ifRoom"
            android:title="@string/title_about" />
        <item
            android:id="@+id/nav_location"
            android:icon="@drawable/nav_location"
            app:showAsAction="ifRoom"
            android:title="@string/title_location"
            />
    
        <item
            android:id="@+id/nav_phone"
            android:icon="@drawable/nav_call"
            app:showAsAction="ifRoom"
            android:title="@string/title_phone"
             />
    
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_home_black_24dp"
            app:showAsAction="ifRoom"
            android:title="@string/title_home"
            />
    
    </menu>
    

    如果您的问题没有解决,请更换这个

    之后,您可以使用此方法 禁用移位菜单

     public static void disableShiftMode(BottomNavigationView view) {
        BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
        try {
            Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
            shiftingMode.setAccessible(true);
            shiftingMode.setBoolean(menuView, false);
            shiftingMode.setAccessible(false);
            for (int i = 0; i < menuView.getChildCount(); i++) {
                BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
                //noinspection RestrictedApi
                item.setShiftingMode(false);
                // set once again checked value, so view will be updated
                //noinspection RestrictedApi
                item.setChecked(item.getItemData().isChecked());
            }
        } catch (NoSuchFieldException e) {
            Log.e("BNVHelper", "Unable to get shift mode field", e);
        } catch (IllegalAccessException e) {
            Log.e("BNVHelper", "Unable to change value of shift mode", e);
        }
    }
    

    更新菜单。java:`包数据站点。通用域名格式。konnex;

        import android.content.Context;
        import android.content.Intent;
        import android.os.Bundle;
        import android.support.annotation.NonNull;
        import android.support.design.internal.BottomNavigationItemView;
        import android.support.design.internal.BottomNavigationMenuView;
        import android.support.design.widget.BottomNavigationView;
        import android.support.v4.widget.TextViewCompat;
        import android.support.v7.app.AppCompatActivity;
        import android.support.v7.widget.GridLayoutManager;
        import android.support.v7.widget.LinearLayoutManager;
        import android.support.v7.widget.RecyclerView;
        import android.util.Log;
        import android.view.MenuItem;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.Button;
        import android.widget.FrameLayout;
        import android.widget.ImageView;
        import android.widget.TextView;
    
        import java.lang.reflect.Field;
    
        public class Menu extends AppCompatActivity {
    
            private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
                    = new BottomNavigationView.OnNavigationItemSelectedListener() {
    
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    
                    switch (item.getItemId()) {
                        case R.id.nav_about:
                            return true;
                        case R.id.nav_location:
                            return true;
                        case R.id.nav_phone:
                            return true;
                        case R.id.nav_home:
                            return true;
                    }
                    return false;
                }
            };
    
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_menu);
    
    //Add This           
    disableShiftMode((BottomNavigationView)findViewById(R.id.navigation))
    
                    FrameLayout fml = (FrameLayout) findViewById(R.id.fm_cases);
                    fml.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Intent i = new Intent(Menu.this, Cases.class);
                            startActivity(i);
                        }
                    });
                }
    
                    public static void disableShiftMode(BottomNavigationView view) {
                        BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
                        try {
                            Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
                            shiftingMode.setAccessible(true);
                            shiftingMode.setBoolean(menuView, false);
                            shiftingMode.setAccessible(false);
                            for (int i = 0; i < menuView.getChildCount(); i++) {
                                BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
                                //noinspection RestrictedApi
                                item.setShiftingMode(false);
                                // set once again checked value, so view will be updated
                                //noinspection RestrictedApi
                                item.setChecked(item.getItemData().isChecked());
                            }
                        } catch (NoSuchFieldException e) {
                            Log.e("BNVHelper", "Unable to get shift mode field", e);
                        } catch (IllegalAccessException e) {
                            Log.e("BNVHelper", "Unable to change value of shift mode", e);
                        }
                    }
            }
    

    `<?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">
    
    
        <item
            android:id="@+id/nav_about"
            android:icon="@drawable/ic_dashboard_black_24dp"
            android:title="@string/title_about"
            app:showAsAction="always|withText"/>
        <item
            android:id="@+id/nav_location"
            android:icon="@drawable/nav_location"
            android:title="@string/title_location"
            app:showAsAction="always|withText" />
    
        <item
            android:id="@+id/nav_phone"
            android:icon="@drawable/nav_call"
            android:title="@string/title_phone"
            app:showAsAction="always|withText"/>
    
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="@string/title_home"
            app:showAsAction="always|withText" />
    
    </menu>
    `