标签: android-bottomnav

5
推荐指数
1
解决办法
1万
查看次数

底部导航栏在片段内不起作用

我正在尝试在片段中显示一个包含 3 个项目的底部导航栏,并且它正确显示,我的代码中没有错误。但问题是,当我单击其中一个选项时,应该运行的代码不起作用,它甚至不会在控制台上记录任何内容。

TransporteFragment.Java:

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;


/**
 * A simple {@link Fragment} subclass.
 */
public class TransporteFragment extends Fragment {


    public TransporteFragment() {
        // Required empty public constructor
    }

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_busC1:

                    return true;
                case R.id.action_busC2:
                    BusC2Fragment busC2Fragment = new BusC2Fragment();
                    FragmentManager fragmentManager = getChildFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.espacioLineas, busC2Fragment).commit();
                    return …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments android-bottomnav

5
推荐指数
1
解决办法
4581
查看次数

如何更改特定底部栏导航项的大小和形状

我正在尝试实现此底部栏,该底部栏包含一个尺寸更大且形状不同于其他条目的项目。

底栏

是否有使用本机Bottom导航组件实现此目标的简便方法?我猜不是因为它似乎不符合Material Design规范。

否则,什么是最好的方法?我看到只有两种方法可以实现这一目标,但对我而言,没有一种方法可以信赖。

  • 对于每个“小物件”,在图形对象的顶部添加一个透明条,以达到相机图标的大小。
  • 实现一个5个项目的底部栏,中间带有一个“幽灵项目”,在上面可以放置其他组件。这将需要将此组件与底部栏杆耦合。

编辑

这是我通过增加Harshit和fmaccaroni建议的图标大小而获得的。

未选择项目时:

item_selected

选择项目时:

item_selected

优点:该图标大于其他图标

缺点:它仍然包含在底部栏中。此外,选择后它不会垂直居中


android android-bottomnav

5
推荐指数
2
解决办法
8717
查看次数

底部导航 在导航项上选择侦听器不起作用

我想为我的应用程序构建底部导航,并在完成底部导航后。布局。

<?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.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.BottomNavigationView
            android:id="@+id/Bottomnav"
            android:layout_width="match_parent"
            android:layout_height="42dp"
            android:layout_gravity="bottom"
            android:background="#FFFFFF"
            app:menu="@menu/bottomnav_menus">

        </android.support.design.widget.BottomNavigationView>
    </android.support.design.widget.CoordinatorLayout>

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

