如何使用Kotline将工具栏放入多个片段中 [英] How to put Toolbar in mutliple Fragments using Kotlin

查看:38
本文介绍了如何使用Kotline将工具栏放入多个片段中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个项目,有很多碎片..请有没有方法可以创建显示在所有片段上的工具栏,我在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>

任何建议、提示、回答……我都很感激。

提前感谢您的帮助..

推荐答案

下面的代码是您的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‘s.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中,您可以隐藏显示工具栏的额外内容

 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))
}

这篇关于如何使用Kotline将工具栏放入多个片段中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