标签: bottomnavigationview

如何正确组合NavigationView和BottomNavigationView

我需要使用这两个元素,这就是我目前所拥有的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.DrawerLayout xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:openDrawer="start">

        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            app:headerLayout="@layout/nav_header_main"
            app:menu="@menu/activity_main_drawer" />

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

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorAccent"
        app:menu="@menu/menu_bottom" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我的问题是BottomNavigationView位于 前面NavigationView,但情况不应该如此(我说的是 y 索引)。我也尝试使用 aCoordinatorLayout代替,但随后卡BottomNavigationView在显示器的顶部。

android drawerlayout bottomnavigationview

4
推荐指数
1
解决办法
6727
查看次数

如何获取 TapTargetView 的 BottomNavigation 项视图参考

我有一个底部导航视图,我正在使用 TapTargetView 库来指导用户如何使用某些功能。如果我通过底部导航视图,则 TapTargetView 将突出显示我不想要的整个底部栏。

我的问题是如何在底部导航视图中突出显示特定项目?

TapTargetView.showFor(this, TapTarget.forView(findViewById(R.id.home), "Home page", "We have cool features for you"),
new TapTargetView.Listener() {
    @Override
    public void onTargetClick(TapTargetView view) {
        super.onTargetClick(view);
        itemClicked();
    }
});
Run Code Online (Sandbox Code Playgroud)

谢谢。

android bottomnavigationview

4
推荐指数
1
解决办法
1921
查看次数

底部导航视图在默认片段Android Studio中不可见

我的底部导航栏在我的默认启动片段SearchFragment中不可见.如果我将开始片段更改为另一个例如MoreFragment,它会出现在其他所有内容上,除了SearchFragment,这是我理想的开始片段.

这是我的代码:

Main.java

import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.MenuItem;



public class Main extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
           getSupportFragmentManager().beginTransaction().replace(R.id.activity_main, new SearchFragment()).commit();
    }

    BottomNavigationView bottomNavigation = (BottomNavigationView) findViewById(R.id.bottom_navigation);

    bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {

        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch(item.getItemId()){
                case R.id.seach_tab:
                   SearchFragment sf=new SearchFragment();
                    FragmentManager fragmentmanager1=getSupportFragmentManager();
                    fragmentmanager1.beginTransaction()
                            .replace(R.id.activity_main, sf)
                            .commit();
                    break;


                case R.id.bookings_tab:
                    BookingsFragment bf=new BookingsFragment();
                    FragmentManager fragmentmanager2=getSupportFragmentManager();
                    fragmentmanager2.beginTransaction()
                            .replace(R.id.activity_main, bf)
                            .commit();
                    break;

                case R.id.account_tab:
                    ProfileFragment …
Run Code Online (Sandbox Code Playgroud)

android bottomnavigationview

4
推荐指数
1
解决办法
4638
查看次数

BottomNavigationView 中的菜单项未居中

我有一个底部导航视图,没有图标,只有文本字段。

我想垂直和水平居中文本并为不同的状态添加一个突出显示:

topnavigationview.setItemBackgroundResource(R.drawable.mainactivitybackgroundhighlight_top);
Run Code Online (Sandbox Code Playgroud)

使用 xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/blau" android:state_pressed="true" />
    <item android:drawable="@color/blau" android:state_checked="true" />
    <item android:drawable="@color/dunkelgraublau" />
</selector>
Run Code Online (Sandbox Code Playgroud)

该视图包含如下:

<android.support.design.widget.BottomNavigationView
            android:id="@+id/top_navigation_view"
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:layout_below="@id/include4"
            android:background="@color/dunkelgraublau"
            app:itemTextColor="@color/weiß"
            app:menu="@menu/top_navigation_menu" />
Run Code Online (Sandbox Code Playgroud)

然而,它现在看起来像这样:

在此处输入图片说明

如您所见,突出显示并没有覆盖菜单的一半,更像是它的 40%;选择右手项目时相同 - 尽管宽度设置为match_parent。

文本也不是垂直居中,也不是水平居中;

1) 如何在布局中垂直居中菜单文本?

2) 如何让两个菜单项都占据导航视图的 50%?这将使文本水平居中并使突出显示按预期占据 50%。

java xml bottomnavigationview

4
推荐指数
1
解决办法
3431
查看次数

删除底部导航视图中的操作栏

正如标题所说,我无法删除底部导航栏中的操作栏。我尝试了不同的 NoAction 栏主题,但由于某种原因它不起作用。

有人能告诉我我做错了什么吗?

这是示例 截图

xml android android-actionbar bottomnavigationview

4
推荐指数
2
解决办法
5518
查看次数

中心底部导航栏图标

我试图将所有图标居中,我已经使用以下代码禁用了移位模式:

/**
 * This is done to remove the shift animation introduced by Android on the bottom navigation view
 * /sf/answers/2918332301/
 */
@SuppressLint("RestrictedApi")
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);
            item.setPadding(0,15,0,0);
            // set once again checked value, so view will be updated
            //noinspection RestrictedApi
            item.setChecked(item.getItemData().isChecked());
        } …
Run Code Online (Sandbox Code Playgroud)

android android-support-design bottomnavigationview

4
推荐指数
1
解决办法
2399
查看次数

Android BottomNavigation 未使用导航控制器正确突出显示

