【发布时间】:2020-10-17 09:35:20
【问题描述】:
我正在使用现代架构组件构建我的应用程序。
这是我的主要活动 XML
<androidx.drawerlayout.widget.DrawerLayout 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/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/main_app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/main_tool_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:theme="@style/MaterialTheme"
style="@style/Widget.MaterialComponents.Toolbar.Primary"
app:titleTextColor = "@android:color/white"
/>
</com.google.android.material.appbar.AppBarLayout>
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/navigation_graph"
android:layout_below="@id/main_app_bar_layout"/>
</RelativeLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@drawable/gradient_background"
android:theme="@style/Theme.Design"
app:itemTextColor="@android:color/white"
app:menu="@menu/drawer_menu" />
</androidx.drawerlayout.widget.DrawerLayout>
这是我如何设置导航控制器的主要活动 java 文件
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.navigation_view);
MaterialToolbar mainToolBar = findViewById(R.id.main_tool_bar);
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.wallet_fragment)
.setOpenableLayout(drawerLayout)
.build();
NavigationUI.setupWithNavController(mainToolBar, navController, appBarConfiguration);
这是我的带有折叠工具栏的片段 xml
<androidx.coordinatorlayout.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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.WalletFragment">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:padding="5dp">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/imv_display_pic"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:src="@drawable/ic_launcher"
app:civ_border_color="@android:color/white"
app:civ_border_width="2dp" />
<RelativeLayout
android:id="@+id/relative_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/imv_display_pic"
android:layout_toRightOf="@+id/imv_display_pic">
<TextView
android:id="@+id/tv_wallet_balance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:text="Ksh 1000"
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
android:textColor="@android:color/white" />
<TextView
android:id="@+id/tv_display_wallet_balance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_wallet_balance"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:text="Wallet Balance"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
</RelativeLayout>
</RelativeLayout>
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/wallet_tool_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:title="Username" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_add_money"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:layout_marginLeft="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:text="Add Money"
android:textColor="@android:color/white"
android:theme="@style/ButtonsTheme"
app:icon="@drawable/ic_add_money"
app:iconTint="@android:color/white"
android:textAllCaps="false"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_withdraw_money"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:layout_marginLeft="2dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:layout_toEndOf="@+id/btn_add_money"
android:layout_toRightOf="@+id/btn_add_money"
android:text="Withdraw Money"
android:textColor="@android:color/white"
android:theme="@style/ButtonsTheme"
app:icon="@drawable/ic_withdraw"
app:iconTint="@android:color/white"
android:textAllCaps="false" />
</RelativeLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
我遇到的问题是,当现在加载片段时,我将如何使折叠工具栏中的材质工具栏成为主工具栏,它显示两个工具栏,一个在主活动中,一个在片段中。
我已尝试在此处实施解决方案:https://developer.android.com/guide/navigation/navigation-ui#support_app_bar_variations
这是我尝试在片段 java 类中实现的方式
NavController navController = Navigation.findNavController(view);
AppBarConfiguration appBarConfiguration =
new AppBarConfiguration.Builder(navController.getGraph()).build();
MaterialToolbar walletToolBar = view.findViewById(R.id.wallet_tool_bar);
NavigationUI.setupWithNavController(
walletToolBar , navController, appBarConfiguration);
我已经尝试过了,但它仍然显示主要活动和片段中的工具栏
【问题讨论】:
-
您找到解决方案了吗?
-
不,我没有,如果您有解决方案可以与我分享,这会有所帮助
标签: android navigation navigation-drawer android-toolbar