¿Dos barras de acción (Abajo y Arriba) al mismo tiempo?
Tengo que hacer dos barras de acción, por cierto, estoy usando actionBarSherlock. Entonces, lo que necesito exactamente es colocar el botón "Pantalla de bienvenida" en la barra de acción normal hacia arriba y agregar dos opciones normales de acción de la barra de acción. Similar a lo que necesito son Gmail y Mapas como aquí:http://cdn.androidcommunity.com/wp-content/uploads/2012/03/Screenshot_2012-03-28-12-58-16.png (No me permitieron publicar una imagen porque la reputación es baja, vea el enlace, por favor)
Esta aplicación de Mapas tiene una barra de acción superior e inferior, exactamente lo que necesito, porque una vez que llegue al punto en el que puedo agregar la segunda barra de acción, sé dónde comenzar ...
Busqué aproximadamente una semana sobre este tema y encontré algunas preguntas similares, pero sin embargo no entendí las respuestas; las respuestas fueron acerca de una vista personalizada con la que no estoy (en absoluto) familiarizado y no puedo entender nada, pero sí, traté de hacer una "vista personalizada" desde cualquier cosa que pensé que es correcta y obtuve las críticas que recibí. No encuentro ninguna solución para ... Si me pueden mostrar como ejemplo esta aplicación de Maps, ¿cómo está usando esas dos barras de acción? (No quiero navegar como en los mapas y gmail, solo las dos barras de acción)
Aquí está algo de mi código:
//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);
}
Mi manifiesto
<?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>
Y mis menús que tengo la intención de ponerlos en mis barras de acción ...
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 (Debería haberlo llamado upper_actionbar pero es solo un error de pensamiento, es un nombre después de todo,: / plz proceder)
<?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>
Si necesita más información, por favor dígame, le diré, ¡es para mí y para todos los demás después de todo!
EDITAR !!! : Encontré un ejemplo muy cercano a mi pregunta, la configuración de wifi (http://omgdroid.com/wp-content/uploads/2012/07/Screenshot_2012-07-06-01-34-29-576x1024.png) ¡Utiliza un interruptor en la barra de acción normal y una barra de acción dividida normal hacia abajo! Exactamente lo que necesito!
EDITAR 2 !!!! : Aquí hay una captura de pantalla de mi Galaxy nexus usando una ROM personalizada basada en aosp. Esto es exactamente lo que necesito y quiero decir:
Ajustes-Bluetooth: lh3 * googleusercontent.com / -4j6ca1Nm1VI / UPVqAiDn_PI / AAAAAAAAAGM / LLB2ILWVjQY / s512 / Screenshot_2013-01-16-16-38-14.png
EDITAR 3 !!! : ¡Gran progreso en mi investigación en Bluetooth y Wifi, y como dije y pregunté, eran verdaderas barras de acción! Mira lo que tengo en Configuración-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);
}
Estas pueden ser opciones que se muestran claramente en splitActionBarDown con las propiedades exactas hacia arriba ...
ahora :
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);
}
Notando que esta clase no está extendiendo la Actividad,extends DeviceListPreferenceFragment
...
Ahora que sabemosEs posible para tener dos barras de acción (dividida y normal) al mismo tiempo, necesitamos una forma de simplificar eso, tal vez por una clase o biblioteca.