我正在尝试从 Android 架构组件实现Nagivation。我能够在我的片段中成功导航。我试图将它附加到我的底部导航,但我无法正确使用它。我可以成功地在片段之间导航,Navigation.findNavController(View).navigate(R.id.Fragment)但是当我使用任何 UI 组件或后退按钮执行此操作时,底部导航中的突出显示不会更改,如下面的 gif 所示

在此处输入图片说明

我的代码如下MainActivity.kt

class MainActivity : AppCompatActivity() {


    private lateinit var navController: NavController


    private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.navigation_home -> {
                navController.navigate(R.id.homeFragment)
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_dashboard -> {
                navController.navigate(R.id.addEmotionFragment)
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_notifications -> {
                return@OnNavigationItemSelectedListener true
            }
        }
        false
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        navController = Navigation.findNavController(this, R.id.nav_host)
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    }


}
Run Code Online (Sandbox Code Playgroud)

为了 HomeFragment.kt

class HomeFragment : Fragment() {

    override …
Run Code Online (Sandbox Code Playgroud)

android bottomnavigationview android-architecture-components android-jetpack android-architecture-navigation

4
推荐指数
1
解决办法
1507
查看次数

BottomNavigationView滞后于片段事务

问题

BottomNavigationView在自己的一个活动中使用了Android设计支持库中的,同时在每个导航项中都使用了Fragments。

每次我在栏上选择一个项目时,都会执行一个片段事务,如下面的代码片段(为简洁起见,删除了部分代码):

private var fragmentToSet: Fragment? = null

private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->

    fragmentToSet = when (item.itemId) {
        // Choose fragment based on selection
        // ...
    }

// ...

supportFragmentManager.beginTransaction()
                .replace(R.id.container, fragmentToSet)
                .commit()
}
Run Code Online (Sandbox Code Playgroud)

问题是...底部小节动画变得超级滞后,并且仅在片段完全加载并显示在屏幕上之后才能完成。

这个问题并不完全是新问题,因为在使用“导航菜单”时也可能发生,但是至少可以通过使用来解决它,DrawerLayout.DrawerListener并且只有在抽屉关闭后才进行实际的Fragment事务。

到目前为止我尝试过的

我试图“缓存”片段,保留它们的引用以避免每次都重新创建对象(例如MyFragment.newInstance()),但这是行不通的。

我也尝试使用处理程序,这可以解决问题,但是在某些情况下可能会导致异常。类似于以下代码段:

handler.postDelayed({changeFragment(fragmentToSet!!)}, 200)
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以解决此问题,而无需使用处理程序(或其他异步调用),方法与使用导航菜单时的解决方案类似?

android android-fragments kotlin material-design bottomnavigationview

4
推荐指数
1
解决办法
1387
查看次数

仅在单击 BottomNavigationView 时显示的项目

所以我想在屏幕底部有一个导航栏,有 4 个项目,但由于某种原因,只有第一个显示,其他只有当我点击它们时才会出现。

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@color/white"
    app:itemTextColor="@color/black"
    app:menu="@menu/navigation_bar_bottom_menu" />
Run Code Online (Sandbox Code Playgroud)

我的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/nav_home"
    android:title="@string/navigation_bar_home_text" />

<item
    android:id="@+id/nav_inbox"
    android:title="@string/navigation_bar_inbox_text" />

<item
    android:id="@+id/nav_notes"
    android:title="@string/navigation_bar_notes_text" />

<item
    android:id="@+id/nav_profile"
    android:title="@string/navigation_bar_profile_text" />

</menu>
Run Code Online (Sandbox Code Playgroud)

该栏显示如下,仅显示第一项:

在此处输入图片说明

android bottomnavigationview

4
推荐指数
1
解决办法
1724
查看次数

如何在Android Navigation 组件中管理BottomNavigationView backstack

我正在使用navigation componentBottomNavigationView,我面临一个问题,那就是当我从fragment1>2>5>4>3转到时,当我按下后退按钮时,我得到fragment1。我知道这是默认行为,但我不想要这个,我想保存它们,backstack所以当我按下后退按钮时,它应该转到fragment4 而不是 1。我一直在尝试和搜索,但找不到任何解决方案。我可以把fragment手动进backstackkotlin

我的代码:

活动_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
           .......................
           .......................>

            <androidx.appcompat.widget.Toolbar
               ................
               ................/>

            <fragment
                android:id="@+id/app_nav_host_fragment"
                android:name="androidx.navigation.fragment.NavHostFragment"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:defaultNavHost="true"
                app:navGraph="@navigation/app_nav"
                ..............
                ............../>
            <com.google.android.material.bottomnavigation.BottomNavigationView
                android:id="@+id/app_bottom_nav_view"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:background="@drawable/white_grey_border_bottom"
                app:menu="@menu/bottom_nav_menu"
                app:labelVisibilityMode="unlabeled"
                ...........
                .........../>

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

app_nav.xml

<navigation 
    ...........
    ...........
    android:id="@+id/app_nav"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.instagram_clone.ui.HomeFragment"
        android:label="HomeFragment"
        tools:layout="@layout/fragment_home"/>
    .............
    .............
    .............
    .............
</navigation>
Run Code Online (Sandbox Code Playgroud)

主活动.kt

class MainActivity : AppCompatActivity()
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)

        val binding  = …
Run Code Online (Sandbox Code Playgroud)

android android-fragments bottomnavigationview android-architecture-components android-jetpack

4
推荐指数
1
解决办法
4723
查看次数