2014-12-12 11 views
8

Ich benutze die AppCompat v21-Bibliothek, um eine Lollipop-ähnliche Schnittstelle in meiner Android-App zu erstellen.
Bis jetzt funktioniert es großartig.Overlay-Symbolleiste über dem Aktivitätsinhalt

Jetzt möchte ich Symbolleiste über meinem Inhalt in einer meiner Aktivitäten angezeigt werden.
Allerdings kann ich es nicht zum Laufen bringen. Das ist, was ich habe, so weit:

Layout Aktivität:

<LinearLayout 
    android:id="@+id/main_parent_view" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:theme="@style/myAppTheme"> 
    <include layout="@layout/toolbar_setlist_top"/> 
    <ImageView 
     android:id="@+id/image" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent"/> 
</LinearLayout> 

Anordnung der Werkzeugleiste:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    app:theme="@style/MyActionBar" 
    app:popupTheme="@style/MyActionBar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize" 
    android:layout_marginTop="0dp" /> 

Thema:

<resources> 
    <style name="myAppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <item name="colorPrimary">@color/primaryColor</item> 
     <item name="colorPrimaryDark">@color/primaryColorDark</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="windowActionBar">false</item> 
     <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
     <item name="android:activatedBackgroundIndicator">@drawable/list_selector</item> 
     <item name="actionBarStyle">@style/MyActionBar</item> 
    </style> 

    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
     <item name="spinBars">true</item> 
     <item name="color">@android:color/white</item> 
    </style> 

    <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar"> 
     <item name="android:background">@color/primaryColor2</item> 
     <item name="android:windowActionBarOverlay">true</item> 
     <!-- Support library compatibility --> 
     <item name="background">@color/primaryColor2</item> 
     <item name="windowActionBarOverlay">true</item> 
    </style> 
</resources> 

Code:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_setlist); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
} 

Antwort

18

Wenn Sie die Symbolleiste oben auf Ihre Inhalte platzieren möchten, können Sie eine FrameLayout wie folgt verwenden:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

    <LinearLayout 
     android:id="@+id/main_parent_view" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 


     <ImageView 
      android:id="@+id/image" 
      android:layout_height="100dp" 
      android:layout_width="40dp" 
      android:background="#000"/> 
    </LinearLayout> 
    <include layout="@layout/toolbar_setlist_top"/> 
</FrameLayout> 
+0

Ja, das dit es. Vielen Dank! –

+0

Danke, Ihre Antwort hat mir geholfen, das gleiche Problem zu lösen. Eines ist jedoch noch nicht klar - Ist es wirklich wichtig ein FrameLayout zu verwenden? Kann das nicht mit einem relativen oder linearen Layout gemacht werden? – webgenius

+0

@webgenius ja kann es, mit einem relativen Layout. Das gleiche Konzept. –

1

Es scheint nicht, dass Sie in Ihrem Layout überall einen Verweis auf die Symbolleiste Ansicht sind zu erwerben. Sie müssen die Ansicht zuerst finden, dann, dass der Bezug auf die setSupportActionBar Methode übergeben:

setContentView(R.layout.activity_setlist); 
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 
+0

Hoppla, ich habe diese Zeile, aber sie muss beim Kopieren auf diese Website verloren gegangen sein. Bearbeitete den Code –

1

Angenommen, Sie möchten die Werkzeugleiste in einer meiner Aktivitäten über dem Inhalt anzeigen, wenn Sie sagen: "Jetzt möchte ich die Symbolleiste als ActionBar Ihrer Aktivität verwenden (anstelle der alten/ursprünglichen ActionBar), die Sie erstellen müssen." Theme's übergeordnete Thema "Theme.AppCompat.NoActionBar" anstelle Ihrer aktuellen Einstellung * .Light.DarkActionBar. Hoffe das hilft.

+1

Das löste ein Problem, das ich mit der Farbe des Titels in der Symbolleiste hatte, aber leider drückt die Symbolleiste immer noch die Bildansicht nach unten, anstatt darüber zu sein. Könnte es ein Problem in meinem Layout XML sein? –

Verwandte Themen