I\'m new to Android and I need your advice. I would like to have an activity with action bar, I need also tabs (but not tabs in actionbar) and drop down list in action bar t
You have two options:
TabWidget
at the top of your content view.Spinner
Be careful not to overload your users. Usually two types of navigation can be confusing.
I achieved this by Setting the tab navigation in action bar
and Setting Spinner in Menu for navigation list
. I would explain the second part as the first one is trivial.
Define Spinner
in action_bar.xml
:
<item
android:id="@+id/menu_test_spinner"
android:actionViewClass="android.widget.Spinner"
android:showAsAction="always"/>
Setup and bind data in Spinner
in the activity:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.action_bar, menu);
MenuItem testSpinner = menu.findItem( R.id.menu_test_spinner );
setupTestSpinner(testSpinner);
return true;
}
private void setupTestSpinner(MenuItem item) {
View view = item.getActionView();
if (view instanceof Spinner) {
Spinner spinner = (Spinner) view;
spinner.setAdapter(ArrayAdapter.createFromResource(this,
R.array.test,
android.R.layout.simple_spinner_dropdown_item));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
//Do something on item selection
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
}
Now, override the method which would respond to tab changes, and change the navigation list items in Spinner.
For the action items, if you are using fragments for your different "screens" then they can register to supply action items with setHasOptionsMenu(true);
and define their actions by overriding onCreateOptionsMenu(Menu menu, MenuInflater inflater)
. So, a good rule of design, if you can't explain it simply, you're probably doing something wrong and should change the design.
It also might be a misuse of Android design to diverge too far from the action bar pattern, meaning you have something that looks like an ActionBar with navigation, but really you have some other thing that you have made up yourself. If this is required, then you should not make something that looks like an action bar with navigation, because users will expect certain behavior and get a different response (confusion).
Finally, with what you describe, it seems that the Tabs drive the list navigation, yet the list navigation has visual precedence (being above and essentially containing the tabs). So if the tabs are consistent through selections of the list navigation, but the list changes based on selections of the tab navigation, it is represented clearer by having the tabs have visual precedence over the list navigation. So, if you keep both navigation I would reverse their order. Maybe try list navigation with a view pager instead of the list navigation. Jake has a great library for view pager too http://viewpagerindicator.com/