MaterialSearchView doesn't get focus on startup - Android - android

I am using MaterialSearchView (https://github.com/MiguelCatalan/MaterialSearchView), a library to implement SearchView in a Material Design Approach.
It puts a searchview in the toolbar. However don't know how to focus on the search, so that when the actviity starts, the search gets the focus right away and the virtual keyboard appears. It only focuses if i click on the search icon.
MaterialSearchView searchView;
searchView = MaterialSearchView)getActivity().findViewById(R.id.search_view);
searchView.requestFocus();
doesn't work.
I tried it from the fragment and from the activity.
Thanks

I would suggest you to use my implementation of MaterialSearchView, it's possible to open it up without clicking on the Toolbar/Actionbar.
For example, in your Activity you could do the following:
// Activity:
MaterialSearchView searchView = (MaterialSearchView) findViewById(R.id.search_view);
Then, anywhere in your code, you could open the view by calling:
searchView.openSearch();
And close it by calling:
searchView.closeSearch();
So, you could put the openSearch() inside your onResume() for example. That way, you'll always have the search view open when your Activity starts. You could also call that method from any Button on your Activity.
P.S.: It also have support for search suggestions and search history.
Bonus: Have a gif (It's shown in portuguese, but it also supports english, so don't worry).
For more information on how to set it up, and to see the use cases, you can check the docs.

Create a menu reference object:
private Menu menu;
#Override
public boolean onCreateOptionsMenu(final Menu menu) {
this.menu = menu;
//rest of your code here ...
}
and then onResume() of your Activity you can programmatically simulate item click like this:
onOptionsItemSelected(menu.findItem(R.id.searhView));

Related

Android: Set menu visibility within a fragment

I have an android app that has a side menu and the main body of content is inside a fragment. So far there are 3 fragments (Home, Settings, Help). What I am trying to do is have the menu in the top right only appear in the home fragments.
Using
this.setHasOptionsMenu(false);
doesn't do anything so I am obviously using that wrong. Any ideas on how I can accomplish this?
Use:
menu.findItem(R.id.MENU_ITEM).setVisible(false);
For all of your menu items in the method onPrepareOptionsMenu(...). You should end up with something similar to this:
#Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.MENU_ITEM_ONE).setVisible(false);
menu.findItem(R.id.MENU_ITEM_TWO).setVisible(false);
menu.findItem(R.id.MENU_ITEM_THREE).setVisible(false);
}

What is the use of invalidateOptionsMenu() in android

I am a newbie to android when I am going through a sample code for navigation drawer I found he called the method invalidateOptionsMenu() so I searched regarding its functionality but couldn't find an answer so can anyone please brief me its functionality and whenshould we use that.
This function tell android that it should redraw the menu. By default, once the menu is created, it won't be redrawn every frame (since that would be useless to redraw the same menu over and over again).
You should call this function when you changed something in the option menu (added an element, deleted an element or changed a text). This way android will know that it's time te redraw the menu and your change will appear.
Hope this answers your question
I use this method in combination with actionbar: When I need to populate actionbar with new menu items, I call invalidateOptionsMenu(), then onCreateOptionsMenu is called and I can inflate menu that I need. :-)
for more info see http://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu()
or
Change options menu during runtime - invalidateOptionsMenu()
That would trigger another call to onCreateOptionsMenu where you can decide to display a new menu. It's basically the right way of replacing the current menu with a new one.
When Activity is created then the onCreateOptionsMenu method is called. Inside you can inject menu from menu.xml ol build it by hand. But if you want to change this menu during activity life you must call invalidateOptionsMenu();
eg:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
if (something) {
// buildOneMenu
} else {
// buildAnotherMenu
}
}
...
something = true;
invalidateOptionsMenu();
invalidateOptionsMenu() is used to say Android, that contents of menu have changed, and menu should be redrawn. For example, you click a button which adds another menu item at runtime, or hides menu items group. In this case you should call invalidateOptionsMenu(), so that the system could redraw it on UI. This method is a signal for OS to call onPrepareOptionsMenu(), where you implement necessary menu manipulations. Furthermore, OnCreateOptionsMenu() is called only once during activity (fragment) creation, thus runtime menu changes cannot be handled by this method.

