Éléments d'action qui n'apparaissent pas dans ActionBar avec showAsAction = "ifRoom"
Je suis d'essayer d'ajouter des points d'Action à ma Barre d'Action. Dans mon activité, j'ai aussi des onglets ajoutés à la Barre d'Action.
Ceci est un extrait de l'activité:
public class ShowEmails extends ActionBarActivity implements ShowEmailsFragmentInteractionListener {
private IMAPClientService service;
private boolean bound;
private ActionBar ab;
private MailDBHelper mdbhelper;
private SQLiteDatabase db;
private Intent client_service;
<.........................>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.client_service = new Intent(this, IMAPClientService.class);
this.mdbhelper = new MailDBHelper(this.getApplicationContext(), MailDBHelper.MAIL_DB_NAME, null, MailDBHelper.MAIL_DB_VERSION);
this.db = this.mdbhelper.openWriteable();
this.ab = this.getSupportActionBar();
this.ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
this.ab.show();
Tab t = ab.newTab().setText(R.string.all_emails)
.setTabListener(new TabListener<ShowEmailsFragment>(this, "all", ShowEmailsFragment.class));
ab.addTab(t);
new LoadTabsInBackground().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.show_emails_bulk_action, menu);
return super.onCreateOptionsMenu(menu);
}
}
La classe LoadTabsInBackground
ajoute des onglets pour l'ActionBar après avoir fait quelques opération de base de données.
C'est la ressource de menu je suis gonflage:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/email_refresh"
android:orderInCategory="1"
android:showAsAction="ifRoom"
android:title="@string/action_refresh"
android:icon="@drawable/ic_menu_refresh"/>
<item
android:id="@+id/email_bulk_seen"
android:orderInCategory="20"
android:showAsAction="ifRoom"
android:title="@string/action_seen"
android:icon="@android:drawable/sym_action_email"/>
<item
android:id="@+id/email_bulk_delete"
android:orderInCategory="40"
android:showAsAction="ifRoom"
android:title="@string/action_delete"
android:icon="@android:drawable/ic_menu_delete"/>
</menu>
Et voici un extrait de AndroidManifest.xml, où vous pouvez ess le thème que j'utilise est Theme.AppCompat.Light
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="it.dndonline.battleclient4android"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light" >
<.......................>
<activity
android:name="it.dndonline.battleclient4android.Activities.ShowEmails"
android:label="@string/title_activity_show_folders"
android:theme="@style/Theme.AppCompat.Light" >
</activity>
<......................................>
</application>
</manifest>
Tout semble correct pour moi, malheureusement, bien que les onglets sont chargés correctement, cela signifie que ActionBar est en bon état de marche, aucun des éléments de menu sont chargés dans la barre d'action. Réglage de la showAsAction
de la valeur à always
ne change rien.
Je suis en essais sur Android 2.3.3.
source d'informationauteur Zagorax
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé le problème. Il y a une erreur dans le menu .fichier xml. En fait, j'ai ajouté un nouvel espace de noms:
xmlns:app="http://schemas.android.com/apk/res-auto"
Mais ensuite, j'ai toujours consulter la propriété comme si elle appartient à la
android
espace de noms:android:showAsAction="ifRoom"
La bonne façon de référer cette propriété est à utiliser:
app:showAsAction="ifRoom"
Cause, il appartient à l'espace de noms
app
.Voici la partie pertinente dans la documentation:
J'ai trouvé la même erreur, et je le résoudre comme cela
ajouter,
xmlns:app="http://schemas.android.com/apk/res-auto"
dans le milieu du code, qui fonctionne pour moi 🙂