Hallo,
Ich beschäftige mich garde mit der ActionBar. Jede Activity in der ich eine ActionBar einbinden möchte muss mit dem zusatz "extends ActionBarActivity" beginnen. Stimmz das ?
Wie mache ich es die Seite unter der ActionBar zu endern. Mache ich das mit einem Intent und einer neuen Klasse oder geht das auch besser?
ActionBar activity switch
-
-
Moin,
ZitatJede Activity in der ich eine ActionBar einbinden möchte muss mit dem zusatz "extends ActionBarActivity" beginnen.
Dieser Zusatz von den du sprichst, nennt sich Vererbung. Also das heißt in der Klasse in der du extends ActionBarActivity aufrufst bzw. schreibst, erbt von der Klasse ActionBarActivity.
Und nein du musst nicht in jeder Actvity wo du eine ActionBar verwenden möchtest davon erben. Das geht wesentlich einfacher.
1. Schritt: Als erstes musst du ein Menu erzeugen
Code<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:title="Info" android:id="@+id/info" android:showAsAction="ifRoom|withText"/> <item android:title="Einstellung" android:id="@+id/seeting" android:showAsAction="ifRoom|withText"/> </menu>
2. Schritt: überschreibst du die Methode onCreateOptionsMenu
Java
Alles anzeigenpackage de.reichenbach.actionbar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; public class ActionBarActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbar, menu); return true; } }
So mehr ist es gar nicht, natürlich musst du dich noch um die Interaktion kümmern und und und....
Aber so hast du erstmal ein Einstieg (hoffe ich mal) und gibt ja auch recht viele Tutorial darüber, die teilweise nicht schlecht sind.
Oder was ich dir auch empfehlen kann bei GitHub mal nach ActionBar zu suche, da findest du Projekte wo Leute dies
implementiert haben. -
Ok, Danke für die Antwort
Ich habe hier den Inhalt der Klassen aus dem Beispiel ActionBarCompat:
ActionBarActivity.java
ActionBarHelper.java
ActionBarHelperBase.java
ActionBarHelperHoneycomb.java
ActionBarHelperICS.java
MainActivity.java
SimpleMenu.java
SimpleMenuItem.java
Was brauche ich noch um mit onCreateOptionsMenu die ActionBar zu erzeugen? Welche Helper sind von nöten?Würde mich über eine Antwort freuen.
-
Du brauchst nichts weiter. Deine Klasse muss nur von Activity erben, aber das macht sie ja mehr oder weniger automatisch.
Da es ja sonst keine Activity ist, die man auf den Bildschirm sehen kann. -
Eine frage noch, Wenn ich den code des Menus bei mit einfüge kommt in der Console folgendes:
C:\Users\Constantin\workspace\KleinerActionBarVersuch\res\menu\menu.xml:4: error: No resource identifier found for attribute 'showAsAction' in package 'android'außerdem wir mir folgendes angezeigt, wenn ich minSdkVersion auf 15 setzen.
Attribute minSdkVersion (15) is higher than the project target API level (10)
Was ist die project target API levelWas jetzt ?
Muss ich dar noch was implementieren ? -
minSdkVersion muss kleiner als targetSdkVersion sein - anders gesagt, du willst Code schreiben, der Features von targetSdkVersion benutzt, aber es soll auch laufen auf 'nem Gerät mit minSdkVersion - dann allerdings mit weniger Funktionen (du musst die kritischen Abschnitte ausblenden).
In deiner Manifest.xml sollte in etwa folgendes stehen:
Im Code kommt dann so was:
Javaif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { // was wunderbares machen } else { // tröstende Meldung an den Benuter ausgeben }
Die Versionsnummern an deine Wünsche anpassen.
-
Ok und was ist damit:
C:\Users\Constantin\workspace\KleinerActionBarVersuch\res\menu\menu.xml:4: error: No resource identifier found for attribute 'showAsAction' in package 'android'
-
Doku sagt, showAsAction gibt's ab API 11 - also sollte es mit target 12 auf jeden Fall funktionieren. Versuchs mal...
Sonst schau auch noch mal, was Eclipse für eine Version in der Datei project.properties definiert hat - da steht (hoffentlich) target=android-12 - passend zum Manifest.
Im Code musst du aber dem Benutzer älterer Version die Funktionalität vielleicht auch irgendwie anbieten, da kannst du die if-Abfrage in abgewandelter Form benutzen...
-
Ich gebe folgenden Code in die Mainfest datei ein:
Folgende Fehlermeldung:
Attribute minSdkVersion (11) is higher than the project target API level (10)Der kapiert die Änderungen an der target API nicht! An der minSdkVersion aber schon Ich das ein Bug?
Was kann ich jetzt machen??? Gibt es vielleicht noch einen anderer weg die zu endern?
PS: (im Anhang die gesamte Manifest Datei)
-
Sonst schau auch noch mal, was Eclipse für eine Version in der Datei project.properties definiert hat - da steht (hoffentlich) target=android-14 - passend zum Manifest.
-
Nein dar steht:
Project target.target=android-10kann ich das jetzt einfach enden?
Das steht nämlich:
YOUR CHANGES WILL BE ERASED!## -
Du kannst es mal versuchen - und schreib, ob es geklappt hat. Vielleicht hat Eclipse da auch eine Einstellung, frag mich aber nicht, wo die sein könnte...
Ansonsten lege dir in Eclipse ein neues Projekt an für API 14 und kopiere dann deine Dateien in das neue Projekt.
Dabei gibt's zwischendrin immer mal wieder den Fehler, dass Eclipse einige impoorts am Anfang einträgt für das alte Projekt, einfach löschen und weitermachen...
-
Ok jetzt lauft es. Danke UweApps
Da steht jetzt zwar
Attribute minSdkVersion (11) is lower than the project target API level (14)
das ist aber egal, weil das nur eine Warnung und kein Fehler ist.Danke
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!