首页 > 解决方案 > 工具栏/顶部栏/操作栏中的 Android Studio xml 问题

问题描述

我目前正在为我妈妈做一个个人项目,因为她喜欢植物/花卉,所以我决定制作一个应用程序,但在制作工具栏/操作栏/顶部栏的过程中遇到了问题(我真的不知道该引用哪个名称,因为我研究了很多,我猜每个人都给不同的名字)

所以问题..

我所做的设计并希望作为最终结果:

我的目标是这样 的,这对于导航抽屉

目前,经过一些研究并试图理解导航抽屉和工具栏,我觉得目前很难理解,因为感觉如此笨拙和令人困惑,我得到了这个:

工具栏/操作栏/顶部栏 和这个作为抽屉

问题是我无法添加购物车图标,我也制作了一个菜单来添加它,但它只是没有出现

我的菜单

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/tool_cart"
        android:contentDescription="@string/cart"
        android:icon="@drawable/cart_icon"
        android:title="@string/cart"
        app:showAsAction="always" />
</menu>

我的抽屉

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">

        <item android:id="@+id/nav_home"
            android:title="@string/home"
            android:icon="@drawable/home_icon"/>

        <item android:id="@+id/nav_promotions"
            android:title="@string/promotions"
            android:icon="@drawable/promotion_icon"/>

        <item android:id="@+id/nav_gallery"
            android:title="@string/gallery"
            android:icon="@drawable/gallery_icon"/>

        <item android:id="@+id/nav_order_history"
            android:title="@string/old_shipping_orders"
            android:icon="@drawable/history_icon"/>

    </group>

    <group android:checkableBehavior="single">

        <item android:id="@+id/nav_account"
            android:title="@string/account"
            android:icon="@drawable/name_acc_icon"/>

        <item android:id="@+id/nav_about_us"
            android:title="@string/about_us"
            android:icon="@drawable/about_us_icon"/>

        <item android:id="@+id/nav_settings"
            android:title="@string/settings"
            android:icon="@drawable/setings_icon"/>

        <item android:id="@+id/nav_log_ou"
            android:title="@string/log_off"
            android:icon="@drawable/logout_icon"/>

    </group>
</menu>

我的活动 xml

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/light_green_bg"
    tools:context=".Home"
    android:id="@+id/drawer_layout"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:visibility="visible">


        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            app:layout_scrollFlags="scroll|enterAlways|snap"
            android:layout_height="?actionBarSize"
            android:background="@color/dark_green_bg"
            android:elevation="6dp"
            app:menu="@menu/menu_cart"
            android:theme="@style/App.ToolbarStyle"
            app:titleTextAppearance="@style/App.ToolbarTitleTex"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:titleTextColor="@color/light_green_bg" />
    </LinearLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view_home"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:itemTextColor="@color/brown"
        android:layout_gravity="start"
        android:visibility="visible"
        app:headerLayout="@layout/header_nav_drawer"
        app:itemIconTint="@color/brown"
        app:menu="@menu/nav_drawer"
        />


    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.bottomappbar.BottomAppBar
            android:id="@+id/bottomAppBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:fabAnimationMode="slide"
            app:fabCradleMargin="10dp"
            app:fabCradleRoundedCornerRadius="20dp">

            <com.google.android.material.bottomnavigation.BottomNavigationView
                android:id="@+id/bottomNavView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginEnd="16dp"
                android:background="@android:color/transparent"
                app:menu="@menu/bottom_nav" />
        </com.google.android.material.bottomappbar.BottomAppBar>

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/fabChat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentEnd="true"
            android:layout_gravity="bottom|end"
            android:layout_marginEnd="12dp"
            android:layout_marginBottom="68dp"
            android:src="@drawable/chat_icon"
            app:shapeAppearanceOverlay="@style/fab_3_rounded"
            android:contentDescription="TODO" />

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

        </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.drawerlayout.widget.DrawerLayout>

我的家.kt

class Home : AppCompatActivity() {

        private lateinit var binding: ActivityHomeBinding

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = ActivityHomeBinding.inflate(layoutInflater)
            setContentView(binding.root)

            binding.bottomNavView.background = null
            // binding.bottomNavView.menu.getItem(2).isEnabled = false

            setSupportActionBar(binding.toolbar)
            supportActionBar!!.setTitle(R.string.app_name_spaced)
            binding.navViewHome.bringToFront()

            val toggle = ActionBarDrawerToggle(this,binding.drawerLayout,binding.toolbar,R.string.drawer_open,R.string.drawer_closed)
            binding.drawerLayout.addDrawerListener(toggle)
            toggle.syncState()
/*            binding.navViewHome.setNavigationItemSelectedListener(this)
            binding.navViewHome.setCheckedItem(R.id.nav_home)*/

    }


    override fun onBackPressed() {
        if(binding.drawerLayout.isDrawerOpen(GravityCompat.START)){
            binding.drawerLayout.closeDrawer(GravityCompat.START)
        }
        else{
            super.onBackPressed()
        }
    }

}

在我在这里问之前,我试图找到将出现的图标(例如第一张图像和文本)放在中心的解决方案,但我只是找不到它或让它以某种方式工作,所以我再次寻求帮助和指导这个问题或它自己的代码。

我是一名学生,我尝试学习/投入练习语言,我想在业余时间做个人项目,任何建议或帮助都非常感谢!

更新 我发现人们实际上对支持操作栏有同样的看法,但没有它我似乎无法让它工作

标签: androidxmlandroid-studioandroid-layout

解决方案


我得到了解决方案,以防有人搜索与我相同的东西

基本上你需要覆盖setSupportActionBar以防你像我一样使用它。

例子

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu_cart, menu)

        return true
    }

推荐阅读