我正在努力使用 Android 导航组件构建导航,如下图所示。
我需要一个“登录流程”,检查用户是否登录,然后导航到应用程序的主要部分(也清除后台堆栈)。主要部分包含一个带有三个选项卡的 BottomNavigationView。但是如果我点击工具栏上的设置图标,我也想显示一个全屏的 SettingsFragment。
我是否需要两个带有单独导航图的 NavHostFragment?如果是,我怎样才能将它们结合起来并有一个适当的反向导航?
任何想法如何使用android导航组件实现这样的导航?
android android-navigation android-bottom-nav-view android-jetpack-navigation
现在我想知道哪种方法最适合BottomNavigation与新方法结合使用Android Architecture Navigation Component?
现在发现两种方法:
BottomNavigation项目,可从Google Codelabs以下网址显示:https : //codelabs.developers.google.com/codelabs/android-navigation/#1 BottomNavigation项目都有其自己的属性,navigation graph仅维护其行为backstack,我在此处显示了它:https : //proandroiddev.com/mastering-the-bottom-navigation-with-the-new-navigation-architecture-component-cd6a71b266ae我的观点是,第二种观点更加清晰和可以理解,但也许您有另一种观点。
android android-bottomnav android-bottom-nav-view android-architecture-components android-jetpack
我有我的bottomNavigationView:
我添加了这个类,以防止它做shiftMode:
public class BottomNavigationViewHelper {
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 …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建单个活动Android应用程序.我有使用BottomNavigationView的MainActivity(仅活动),三个顶级片段和一些子片段.我的要求是每当屏幕显示顶级片段时,底部导航应该是可见的,以便可以进行切换.但是当我查看任何子片段时,应隐藏底部导航.是否有任何使用导航组件的开箱即用方式或需要手动更改可见性?
android android-fragments kotlin android-bottom-nav-view 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
我正在使用最后一个导航库(版本 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
这里闪烁:http : //gph.is/2GH9P0b
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
style="@style/BottomNavigation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />
Run Code Online (Sandbox Code Playgroud)
样式文件
<style name="BottomNavigation">
<item name="android:background">@color/colorPrimary</item>
<item name="itemIconTint">@drawable/nav_bottom_selector</item>
<item name="itemTextColor">@drawable/nav_bottom_text_selector</item>
</style>
Run Code Online (Sandbox Code Playgroud)
选择器nav_bottom_text_selector和nav_bottom_selector具有相同的代码。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_checked="true"/>
<item android:color="#6e6e6e" />
Run Code Online (Sandbox Code Playgroud)
MainActivity.class 这是选项卡更改侦听器。但我认为问题不在这里,因为即使我评论这部分,它也一直在闪烁。
navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected (@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_exercises:
// even not replace tabs, just hide and show
fragmentManager.beginTransaction().show(exerciseFragment).hide(workoutFragment).hide(profileFragment).commit();
SharedPrefsHelper.getInstance().setLastTab(getApplicationContext(), ConsKeys.BOTTOM_TAB_EXERCISE);
break;
case R.id.navigation_workouts:
fragmentManager.beginTransaction().hide(exerciseFragment).show(workoutFragment).hide(profileFragment).commit();
SharedPrefsHelper.getInstance().setLastTab(getApplicationContext(), ConsKeys.BOTTOM_TAB_WORKOUTS);
break;
case R.id.navigation_profile:
fragmentManager.beginTransaction().hide(exerciseFragment).hide(workoutFragment).show(profileFragment).commit(); …Run Code Online (Sandbox Code Playgroud) 实现 5 项 BottomNavigationView - 始终显示标签 - 我使用以下方法:
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation"
app:labelVisibilityMode="labeled"/>
Run Code Online (Sandbox Code Playgroud)
不幸的是,结果在活动时将单词连字符,如图所示:

我尝试为标签的活动文本设置不同的样式:
app:itemTextAppearanceActive="@style/text_navigation_active_labels"
Run Code Online (Sandbox Code Playgroud)
-- 样式.xml --
<style name="text_navigation_active_labels">
<item name="android:breakStrategy">simple</item>
<item name="android:hyphenationFrequency">none</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但结果是完全一样的(我是否只使用 break 策略、hyphenationFrequency 或两者)。我目前正在 API 27 物理电话上对其进行测试。
任何帮助表示赞赏。
我的场景是按钮点击我需要打开一个底部展开的底部,当我们向上拖动时它应该像collasping工具栏一样.
这里Appbar的行为与Bottomsheet同步,但不知何故,NestedScrollview行为只与Collasping工具栏同步,而不是Bottomsheet行为.
当我在NestedScrollview上滚动它只是扩展和压缩工具栏而不是BottomSheet.
下面是底部布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"
android:layout_width="match_parent"
android:elevation="@dimen/design_appbar_elevation"
android:layout_height="match_parent"
app:layout_behavior="@string/bottom_sheet_behavior"
app:behavior_hideable="true"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:fitsSystemWindows="true"
android:layout_height="192dp"
android:layout_width="match_parent"
>
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:toolbarId="@+id/toolbar"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary">
<ImageView
android:id="@+id/app_bar_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_collapseMode="parallax"
android:src="@drawable/ic_launcher_background"
android:scaleType="centerCrop" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="300dp">
<EditText
android:id="@+id/editText"
android:layout_width="222dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintEnd_toEndOf="@+id/editText"
app:layout_constraintStart_toStartOf="@+id/editText" …Run Code Online (Sandbox Code Playgroud) android android-appbarlayout android-nestedscrollview bottom-sheet android-bottom-nav-view
我想知道使用 Navigation Component + BottomNavigationView + NavigationDrawer 的最佳实践是什么。
我已经尝试过谷歌的导航组件高级示例。它适用于多个后堆栈模块。因为它有一个变通方法扩展名。使用这种方法时,每个底部选项卡都有自己的图形,并且图形会随着您选择其中一个选项卡而发生变化。
但是在集成NavigationView的时候,需要提前知道导航图。但在高级示例中,未使用 navGraph 属性,以编程方式为底部导航添加图形。
那么当Bottom Navigation View和Navigation Drawer View一起使用时,我们如何管理图表呢?
android navigation-drawer android-bottom-nav-view android-jetpack android-architecture-navigation
android ×10
android-architecture-navigation ×3
android-architecture-components ×1
android-menu ×1
bottom-sheet ×1
drawable ×1
kotlin ×1
selector ×1
xml ×1