wake-up-neo.com

Wie kann ich die Aktionsleiste dazu zwingen, in ICS ganz unten zu sein?

Ice Cream Sandwich (Android 4.0) fügt die Option hinzu, dass Action Bar Am unteren Bildschirmrand eines Telefons angezeigt wird. Das würde ich gerne in einer meiner Anwendungen haben. In docs wird uiOptions="splitActionBarWhenNarrow" Angegeben, wenn Sie etwas möchten, d. H. Tabulatoren oben und Verknüpfungen Action Bar Unten. Ich habe versucht, die Zeile in das Anwendungsmanifest einzufügen, wie in den Dokumenten beschrieben, aber es funktioniert noch nicht.

Hier ist ein Beispiel:

enter image description here

Außerdem habe ich festgestellt, dass auf meinem Galaxy Nexus, auf dem ICS ausgeführt wird, die Messaging-Anwendung den Action Bar Unten und nichts als den Titel oben hat, sodass es möglich sein muss, den Action Bar um ganz unten zu sein.

Irgendwelche Ideen?

42
Michell Bak

Ich habe versucht, die Zeile in das Anwendungsmanifest einzufügen, wie in den Dokumenten beschrieben, aber es funktioniert noch nicht.

Es funktionierte für mich in dieses Beispielprojekt . Hier ist das Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.commonsware.Android.actionbarbc"
          xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <application Android:hardwareAccelerated="true"
               Android:icon="@drawable/cw"
               Android:label="@string/app_name">
    <activity Android:label="@string/app_name"
              Android:name=".InflationDemo"
              Android:uiOptions="splitActionBarWhenNarrow">
      <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
  <uses-sdk Android:minSdkVersion="4"
            Android:targetSdkVersion="11" />
  <supports-screens Android:anyDensity="true"
                    Android:largeScreens="true"
                    Android:normalScreens="true"
                    Android:smallScreens="true"
                    Android:xlargeScreens="true" />
</manifest>

Außerdem habe ich festgestellt, dass auf meinem Galaxy Nexus, auf dem ICS ausgeführt wird, in der Messaging-Anwendung die Aktionsleiste unten und nur der Titel oben angezeigt wird. Daher muss es möglich sein, die Aktionsleiste irgendwie nach unten zu verschieben.

Wenn Sie sich auf die Konversationsliste beziehen, ist dies das ActionBar oben und unten, wobei splitActionBarWhenNarrow und der folgende Setup-Code verwendet werden:

private void setupActionBar() {
    ActionBar actionBar = getActionBar();

    ViewGroup v = (ViewGroup)LayoutInflater.from(this)
        .inflate(R.layout.conversation_list_actionbar, null);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
            ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setCustomView(v,
            new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
                    ActionBar.LayoutParams.WRAP_CONTENT,
                    Gravity.CENTER_VERTICAL | Gravity.RIGHT));

    mUnreadConvCount = (TextView)v.findViewById(R.id.unread_conv_count);
}
28
CommonsWare

Ich verwende ActionBarSherlock und hatte ein ähnliches Problem. Ich habe es gelöst, indem ich Android:uiOptions="splitActionBarWhenNarrow" innerhalb der <activity>-Tag anstelle des <application> Etikett.

Zum Beispiel hat das funktioniert:

<activity Android:name=".my.Activity" 
          Android:uiOptions="splitActionBarWhenNarrow"/>

und das hat nicht funktioniert:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
          package="com.slowchop.etc"
          Android:uiOptions="splitActionBarWhenNarrow">
12
gak

Bearbeiten Sie hier das Bild :). InstaGram ActionBar + Bottom Bar

wieder mit besten Ergebnissen :). Als Erstes müssen Sie einen Layoutnamen "header.xml" erstellen

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="@dimen/action_bar_height"
    Android:layout_gravity="top"
    Android:baselineAligned="true"
    Android:orientation="horizontal" >

    <ImageView
        Android:id="@+id/share"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_gravity="start"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/action_bar_glyph_back" />

    <ImageView
        Android:id="@+id/bright"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/action_bar_glyph_Lux" />

    <ImageView
        Android:id="@+id/rotate"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/rotate" />

    <ImageView
        Android:id="@+id/bright"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/action_bar_glyph_Lux" />

    <ImageView
        Android:id="@+id/rotate"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/rotate" />

    <ImageView
        Android:id="@+id/forwa"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight=".14"
        Android:background="@drawable/action_bar_left_button"
        Android:src="@drawable/forward" />

</LinearLayout>