What does onPrepareOptionsMenu do?

I want to make Option Menu for Android, I have visit this site. In their script, I found onPrepareOptionsMenu, I try to compile and run using Android 2.3.3 compiler with and without onPrepareOptionsMenu, both works, but I didn't see any difference.
public boolean onCreateOptionsMenu(Menu menu){
//code here
}
public boolean onOptionsItemSelected(MenuItem item){
//code here
}
public boolean onPrepareOptionsMenu(Menu menu){
//code here
}
What is actually onPrepareOptionsMenu method do? Is that method important? Could I just delete the method?
Addition
Oh, I also hear about Action Bar in Android 3.0, it says that Action Bar is the alternative way for make Option Menu, and it using onPrepareOptionsMenu. Is that right?
Thank you...
Take a look in the API:
Prepare the Screen's standard options menu to be displayed. This is called right before the menu is shown, every time it is shown. You can use this method to efficiently enable/disable items or otherwise dynamically modify the contents.
If you want to alter the menu before it's shown to the user, you can put code to do that into onPrepareOptionsMenu. I've used that dynamically to disable some menu options in some circumstances.
As an example of when one might want to disable a menu option, I had an app where there was a way of specifying a destination. One of my menu options was to calculate a route to the destination. However, if a destination wasn't specified, that option didn't apply, so I used onPrepareOptionsMenu to disable that menu option when it wasn't applicable.
From Android 3.0 and beyond, there's the ActionBar, which is a menu bar. The most important items go into the ActionBar itself, but then there's an overflow for when there's not enough room on the action bar. One can specify that menu items should always be in the overflow menu and never on the action bar itself. On some devices, the action bar overflow corresponds to the permanent menu button on the device, whereas on other devices which don't have a menu button the overflow menu is seen on the right hand side of the action bar as three vertical dots.
onCreateOptionsMenu is called once, when your activity is first created. If it returns false, no option menu is shown and onPrepareOptionsMenu is never called.
If onCreateOptionsMenu returns true, onPrepareOptionsMenu is also called before the activity is displayed, and also every time the options menu is invalidated. Use onPrepareOptionsMenu if you need to enable/disable, show/hide, or add/remove items after creating it.
If your menu does not change, use onCreateOptionsMenu.
example
#Override
public void onPrepareOptionsMenu(#NonNull Menu menu) {
super.onPrepareOptionsMenu(menu);
if(!URLUtil.isValidUrl(news.geturl())){
menu.findItem(R.id.share).setVisible(false);
}
}

Android: removing Sherlock Action Bar items for some classes

I'm having Sherlock Action Bar to show several icons in the Action Bar, like sharing, info, etc.
The thing is that I want to delete, for certain activities/fragments one of the buttons (sharing), but I can't do it.
My activity (StartActivity) extends from InfoActivity, which is the one that implements the onCreateOptionsMenu.
I tried to override the onCreateOptionsMenu method and do a clear() but it doesn't work:
#Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
Any ideas on how to do this?
Thanks a lot in advance.
Find the menu item in question and disable or hide it. Something like this in onCreateOptionsMenu() or onPrepareOptionsMenu() if you want to make it dynamic:
menu.findItem(R.id.menu_share).setVisible(false);
What I did in the end, was creating different classes: one with the Sharing button in the menu as a button, and one without, and just making the proper activity extend from the appropriate class.
For example, StartActivity, I don't want it to have sharing capabilities, so I made it extend from an Activity without the sharing button.
Thanks #NikolayElenkov for your help!

Show Custom Menu On Menu Button Click

I have created an Activity that will behave like a popup menu is actually just a list of Menu Items. I then set the theme of the activity on my manifest to "Dialog" to get the popup effect. Now I need this activity to show when the Menu button is pressed on the device. I tried using onCreateOptionsMenu, then passing my Activity XML to the Inflater like so:
public boolean onCreateOptionsMenu(Menu menu){
new MenuInflater(this).inflate(R.layout.popup_menu, menu);
return (super.onCreateOptionsMenu(menu));
}
"popup_menu" is the XML for my Activity. But this didnt work. Any other suggestions??
you should start your activity there. I can tell you more if I see the code for your activity

Categories

Resources