接下来,我进入了我的主要活动来实现 onnavigationitemselectlistner,但是在没有任何错误的情况下执行此方法后,我的底部导航。不工作。

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId())
        {
            case R.id.live:
                Intent intent = new Intent(MainActivity.this, LiveScore.class);
                startActivity(intent);
                return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

我的菜单项:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:title=""
        android:id="@+id/home"
        android:icon="@drawable/baseline_home_black_24dp"
        android:orderInCategory="1"/>

    <item
        android:title=""
        android:id="@+id/live"
        android:icon="@drawable/baseline_live_tv_black_24dp"
        android:orderInCategory="2"/>
    <item
        android:title=""
        android:id="@+id/video"
        android:icon="@drawable/baseline_video_library_black_24dp"
        android:orderInCategory="3"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

如果您需要任何其他信息,请发表评论。

java android android-layout bottomnavigationview android-bottomnav

5
推荐指数
2
解决办法
4438
查看次数

带有导航组件的 Fragment 中的底部导航

在我的应用程序中,我有一个BottomNavigation来自 Material design的主屏幕。从这些屏幕中,我希望能够启动BottomNavigation隐藏的其他片段,以便新片段填满整个屏幕。然后应该可以通过后退箭头返回。我想你们都可以想象这一点,因为这是今天非常普遍的模式。

为了实现这一点,我想使用带有单个活动设计的导航组件。我的想法是,我的 MainActivity 只包含一个,NavHostFragment而 BottomNavFragment 包含另一个NavHostFragment以及BottomNavigation。由于隐藏的可能性,我无法移动 BottomNavigation到 MainActivity 布局。

这对我来说似乎有点奇怪。我真的需要两个导航图和两个NavHostFragments吗?的NavHostFragment在BottomNavFragment仅具有目的,以显示与相关联的相关片段BottomNavigation。要导航到其他片段,我必须使用NavHostFragment来自活动的 。如果我使用相同的导航图,它会与开始导航相冲突,从而导致无休止的递归。

或者我应该DialogFragments对我想开始的其他片段使用全屏吗?如果是这样,我如何告诉导航组件以全屏对话框的形式启动对话框?谷歌有推荐的方法来做到这一点吗?

android android-fragments android-bottomnav android-architecture-navigation

5
推荐指数
1
解决办法
1174
查看次数

Jetpack Compose 加载活动太慢

我的 Jetpack Compose 活动加载速度太慢(大约 5 秒)。我有 3 个屏幕,带有 1 个惰性垂直网格和我的自定义底部导航。有人知道如何并行组成此屏幕或使加载活动更快吗?

我的代码:

@ExperimentalAnimationApi
@ExperimentalFoundationApi
@Composable
fun ComposeNavigation() {
    val navController = rememberNavController()
    ConstraintLayout(modifier = Modifier.fillMaxSize()) {
        val (content, bottomSheet) = createRefs()
        //Bottom is my custom bottom navigation
        Bottom(navController, modifier = Modifier
            .constrainAs(bottomSheet) {
                start.linkTo(parent.start)
                end.linkTo(parent.end)
                bottom.linkTo(parent.bottom)
            }
            .fillMaxWidth())
        Box(modifier = Modifier
            .fillMaxWidth()
            .constrainAs(content) {
                start.linkTo(parent.start)
                end.linkTo(parent.end)
            }) {
            NavHost(
                navController = navController,
                startDestination = "first_screen",
            ) {
                composable("first_screen") {
                    FirstScreen(navController = navController)
                }
                composable("second_screen") {
                    SecondScreen(navController = navController)
                }
                composable("third_screen") { …
Run Code Online (Sandbox Code Playgroud)

android android-bottomnav android-jetpack-compose

5
推荐指数
1
解决办法
3907
查看次数

底部导航视图片段在创建后重新创建

在我的应用程序中,我使用Jetpack NavigationBottomNavigationView. 我有 4 个片段:主页、搜索、通知、个人资料,当我在主页片段中时,我再次单击底部导航视图中的主页项目,它会重新创建片段。我进行了搜索,但主要的答案是针对那些不使用喷气背包导航的人。

(顺便说一句,我只希望当我已经在该片段中时不重新创建片段,如果我不在该片段中,则可以重新创建)

以下是我的设置:

val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView_mainActivity) as NavHostFragment
navController = navHostFragment.navController 
binding.bottomNavView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)

这是显示底部导航视图行为方式的 gif 图像

android android-fragments fragmentmanager android-bottomnav android-jetpack-navigation

5
推荐指数
1
解决办法
2004
查看次数

颤动圆角底部导航栏

我在 ClipRRect 中有一个底部导航栏(用于提供圆角)。它有圆角,但没有透明角。我正在分享图像来显示问题。如何制作透明圆角?

代码:

bottomNavigationBar: ClipRRect(
        borderRadius: BorderRadius.only(
          topLeft: Radius.circular(30.0),
          topRight: Radius.circular(30.0),
        ),
        child: BottomNavigationBar(
          currentIndex: _selectedIndex,
          selectedItemColor: Colors.amber[800],
          onTap: _onItemTapped,
          items: <BottomNavigationBarItem>[
            BottomNavigationBarItem(
              icon: Icon(Icons.home),
              label: 'Home',
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.search),
              label: 'Search',
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.person),
              label: 'Profile',
            ),
          ],
        ),
      ),
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

flutter android-bottomnav flutter-layout

5
推荐指数
1
解决办法
3724
查看次数

当遵循单一活动设计时,如何隐藏底部栏导航?

我试图仅在几个片段中显示底部栏导航(即在大部分片段中隐藏它)。

我阅读了有关此内容的官方文档,但我不清楚,比如我应该将代码放在哪里,并且我在 StackOverFlow 上阅读了对此的评论,例如“我很惊讶文档中建议这样做,因为它实际上看起来非常糟糕因为侦听器在新片段放置在屏幕上之前触发,导致可见的闪烁(有时存在,有时不存在) ”。

我对此进行了研究,根据我的理解,我需要创建一个嵌套的 naviagtion_graph (导航)或其他东西,听 onDestinationChanged 并将底部导航或工具栏设置为 Gone..

我不太明白这一点..我只是想隐藏大多数片段中的底部栏导航..

这是我的 navigation_gragh ( mobile_navigation) :

<navigation 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/mobile_navigation"
    app:startDestination="@+id/navigation_home">

    <fragment
        android:id="@+id/navigation_home"
        android:name="com.example.testingbottomnav.ui.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_home" >
        <action
            android:id="@+id/action_navigation_home_to_newScreenFragment"
            app:destination="@id/newScreenFragment" />
    </fragment>

    <fragment
        android:id="@+id/navigation_dashboard"
        android:name="com.example.testingbottomnav.ui.dashboard.DashboardFragment"
        android:label="@string/title_dashboard"
        tools:layout="@layout/fragment_dashboard" />

    <fragment
        android:id="@+id/navigation_notifications"
        android:name="com.example.testingbottomnav.ui.notifications.NotificationsFragment"
        android:label="@string/title_notifications"
        tools:layout="@layout/fragment_notifications" />
    <fragment
        android:id="@+id/newScreenFragment"
        android:name="com.example.testingbottomnav.ui.newscreen.NewScreenFragment"
        android:label="fragment_new_screen"
        tools:layout="@layout/fragment_new_screen" />
</navigation>
Run Code Online (Sandbox Code Playgroud)

这是我的activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:labelVisibilityMode="selected" …
Run Code Online (Sandbox Code Playgroud)

android android-fragments kotlin bottomnavigationview android-bottomnav

5
推荐指数
2
解决办法
4833
查看次数

使用 setupWithNavController:2.5.0-alpha01 导致每次调用 OnViewCreated

我使用导航组件和底部导航栏,并为了处理选项卡栏导航,请调用以下代码

绑定.bottomNavigationView.setupWithNavController(navController)

在上一个版本之前,我在使用 setupWithNavController() 时保存每个片段的状态时遇到了一个大问题,但是由于最新版本的导航 API(>=:2.4.0),它支持多个返回堆栈,我可以轻松在选项卡之间导航,无需担心再次加载所有数据。

但我发现每次导航每个选项卡时,都会调用 OnViewCreated 函数!这给我带来了一些问题。

例如,OnViewCreated是一个使用repeatOnLifeCycle来收集流量的地方,而OnViewCreated的这种重复调用导致了很多流量的订阅者!

甚至在文件中说:

最佳实践是在生命周期初始化时调用此函数。例如,Activity 中的 onCreate 或 Fragment 中的 onViewCreated。否则,可能会创建多个重复执行相同操作的协程并同时执行。

它假定 OnViewCreated 是一个被调用一次的地方!

明显的问题是,首先,这种行为是一个问题还是预期的?如果是预期的话,我们可以在哪里收集流量?请详细说明为什么会发生这种情况?

android android-navigation android-bottomnav android-navigation-graph

5
推荐指数
1
解决办法
624
查看次数