2014-11-08 22 views
6

Attualmente sto provando a convertire la mia app in design di materiale lecca-lecca e ho incontrato alcuni problemi con la barra delle azioni/barra degli strumenti. Implementando tutto nel modo in cui ho fatto, la barra delle azioni/barra degli strumenti non verrà visualizzata su un dispositivo lecca-lecca o kitkat. Forse qualcuno potrebbe guardare i miei temi, stili, activity_main (dove tengo un mucchio di frammenti ed è l'unico posto in cui inserisco il codice xml della barra degli strumenti), e l'attività principale.ActionBar/Barra degli strumenti non visualizzata nella versione Lollipop dell'app

Grazie.

valori/styles.xml

<resources> 

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> 
    <!-- Set AppCompat’s actionBarStyle --> 
    <item name="actionBarStyle">@menu/action_menu</item> 

    <!-- The rest of your attributes --> 
</style> 

</resources> 

valori/themes.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<style name="AppTheme" parent="AppTheme.Base"/> 

<style name="AppTheme.Base" parent="Theme.AppCompat"> 
    <item name="colorPrimary">@color/material_blue_grey_800</item> 
    <item name="colorPrimaryDark">@color/material_blue_grey_950</item> 
    <item name="android:textColor">@color/black</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
</style> 
</resources> 

activity_main.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/drawerLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<RelativeLayout 
    android:id="@+id/drawerView" 
    android:layout_width="250dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="start" > 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:minHeight="?attr/actionBarSize" /> 

    <ListView 
     android:id="@+id/drawerList" 
     android:layout_width="250dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 
     android:background="@drawable/nav_border" 
     android:divider="@null" /> 
</RelativeLayout> 
<!-- 
     <fragment 
     android:id="@+id/fragment1" 
     android:name="com.shamu11.madlibsportable.MadlibsSelect" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

--> 

</android.support.v4.widget.DrawerLayout> 

mainactivity

public class MainActivity extends ActionBarActivity implements 
    OnItemClickListener { 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    Fragment fragment = new MadlibsSelect(); 

    fragment = new MadlibsSelect(); 

    FragmentTransaction fm = getSupportFragmentManager().beginTransaction(); 
    fragment.setArguments(getIntent().getExtras()); 
    fm.add(R.id.fragment_container, fragment); 
    fm.commit(); 

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

    toolbar.inflateMenu(R.menu.action_menu); 

    //ActionBar bar = getActionBar(); 
    //bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#428bca"))); 

    ...more stuff happen down here including adding nav drawer. 

risposta

4

Change sei activity_main.xml come segue

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:minHeight="?attr/actionBarSize" /> 

     <FrameLayout 
      android:id="@+id/fragment_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 

    <RelativeLayout 
     android:id="@+id/drawerView" 
     android:layout_width="250dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="start" > 

     <ListView 
      android:id="@+id/drawerList" 
      android:layout_width="250dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="left" 
      android:background="@drawable/nav_border" 
      android:divider="@null" /> 
    </RelativeLayout> 
    <!-- 
     <fragment 
     android:id="@+id/fragment1" 
     android:name="com.shamu11.madlibsportable.MadlibsSelect" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
    --> 

</android.support.v4.widget.DrawerLayout> 

e Se stai usando setSupportActionBar allora toolbar.inflateMenu non funzionerà.

Per ulteriori dettagli, controllare questo post Android Usages Of Toolbar. Potrebbe aiutarti.

+0

BANG ON! Grazie! – sanic

+0

Il peggior tipo di risposta. Il resto della gente dovrebbe fare un diff su quei due file ora? –

4

L'attività deve estendersi da ActionBarActivity quando si utilizza la nuova libreria AppCompat.

+0

Già facendo ciò, implementando anche onitemclicklistener ho aggiunto quel codice per chiarimenti. – sanic

+0

@ shamu11 Hai provato a cambiare il tema principale in "Theme.AppCompat.Light.NoActionBar" Stai già dichiarando la barra degli strumenti nel tuo layout, quindi dovresti stare bene. –

+1

In realtà ho appena cambiato true da true a false e ora ho una barra delle azioni! Puoi consigliarti un modo per fare uno scherzo con questa barra delle azioni e aggiungere l'interruttore su di esso? Grazie! – sanic

1

Sì, questo è successo, ho perso più di un'ora per risolvere il problema.

@Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    mDrawerToggle.syncState(); 
    } 

Questo verrà automaticamente sincronizzato e infine mostrerà l'icona di Google.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Pass any configuration change to the drawer toggls 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

Questo funziona per me, Spero che sia di aiuto.

Problemi correlati