我有 3 个项目的底部导航视图,我navGraph看起来像这样:
<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"
app:startDestination="@id/nested_navigation"
<navigation
android:id="@+id/nested_navigation"
app:startDestination="@id/mainFragment" >
<fragment
android:id="@+id/mainFragment"
android:name="com.example.app.ui.main.MainFragment"
android:label="main_fragment"
tools:layout="@layout/main_fragment" />
<fragment
android:id="@+id/list"
android:name="com.example.app.ui.main.List"
android:label="fragment_news_list"
tools:layout="@layout/fragment_list" />
</navigation>
<fragment
android:id="@+id/settings"
android:name="com.example.app.ui.main.Settings"
android:label="Settings" />
</navigation>
Run Code Online (Sandbox Code Playgroud)
带有嵌套 navGraph 片段的底部导航视图中的导航工作正常,但是如果我导航到settings_fragment嵌套 navGraph 之外的 ,并且我单击其他项目/片段我无法导航到其他片段,我基本上卡住在这个屏幕上。
我检查了发生了什么是如果我把settings_fragment嵌套的 navGraph放在里面,它的效果很好。
我该如何解决这个问题?
顺便说一句 - 我很确定它不相关,但设置片段是PreferenceScreen位于 XML 资源中的布局,而不是布局资源
我的菜单项:
<item
android:id="@+id/mainFragment"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/home"
app:showAsAction="ifRoom"
/>
<item
android:id="@+id/list"
android:icon="@drawable/ic_format_list_bulleted_black_24dp"
android:title="@string/news_list"
app:showAsAction="ifRoom"
/>
<item
android:id="@+id/settings"
android:icon="@drawable/ic_settings_black_24dp"
android:title="@string/settings"
app:showAsAction="ifRoom"
/>
Run Code Online (Sandbox Code Playgroud) android kotlin android-navigation bottomnavigationview android-jetpack-navigation
我一直在尝试新的BottomNavigationView并尝试自定义它.
到目前为止,我已设法通过使用以下内容更改高度和边距:
<dimen name="design_bottom_navigation_height" tools:override="true">75dp</dimen>
<dimen name="design_bottom_navigation_margin" tools:override="true">5dp</dimen>
Run Code Online (Sandbox Code Playgroud)
我想增加图标的大小.
如何才能做到这一点?
编译版本:com.android.support:design:25.0.1
我试图同时使用AppBarLayout,并BottomNavigationLayout在一个单一的CoordinatorLayout,我有隐藏的困难BottomNavigationLayout所要求的材料方针.
我的意思是这样的:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_insetEdge="top"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_gravity="bottom"
app:menu="@menu/menu_bottom_navigation"/>
<FrameLayout
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
如您所见,我还有一个FrameLayout用于包含实际内容的片段.目前,没有默认/内置行为BottomNavigationView- 既不是视图本身,也不是其兄弟姐妹.现有appbar_scrolling_view_behavior处理与appbar协调处理内容视图但忽略其他兄弟.
我正在寻找一种隐藏的方法,并在滚动时显示appbar和底部导航视图.
android android-layout android-coordinatorlayout bottomnavigationview
底部导航视图已添加到设计支持库的第25版中.尝试过,现在使用起来要容易得多.
但我正面临按照我的应用程序要求实现它的问题.我想动态地扩展菜单资源并以编程方式更改底部导航视图的菜单项/标题.
inflateMenu(int menuResource) - 使用菜单资源标识符为底部导航视图扩充菜单.
根据文件:
inflateMenu:void inflateMenu(int resId)将菜单资源膨胀到此导航视图中. 菜单中的现有项目不会被修改或删除. 参数resId int:要膨胀的菜单资源的ID
尝试以编程方式使用此inflateMenu(int resID)方法导航视图抛出异常" 未找到资源 "
bottomNavigationView.inflateMenu(R.menu.bottom_navigation_menu);
Run Code Online (Sandbox Code Playgroud)
是否有可能在没有任何第三方库的情况下实现它?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<FrameLayout
android:id="@+id/main_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottom_navigation" />
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/theme_action_bar_bg"
app:itemIconTint="@color/white"
app:itemTextColor="@color/white" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
菜单资源:
<?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_bar_item_dashboard"
android:enabled="true"
android:icon="@drawable/ic_nav_bar_dashboard_24px"
android:title="@string/nav_bar_item_dashboard"
app:showAsAction="ifRoom" />
<item
android:id="@+id/nav_bar_item_people"
android:enabled="true"
android:icon="@drawable/ic_nav_bar_people_24px"
android:title="@string/nav_bar_item_people"
app:showAsAction="ifRoom" />
<item
android:id="@+id/nav_bar_item_classroom"
android:enabled="true"
android:icon="@drawable/ic_nav_bar_classroom_24px"
android:title="@string/nav_bar_item_classrooms"
app:showAsAction="ifRoom" />
<item
android:id="@+id/nav_bar_item_manage"
android:enabled="true"
android:icon="@drawable/ic_nav_bar_manage_24px"
android:title="@string/nav_bar_item_manage"
app:showAsAction="ifRoom" /> …Run Code Online (Sandbox Code Playgroud) 我想滑动底部给出的标签.对于我所使用BottomNavigationView通过使用ViewPager 此.我的代码如下.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/navigation"
android:layout_alignParentTop="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_navigation_items"
android:background="@color/colorPrimary"
app:itemIconTint="@color/colorAccent"
app:itemTextColor="@android:color/white"></android.support.design.widget.BottomNavigationView>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
Java代码是
public class MainActivity extends AppCompatActivity {
BottomNavigationView bottomNavigationView;
ViewPager viewPager;
MenuItem prevMenuItem;
FragmentWallet fragmentWallet;
FragmentNavigationDrawer fragmentNavigationDrawer;
FragmentHome fragmentHome;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);
viewPager = (ViewPager) findViewById(R.id.viewpager);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager bottomnavigationview
在Android的程式码实验室用于导航做得很好,说明如何用一起使用的架构组件导航BottomNavigationView.但是,假设我在2个标签BottomNavigationView,TAB1和TAB2.让我们说在Tab1中你可以浏览片段Frag1 - > Frag2.现在,每当我去TAB2,然后回到TAB1,片段回栈Frag1,2走了,并与起点更换Frag1一次.
我在应用程序中需要做什么,以便即使我更改标签,BottomNavigationView与导航一起保持其后堆栈完好无损?并且,还保持后退/上行按钮行为与指南同步.
以前我通过使用ViewPager和管理后台堆栈来完成这项任务,但这并不像使用新导航的正确方法.
提前致谢!
编辑:
还有一个更详尽的答案在这里.
android android-navigation bottomnavigationview android-architecture-components android-jetpack
是否可以使用底部导航视图和Navigation组件在片段中传递和访问参数?
我正在使用一个具有多个片段方法的活动,其中我的顶级片段需要一个参数(通常通过newInstance生成的方法完成)。我看过了Navigation组件开发人员指南和代码实验室,但只提到了使用safeargs以及在目标和操作中添加参数标签。
这是我的导航图:
<navigation xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/homeFragment">
<fragment android:id="@+id/homeFragment"
android:name="uk.co.homeready.homeready.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home">
<!--Do I create an argument block here?-->
</fragment>
<fragment android:id="@+id/calculatorFragment"
android:name="uk.co.homeready.homeready.CalculatorFragment"
android:label="fragment_calculator"
tools:layout="@layout/fragment_calculator"/>
<fragment android:id="@+id/resourcesFragment"
android:name="uk.co.homeready.homeready.ResourcesFragment"
android:label="fragment_resources"
tools:layout="@layout/fragment_resources"/>
</navigation>
Run Code Online (Sandbox Code Playgroud)
底部导航视图菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/homeFragment"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/title_home"/>
<item
android:id="@+id/calculatorFragment"
android:icon="@drawable/ic_baseline_attach_money_24px"
android:title="@string/title_calculator"/>
<item
android:id="@+id/resourcesFragment"
android:icon="@drawable/ic_baseline_library_books_24px"
android:title="@string/title_resources"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
主要活动:
override fun onCreate(savedInstanceState: Bundle?) {
...
val navController = Navigation.findNavController(this,
R.id.nav_host_fragment)
bottom_navigation.setupWithNavController(navController)
....
}
Run Code Online (Sandbox Code Playgroud)
activity_main.xml
<android.support.constraint.ConstraintLayout>
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"/>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
app:menu="@menu/bottom_navigation"/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
家庭碎片
override fun onCreateView(inflater: LayoutInflater, …Run Code Online (Sandbox Code Playgroud) android android-fragments bottomnavigationview android-jetpack android-architecture-navigation
我正在努力实现上述设计。我可以更改图标,但无法更改底部文本。我使用材质底部导航栏
我通过为每个图标实现单独的选择器可绘制对象来实现图标更改。有什么方法可以对导航标题做同样的事情吗?
MainActivity.class
public class MainActivity extends AppCompatActivity {
BottomNavigationView navView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_saved, R.id.navigation_applied, R.id.navigation_profile, R.id.navigation_more)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
}
Run Code Online (Sandbox Code Playgroud)
活动主文件
<?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: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" …Run Code Online (Sandbox Code Playgroud) android material-design bottomnavigationview android-bottomnav android-bottom-nav-view
我已经成功地将底部导航与最新的 android 架构导航组件集成在一起。以下是我的完整代码。
<?xml version="1.0" encoding="utf-8"?>
<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="in.zedone.bottomsample.ui.home.HomeFragment"
android:label="@string/title_home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/navigation_saloons"
android:name="in.zedone.bottomsample.ui.saloons.SaloonsFragment"
android:label="@string/title_saloon"
tools:layout="@layout/fragment_saloons" />
<fragment
android:id="@+id/navigation_offers"
android:name="in.zedone.bottomsample.ui.offers.OffersFragment"
android:label="@string/title_offer"
tools:layout="@layout/fragment_offers" />
<fragment
android:id="@+id/navigation_account"
android:name="in.zedone.bottomsample.ui.account.AccountFragment"
android:label="@string/title_account"
tools:layout="@layout/fragment_account" />
</navigation>
Run Code Online (Sandbox Code Playgroud)
<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:labelVisibilityMode="labeled"
app:itemTextAppearanceActive="@style/BottomNavigationView.Active"
app:itemTextAppearanceInactive="@style/BottomNavigationView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu" />
Run Code Online (Sandbox Code Playgroud)
BottomNavigationView navView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations. …Run Code Online (Sandbox Code Playgroud) navigation android bottomnavigationview android-architecture-components
我正在使用最后一个导航库(版本 2.4.0),其中包括多个带有底部导航视图的返回堆栈。
默认行为是当用户返回选项卡时保存每个返回堆栈。我想在用户离开选项卡时清除后退堆栈。
基于此带有 3 个选项卡的底部导航:
| 表1 | 表2 | 表3 |
|---|---|---|
| 屏幕A1 | 屏幕B1 | 屏幕C1 |
| 屏幕A2 | 屏幕B2 | 屏幕C2 |
从 Tab1 中,如果用户:
谢谢
android android-navigation bottomnavigationview android-bottom-nav-view android-architecture-navigation
android ×10
android-architecture-components ×2
android-architecture-navigation ×2
kotlin ×1
menuitem ×1
navigation ×1