Harry
Harry

Reputation: 284

How to make custom toolbar menu visible for my android app?

I have prepared the custom toolbar toolbar.xml file as below:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   xmlns:layout="http://schemas.android.com/tools"
   android:id="@+id/my_toolbar1"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:background="#BCBCDD"
   android:elevation="4dp"
   app:logo="@drawable/ic_baseline_menu_24"
   android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
</androidx.appcompat.widget.Toolbar>

Now I have created a menu directory, and in that toolbar_menu.xml file as below:

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

<item
    android:id="@+id/menu_share"
    android:title="Share"/>
<item
    android:id="@+id/menu_settings"
    app:showAsAction="always"
    android:icon="@drawable/ic_baseline_settings_24"
    android:title="Settings"/>
<item
    android:id="@+id/menu_exit"
    android:title="Exit"/>
</menu>

Now I have included this toolbar layout in my main activity. xml with <include/> tag. After all this implementation I have set the toolbar in MainActivity.kt which is as below:

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

    setSupportActionBar(my_toolbar.findViewById(R.id.my_toolbar1)) //Set the Action Bar -> toolbar

    val apiService : ApiService = ApiClient.getClient()
    coronaRepository =
        CoronaDetailsRepository(
            apiService
        )

    viewModel = getViewModel(1,1)
    viewModel.coronaDetails.observe(this, Observer {
        bindUI(it)
    })

    viewModel.networkState.observe(this, Observer {
        loader.visibility = if (it == NetworkState.LOADING) View.VISIBLE else View.GONE
    })

}


override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.toolbar_menu, menu)   // Used Menu Inflater to inflate the layout
    return true
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {

    when(item.itemId){
        R.id.menu_share -> Toast.makeText(applicationContext, "Share", Toast.LENGTH_SHORT).show()
        R.id.menu_settings -> Toast.makeText(applicationContext, "Settings", Toast.LENGTH_SHORT).show()
        R.id.menu_exit -> Toast.makeText(applicationContext, "Exit", Toast.LENGTH_SHORT).show()
    }
    return super.onOptionsItemSelected(item)
}

My toolbar is appearing on the main screen when app runs but the menu is not visible. I am wondering that what is wrong going on in my code??

Upvotes: 0

Views: 1695

Answers (1)

Kasalwe
Kasalwe

Reputation: 368

Inside onCreate

..
setSupportActionBar(findViewById(R.id.my_toolbar1))
..

Inside onCreateOptionsMenu

override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.menu_toolbar, menu)
        return super.onCreateOptionsMenu(menu)
    }

Upvotes: 1

Related Questions