2014-11-18 12 views
18

Ich habe eine Aktivität mit Navigationsschublade, die den main_fragment_container für die Aktivität ersetzt. Wenn eines der Fragmente angezeigt wird, möchte ich das Layout der Symbolleiste ändern und ein Drehfeld hinzufügen (und es entfernen, wenn das Fragment ausgeblendet ist).Symbolleistenlayout entsprechend dem angezeigten Fragment ersetzen

Mein Layout sieht wie folgt aus:

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

<android.support.v7.widget.Toolbar 

    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    sothree:theme="@style/AppTheme.ActionBar" /> 

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- Main layout --> 
    <FrameLayout 
     android:id="@+id/main_fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <!-- Nav drawer --> 
    <fragment 
     android:id="@+id/fragment_drawer" 
     android:name="com.idob.mysoccer.ui.DrawerFragment" 
     android:layout_width="@dimen/navigation_drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="left|start" /> 
</android.support.v4.widget.DrawerLayout> 

+0

Dies würde die Schublade unter der Symbolleiste öffnen. [Die Navigationsleiste ist in Material Design] (http://www.google.com/design/spec/patterns/navigation-drawer.html) angegeben, um die ToolBar zu überlappen (was Google derzeit jedoch nicht tut). – Tapirboy

+0

Ich habe es mit Absicht gemacht, in meinem Design sieht die Schublade nicht gut aus, wenn es über der Symbolleiste ist. – Idob

Antwort

39

nicht sicher, was Sie versuchen zu erreichen, aber ich denke, wenn möglich, können Sie dies, indem wir nähern sollten die Fragmente Ihre Symbolleiste anpassen, anstatt zu ersetzen es. Sie können Ihre Fragmente abhängig von Ihren Anforderungen in der Symbolleiste anzeigen lassen.

hinzufügen setHasOptionsMenu(true); in den Fragmenten OnCreateView() und dann onOptionsMenuCreated()

Wie dies außer Kraft setzen:

@Override 
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 
    return inflater.inflate(R.layout.result_list, container, false); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.this_frag_menu, menu); 
    super.onCreateOptionsMenu(menu, inflater); 
} 

Wenn Sie spezifischere Dinge mit der Toolbar tun müssen, können Sie die Instanz erhalten mit

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

+0

Ich habe zwei verschiedene Symbolleisten, Standard-Symbolleiste mit einem Titel und Symbolleiste mit Spinner anstelle des Titels. Ich möchte nur mit dem Spinner in der Symbolleiste angezeigt werden, wenn eines meiner Fragmente angezeigt wird. – Idob

+3

Ich würde immer noch empfehlen, die Symbolleiste zu bearbeiten, anstatt sie zu ersetzen. Blenden Sie Ihre Titel und Spinner je nach aktivem Fragment ein/aus. – Tapirboy

+0

Die Implementierung einer Symbolleiste funktioniert gut! Danke Bitte bearbeiten Sie Ihre Antwort und ich werde es als beantwortet markieren – Idob

Verwandte Themen