Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I access the default ToolBar from an Activity in Android?

I'm trying to access the default ToolBar from within and Activity's onCreateOptionsMenu function to change the Overflow menu icon (three dots icon). I want to use the setOverflowIcon method provided by this class.

I have read the official documentation, posts on StackOverflow and other websites and everything fails.

I tried for example Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); but I get an error that says that R.id.toolbar doesn't exist.

like image 563
user5507535 Avatar asked Apr 10 '18 19:04

user5507535


3 Answers

If you're using AppcompatActivity, you should use SupportActionBar like this:

supportActionBar?.title = "My Activity title"

this piece of code: Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); only works when you've added a Toolbar with toolbar id in xml. even if you did it, you should setSupportActionBar(yourToolBar) before doing anything. Then use supportActionBar directly instead.

like image 92
Kingfisher Phuoc Avatar answered Oct 21 '22 07:10

Kingfisher Phuoc


Performing Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar) isn't expected to work because the ID does not explicitly exist. Every activity-Java class extends Activity (or its direct or indirect subclasses), you can use this to get the action bar (so to speak).

If your java file extends AppCompatActivity, you can use getSupportActionBar() to summon the ActionBar.

Java files that extend Activity require getActionBar() to summon the toolbar.

You can thereafter perform operations like changing the displayed text/title, background drawable, amongst other tasks.

To learn more about getting the action bar, check out this link.

like image 3
Taslim Oseni Avatar answered Oct 21 '22 08:10

Taslim Oseni


A little late to the party but default toolbar can be referenced by an id like androidx.appcompat.R.id.action_bar

findViewById(androidx.appcompat.R.id.action_bar)
like image 2
geekon Avatar answered Oct 21 '22 07:10

geekon