【问题标题】:How to put Toolbar in mutliple Fragments using Kotlin如何使用 Kotlin 将工具栏放在多个片段中
【发布时间】:2021-12-27 13:36:20
【问题描述】:

我正在做一个项目,有很多片段。请有没有一种方法可以创建出现在所有片段上的工具栏,我正在观看 youtube 上的教程,他们使用了 navController ,但是当我尝试做同样的事情时,我得到一个Unresolved reference 错误..

请记住,我希望不同的片段有不同的图标。

那么,我该怎么做?还是我必须在每个片段 .xml 文件中显式创建工具栏???

这是我的 MainActivity.kt 文件,其中包含我试图实现的不完整代码:

package com.example.a500months

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.appcompat.app.AppCompatDelegate
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Assign Toolbar to Actionbar
        setSupportActionBar(findViewById(R.id.material_Toolbar))

        // To make Toolbar show back button (!!!I get the error here!!!)
        val navController = findNavController

这是我的 .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"
    tools:context=".MainActivity">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/material_Toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


    <FrameLayout
        android:id="@+id/fl_fragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavigationView"
        android:layout_width="match_parent"
        android:layout_height="65dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/bottom_nav_menu" />

</androidx.constraintlayout.widget.ConstraintLayout>

如果有任何建议、提示、回答......任何事情,我都将不胜感激。

提前感谢您的帮助..

【问题讨论】:

    标签: android kotlin android-fragments toolbar android-toolbar


    【解决方案1】:

    您可以创建单独的toolbar.xml,并且此toolbar.xml 包含在您的mainActivity 的xml 中,它反映了您的所有片段。 您还可以使用不同的片段在工具栏中管理显示隐藏额外的东西。

    【讨论】:

    • 谢谢 Yash,我很想看看这个示例代码.. 提前致谢。
    【解决方案2】:

    下面的代码是你的 common_toolbar.xml

        <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/_50sdp">
    
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/clParent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <View
                android:id="@+id/viewToolbar"
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:layout_marginTop="@dimen/_16sdp"
                android:layout_marginEnd="@dimen/_10sdp"
                android:background="@color/black"
                app:layout_constraintTop_toBottomOf="@+id/txtToolbarName" />
    
            <androidx.appcompat.widget.AppCompatImageView
                android:id="@+id/imgToolbarCancel"
                android:layout_width="@dimen/_50sdp"
                android:layout_height="@dimen/_40sdp"
                android:src="@drawable/ic_basic_cancel"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
            <androidx.appcompat.widget.AppCompatImageView
                android:id="@+id/imgToolbarMainMenu"
                android:layout_width="@dimen/_50sdp"
                android:layout_height="@dimen/_40sdp"
                android:src="@drawable/ic_basic_mainmenu"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
            <androidx.appcompat.widget.AppCompatImageView
                android:id="@+id/imgToolbarLeft"
                android:layout_width="@dimen/_16sdp"
                android:layout_height="@dimen/_16sdp"
                android:src="@drawable/ic_back_btn"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
            <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/txtToolbarName"
                style="@style/TextView_regular_12_black_caps_bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/_15sdp"
                android:fontFamily="@font/lato_heavy"
                android:text=""
                android:textAllCaps="true"
                app:layout_constraintBottom_toTopOf="@+id/viewToolbar"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
            <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/txtToolbarDone"
                style="@style/TextView_regular_12_black_caps_bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/_13sdp"
                android:text="@string/done"
                android:textAllCaps="true"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.appcompat.widget.Toolbar>
    

    这是一个mainActivity的.xml

     <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <include
            android:id="@+id/include"
            layout="@layout/common_fragment_header"
            android:visibility="visible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:layout_editor_absoluteY="56dp" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    在 mainActivity 中你可以隐藏 show toolbar 的额外内容

     fun onSectionAttached(number: Int, title: String): Boolean {
        return when (number) {
            0 -> {
                setViewVisible(
                    title,
                    0,
                    View.GONE,
                    View.GONE,
                    View.GONE,
                    View.GONE,
                    View.GONE,
                    View.VISIBLE
                )
                true
            }
            1 -> {
                setViewVisible(
                    title,
                    1,
                    View.GONE,
                    View.GONE,
                    View.GONE,
                    View.GONE,
                    View.VISIBLE,
                    View.VISIBLE
                )
                true
            }
            
            else -> true
        }
    }
    
     private fun setViewVisible(
        title: String,
        from: Int,
        imgToolbarLeft: Int,
        imgToolbarCancel: Int,
        txtToolbarDone: Int,
        viewToolbar: Int,
        imgToolbarMainMenu: Int,
        nav_view: Int
    ) {
        binding.include.txtToolbarName.text = title
        binding.include.txtToolbarDone.visibility = txtToolbarDone
        binding.include.imgToolbarLeft.visibility = imgToolbarLeft
        binding.include.imgToolbarCancel.visibility = imgToolbarCancel
        binding.include.imgToolbarMainMenu.visibility = imgToolbarMainMenu
        binding.include.viewToolbar.visibility = viewToolbar
        binding.navView.visibility = nav_view
    
    }
    

    在片段中,您可以在 inActivityCreated() 中添加工具栏,并带有收费栏编号

     override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        (context as MainActivity).onSectionAttached(1, resources.getString(R.string.your_string))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2018-06-11
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多