I have need to make two action bars , I am using actionBarSherlock by the way . So what I need exactly is to put a "Welcome screen" toggle on the normal action bar up , and add two normal ActionBar Action options . Similar to what I need are Gmail and Maps like here : http://cdn.androidcommunity.com/wp-content/uploads/2012/03/Screenshot_2012-03-28-12-58-16.png (They didn't allow me to post an image for reputation is low , see the link please)
This Maps app has an upper and bottom action bar , exactly what I need , because once I reach the point where I can add the second actionbar I know where to start ...
I have searched for about a week about this topic and I have found a few similar questions , but however I have understood non of the answers ; the answers were about a custom view which I am not (at all) familiar with and I can't understand a thing , but yes I tried to make a "custom view" from whatever I thought is right and I got crrassshheesss which I didn't find any solution for ... If you may plz show me as an example this Maps app how is it using those two action bars ?? (I don't want to navigate like in maps and gmail , but only the two actionbars)
Here is some of my code :
//Part of my MainActivity.class
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
MenuInflater inf = getSupportMenuInflater();
inf.inflate(R.menu.upper_navbar, menu);
final String name = "welcome";
final SharedPreferences pref = getSharedPreferences(name, 0);
final Editor edit = pref.edit();
boolean oldState = pref.getBoolean("w", true);
ToggleButton tog = (ToggleButton) menu.findItem(R.id.welcome_screen).getActionView();
if(oldState){
tog.setChecked(true);
}else{
tog.setChecked(false);
}
tog.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
edit.putBoolean("w", true);
edit.apply();
}else{
edit.putBoolean("w", false);
edit.apply();
}
}
});
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
My Manifest :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="seaskyways.editpad"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:name="android.app.Application"
android:icon="@drawable/ic_launcher"
android:uiOptions="splitActionBarWhenNarrow"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="seaskyways.editpad.MainActivity"
android:label="MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="seaskyways.editpad.Splash"
android:theme="@style/Theme.Sherlock.Dialog.NoActionBar"
android:label="Splash" >
<intent-filter>
<action android:name="android.intent.action.SPLASH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
And my menus which I intend to put them in my action bars ...
menu\activity_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/bottom_copy" android:title="Copy" android:orderInCategory="3" android:showAsAction="ifRoom|withText" />
<item android:id="@+id/bottom_paste" android:title="Paste" android:orderInCategory="2" android:showAsAction="ifRoom|withText" />
</menu>
menu\upper_navbar.xml (Should have named it upper_actionbar but its just a thinking mistake , its a name afterall , :/ plz proceed )
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/welcome_screen"
android:orderInCategory="1"
android:showAsAction="ifRoom|withText"
android:title="Welcome Screen"
android:actionLayout="@layout/toggle"
/>
</menu>
If you need anymore info please tell me , I will tell , its for me and everyone else afterall !
EDIT !!! : I found a much near example to my question , the wifi settings (http://omgdroid.com/wp-content/uploads/2012/07/Screenshot_2012-07-06-01-34-29-576x1024.png) It uses a switch in the normal actionbar and a normal split actionbar down ! Exactly what I need !
EDIT 2 !!!! : Here is a screenshot from my Galaxy nexus using a custom ROM based over aosp , This is exactly what I need and mean :
Settings-Wifi: https://lh4.googleusercontent.com/-aeL_sHjIcQQ/UPVptGQiuqI/AAAAAAAAAGE/UGc-CuLP4Qw/s512/Screenshot_2013-01-15-16-36-32.png
Settings-Bluetooth: lh3*googleusercontent.com/-4j6ca1Nm1VI/UPVqAiDn_PI/AAAAAAAAAGM/LLB2ILWVjQY/s512/Screenshot_2013-01-15-16-38-14.png
EDIT 3 !!! : Big progress in my investigation in the Bluetooth and Wifi , and as I said and asked , they were true actionbars ! see what I got in Settings-Bluetooth:
BluetoothSettings.class/onCreateOptionsMenu :
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (mLocalAdapter == null) return;
boolean bluetoothIsEnabled = mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_ON;
boolean isDiscovering = mLocalAdapter.isDiscovering();
int textId = isDiscovering ? R.string.bluetooth_searching_for_devices :
R.string.bluetooth_search_for_devices;
menu.add(Menu.NONE, MENU_ID_SCAN, 0, textId)
.setEnabled(bluetoothIsEnabled && !isDiscovering)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add(Menu.NONE, MENU_ID_RENAME_DEVICE, 0, R.string.bluetooth_rename_device)
.setEnabled(bluetoothIsEnabled)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
menu.add(Menu.NONE, MENU_ID_VISIBILITY_TIMEOUT, 0, R.string.bluetooth_visibility_timeout)
.setEnabled(bluetoothIsEnabled)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
menu.add(Menu.NONE, MENU_ID_SHOW_RECEIVED, 0, R.string.bluetooth_show_received_files)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
super.onCreateOptionsMenu(menu, inflater);
}
These can be options are clearly shown in the splitActionBarDown with the exact properties up ...
now :
BluetoothSettings.class/addPreferencesForActivity :
@Override
void addPreferencesForActivity() {
addPreferencesFromResource(R.xml.bluetooth_settings);
Activity activity = getActivity();
Switch actionBarSwitch = new Switch(activity);
if (activity instanceof PreferenceActivity) {
PreferenceActivity preferenceActivity = (PreferenceActivity) activity;
if (preferenceActivity.onIsHidingHeaders() || !preferenceActivity.onIsMultiPane()) {
final int padding = activity.getResources().getDimensionPixelSize(
R.dimen.action_bar_switch_padding);
actionBarSwitch.setPadding(0, 0, padding, 0);
activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
ActionBar.DISPLAY_SHOW_CUSTOM);
activity.getActionBar().setCustomView(actionBarSwitch, new ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_VERTICAL | Gravity.END));
}
}
mBluetoothEnabler = new BluetoothEnabler(activity, actionBarSwitch);
setHasOptionsMenu(true);
}
Noting that this class isn't extending Activity , it extends DeviceListPreferenceFragment
...
Now that we know it's possible to have two actionbars(split and normal) in the same time , we need a way to simplify that , maybe by a class or library ??
That is a split action bar. It is available for handset devices with a screen width of 400dp<
To enable split action bar, simply add uiOptions="splitActionBarWhenNarrow"
to your or manifest element.
Edit: The second image is indeed not a split action bar. These are just buttons with the buttonBarButtonStyle attribute. Look into this here.
Edit:
splitActionBarWhenNarrow
has been deprecated.
I have need to make two action bars
Then you are on your own. This is not supported in Android or ActionBarSherlock, other than the split action bar, which you dismissed.
Similar to what I need are Gmail and Maps like here
That is a split action bar, specifically one using overlays. This sample project demonstrates this technique.
This Maps app has an upper and bottom action bar , exactly what I need
Then use the split action bar, via android:uiOptions="splitActionBarWhenNarrow"
in your <activity>
element, the way that Maps does. The main Maps activity uses android:uiOptions="splitActionBarWhenNarrow"
.
If you may plz show me as an example this Maps app how is it using those two action bars ?
As noted above, this sample project demonstrates this technique.
I know how to make one action bar (split and normal)
Maps is using a split action bar.
but what I need is making them both at a time so I can have two actionbars !
In your screenshot, you will notice that Maps has a split action bar, and they are both on the screen at the same time. This is the way split action bars work, in narrow situations. The same Maps app does not show the split action bar when the screen is not presently narrow.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With