danach gehen Sie zu Ihrer MainActivity.class und erstellen Sie diese Methode.

    private void setupActionBar() {
    ActionBar actionBar = getActionBar();
    //actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowTitleEnabled(false);
    ViewGroup v = (ViewGroup)LayoutInflater.from(this)
        .inflate(R.layout.header, null);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
            ActionBar.DISPLAY_SHOW_CUSTOM);
    actionBar.setCustomView(v,
            new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,
                    ActionBar.LayoutParams.WRAP_CONTENT,
                    Gravity.CENTER_VERTICAL | Gravity.RIGHT));

} 

füge setupActionBar(); zu deiner onCreate-Aktivität hinzu und starte deine App :).

jetzt haben Sie eine benutzerdefinierte Aktionsleiste mit Teilern und Bildern PS. Der Teiler ist im Layout als Bildhintergrund definiert :).

4
k0sh

nun, Sie können es nicht erzwingen, auf Tablets ganz unten zu bleiben, aber wenn Sie telefonieren, können Sie dies über das Manifest tun. Sie können jedoch etwas tun, das der unteren und der oberen Leiste ähnlich ist. In diesem Beispiel zeige ich Ihnen, wie Sie merge verwenden, um dies ohne die Verwendung von Android ActionBar) zu tun.

das erste, was Sie erstellen müssen, ist Ihr main_activity.xml in meinem Fall das main_activity.xml enthält nur ImageView in RelativeLayout. Hier ist der Code.

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity" >
        <RelativeLayout Android:id="@+id/RelativeLayout04"
    Android:layout_width="match_parent" Android:layout_height="wrap_content"
    Android:layout_alignParentTop="true">

    <include layout="@layout/header" />

</RelativeLayout>

<ImageView
    Android:id="@+id/view"
    Android:layout_width="match_parent"
    Android:layout_height="200dp"
    Android:layout_above="@+id/RelativeLayout03"
    Android:layout_below="@+id/RelativeLayout04"
    Android:layout_centerHorizontal="true"
    Android:src="@Android:drawable/alert_dark_frame" />

    <RelativeLayout Android:id="@+id/RelativeLayout03"
    Android:layout_width="match_parent" Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true">

    <include layout="@layout/tryit" />

</RelativeLayout>

wie Sie im obigen Code sehen können, gibt es zwei Zusammenführungen, die ich in das main_activity.xml eine unten und eine oben definiert. Hier ist die gefälschte untere Leiste xml.

<merge xmlns:Android="http://schemas.Android.com/apk/res/Android">

<LinearLayout
    Android:id="@+id/LinearLayout01"
    Android:layout_width="match_parent"
    Android:layout_height="80dp"
     Android:layout_weight="0.14"
    Android:background="@drawable/dock" >

    <ImageView
        Android:id="@+id/dark"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/stock"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/open"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/border"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.15" />

    <ImageView
        Android:id="@+id/color"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.15" 
        />

</LinearLayout>

ich setze einen festen Hintergrund für die LinearLayout und fälsche die ImageView für onClicks.

und hier ist die obere Leiste. `

<LinearLayout
    Android:id="@+id/LinearLayout02"
    Android:layout_width="match_parent"
    Android:layout_height="40dp"
     Android:layout_weight="0.14"
    Android:background="@drawable/dock1" 
    Android:layout_gravity="top">

    <ImageView
        Android:id="@+id/darka"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/stocka"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/opena"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.14" />

    <ImageView
        Android:id="@+id/bordera"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.15" />

    <ImageView
        Android:id="@+id/colora"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_weight="0.15" 
        />

</LinearLayout>

`

die kopieren auch einfügen von der unteren Leiste oben. ändere nur eine Sache von Android:layout_alignParentBottom="true" bis Android:layout_alignParentTop="true" und du hast unten und oben eine actionBar. In diesem Fall brauchst du die ActionBar nicht, also empfehle ich dir Theme.Holo.NoActionBar

und hier ist das bild ergebnis: - http://i.imgur.com/N8uKg6v.png

dies ist ein Projekt, an dem ich gerade arbeite. fast alles getan, aber immer noch mit dem Design zu kämpfen. Ich hoffe, meine Antwort kommt Ihnen zugute. Bitte stimmen Sie die Antwort ab, wenn Sie sie interessant fanden.
freundliche Grüße. ~ Kosh

3
k0sh

versuche dies...

private View contentView;

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     contentView = getLayoutInflater().inflate(R.layout.activity_main, null);
     setContentView(contentView);
     LinearLayout layout = (LinearLayout) contentView.getParent().getParent();
     View view = layout.getChildAt(0);
     layout.removeViewAt(0);
     layout.addView(view);
}
0
Gopal Gopi