【发布时间】:2021-08-06 15:47:34
【问题描述】:
在我的 android 应用中,我的主要活动中有 4 个片段,我可以左右滑动来访问它们。
现在,每个片段都有与我的 activity_main.xml 中布局相同的应用栏:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/windowBackground"
tools:context=".ui.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@color/colorPrimary"
android:contentDescription="@string/content_basic_toolbar"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleTextColor="@color/white"/>
</com.google.android.material.appbar.AppBarLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/bottomNavColor"
app:itemIconTint="@drawable/bottom_nav_color_selector"
app:itemTextColor="@drawable/bottom_nav_color_selector"
app:labelVisibilityMode="labeled"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />
<ImageButton
android:id="@+id/user_button"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginEnd="8dp"
android:background="#00FFFFFF"
android:elevation="4dp"
android:contentDescription="@string/user"
app:layout_constraintBottom_toBottomOf="@+id/appBarLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/appBarLayout"
app:srcCompat="@drawable/ic_user" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/mainNavigationFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
app:navGraph="@navigation/main_nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout>
但是,我想将其中一个片段(主页片段)的应用栏更改为具有居中徽标和更高的高度。
这是我的 MainActivity.kt,其中配置了应用栏/导航控制器/片段:
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
lateinit var user: ImageButton
lateinit var toolbar: Toolbar
lateinit var bottomNavigationView: BottomNavigationView
lateinit var loginViewModel: LoginViewModel
lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
loginViewModel = ViewModelProvider(this).get(LoginViewModel::class.java)
toolbar = binding.toolbar
bottomNavigationView = binding.bottomNavigation
user = binding.userButton
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
Fresco.initialize(this)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.mainNavigationFragment) as NavHostFragment
navController = navHostFragment.navController
bottomNavigationView.setupWithNavController(navController)
// Set up tool bar with navController and appBarConfiguration
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.homeFragment,
R.id.mapFragment,
R.id.resourcesFragment,
R.id.moreFragment
)
)
toolbar.setupWithNavController(navController, appBarConfiguration)
// Show navigation bar and user bottom on top level fragments
navController.addOnDestinationChangedListener { _, destination, _ ->
when (destination.id) {
R.id.homeFragment,
R.id.mapFragment,
R.id.resourcesFragment,
R.id.moreFragment -> {
bottomNavigationView.visibility = View.VISIBLE
user.visibility = View.VISIBLE
}
else -> {
bottomNavigationView.visibility = View.GONE
user.visibility = View.GONE
}
}
}
user.setOnClickListener {
loginViewModel.loadAccount(this@MainActivity, binding.root) {
navController.navigate(R.id.userFragment)
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1) {
user.callOnClick()
}
}
}
到目前为止我所尝试的:
在我想要更改应用栏/工具栏的 HomeFragment.kt onCreateView 中,我添加了以下代码行:
(activity as MainActivity?)!!.supportActionBar!!.setLogo(R.drawable.logo_mt)
这成功地将我的徽标放在了中心,但它改变了每个片段应用栏,而不仅仅是主页片段。我还希望能够编辑徽标大小和工具栏大小。
【问题讨论】:
标签: android kotlin android-fragments android-toolbar