Indicatore del cassetto nel negozio di lollipop

Sto utilizzando un Nexus 7 con la build Anteprima di Android 5.0.

In questa pagina http://developer.android.com/tools/support-library/index.html

  • CheckedTextView non selezionato
  • Variabile / costante globale in React native
  • Ha rifiutato di visualizzare un fotogramma perché ha impostato X-Frame-Options su 'DENY in webview web android
  • Invertendo l'animation morphing dalla freccia al segno di spunta
  • Il token OAuth con i servizi di gioco di Google Play
  • Come cambiare 1 metro alla distanza di pixel?
  • io vedo

    Modifiche per la libreria appcompat v7: Aggiornato ActionBarDrawerToggle , che contiene l'animation da menu a freccia

    È questo che utilizza l'applicazione Google Play? Sto leggendo troppo in questa affermazione? Cosa devo cambiare per get questo comportmento? Non posso trovarlo nella documentazione API.

    5 Solutions collect form web for “Indicatore del cassetto nel negozio di lollipop”

    Ho pubblicato un'applicazione di esempio qui che utilizza la nuova class Toolbar e ActionBarToggle per fornire un ActionBar con l'icona animata dello stile Play Store:

    https://github.com/03lafaye/LollipopDrawerToggle

    Il branch di supporto no-v7 utilizza l'ActionBarToggle con un'attività quadro e una barra degli strumenti. Il branch master utilizza la barra degli strumenti v7 e un'azione ActionBarActivity.

    L'impostazione per non utilizzare un'azione ActionBarActivity sembra così:

     package com.plafayette.lollipop; import android.app.Activity; import android.support.v4.widget.DrawerLayout; import android.os.Bundle; import android.support.v7.app.ActionBarDrawerToggle; import android.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; public class ToolbarActivity extends Activity { private ActionBarDrawerToggle toggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_toolbar); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setActionBar(toolbar); DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); toggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close); toggle.setDrawerIndicatorEnabled(true); drawerLayout.setDrawerListener(toggle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); toggle.syncState(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (toggle.onOptionsItemSelected(item)) return true; int id = item.getItemId(); return id == R.id.action_settings || super.onOptionsItemSelected(item); } } 

    Tieni presente che devi distriggersre la barra degli strumenti della window e la barra del titolo nel tuo tema così:

     <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="android:Theme.Material.Light"> <item name="android:windowActionBar">false</item> <item name="android:windowNoTitle">true</item> </style> </resources> 

    Immagino che il codice di esempio per l'ultima libreria di appcompat v7 verrà rilasciata abbastanza presto per rendere obsoleto questo post.

    Chris Renke da Square ha pubblicato un backport alternativo dell'animation di up icon. Il codice è qui su GitHub: https://github.com/ChrisRenke/DrawerArrowDrawable e ha scritto un blog su di esso a http://chrisrenke.com/drawerarrowdrawable .

    È molto facile.

    Il tuo layout con DrawerLayout sembra lo stesso come sempre. Si utilizza android.support.v4.widget.DrawerLayout e crea cassetti e aree di contenuto:

     <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" > <RelativeLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ff0" android:orientation="vertical" > </RelativeLayout> <ListView android:id="@+id/leftDrawer" android:layout_width="290dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#f0f" android:choiceMode="singleChoice" android:clickable="true" android:divider="@null" android:dividerHeight="0dp" android:scrollbars="none" /> 

    Le principali modifiche sono nel tuo codice java. Nella tua attività, where si utilizza il layout del cassetto, è necessario estenderlo per ActionBarActivity da V7. Quindi crea variables per DrawerLayout e ActionBarDrawerToggle. Le tue importzioni dovrebbero essere simili a queste:

     import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.ActionBarActivity; 

    e poi basta colbind tutto. Ricorda che il nuovo layout del cassetto non ha l'icona! Non lo devi passare where normalmente dovresti essere. Codice per la mia attività:

     import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.ActionBarActivity; import android.view.MenuItem; public class MainActivity extends ActionBarActivity { DrawerLayout drawerLayout; ActionBarDrawerToggle drawerToggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.app_name, R.string.app_name) {}; drawerLayout.setDrawerListener(drawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (drawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig); } } 

    E dovrebbe funzionare.

    Scopri qui

    immettere qui la descrizione dell'immagine

    MainActivity.java:

     package com.poliveira.apps.materialtests; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.widget.Toast; public class MainActivity extends ActionBarActivity implements NavigationDrawerCallbacks { private Toolbar mToolbar; private NavigationDrawerFragment mNavigationDrawerFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayShowHomeEnabled(true); mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer); mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public void onNavigationDrawerItemSelected(int position) { Toast.makeText(this, "Menu item selected -> " + position, Toast.LENGTH_SHORT).show(); } @Override public void onBackPressed() { if (mNavigationDrawerFragment.isDrawerOpen()) mNavigationDrawerFragment.closeDrawer(); else super.onBackPressed(); } } 

    activity_main.xml:

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/toolbar_actionbar" layout="@layout/toolbar_default" android:layout_width="match_parent" android:layout_height="wrap_content"/> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toolbar_actionbar"> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:clickable="true" android:layout_height="match_parent"/> <!-- android:layout_marginTop="?android:attr/actionBarSize"--> <fragment android:id="@+id/fragment_drawer" android:name="com.poliveira.apps.materialtests.NavigationDrawerFragment" android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:layout_gravity="start" app:layout="@layout/fragment_navigation_drawer"/> </android.support.v4.widget.DrawerLayout> </RelativeLayout> 

    Sembra che tu abbia un cassetto di lavoro mentre lo leggo, se non la documentazione su "Creazione di un cassetto di navigazione" è abbastanza buona.

    Aggiornato ActionBarDrawerToggle, che contiene l'animation da menu a freccia

    immettere qui la descrizione dell'immagine

    La citazione sopra citata si riferisce a Creare un nuovo ActionBarDrawerToggle con menu di freccia e hamburger . Come correlato: setDrawerIndicatorEnabled stato aggiunto nella funzionalità Add per distriggersre l'indicatore del cassetto nel nuovo ArrowDrawer .

    Assicurarsi setDrawerIndicatorEnabled che il setDrawerIndicatorEnabled non venga chiamato con false e utilizzati

     import android.support.v7.app.ActionBarDrawerToggle; 

    invece di

     import android.support.v4.app.ActionBarDrawerToggle; 

    che dovrebbe essere abbastanza evidente per gli avvisi di depreazione comunque:

    @deprecated Utilizza ActionBarDrawerToggle in support-v7-appcompat.

    Probabilmente anche bisogno

     // <item name="displayOptions">showHome|homeAsUp</item> getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); 

    Innanzitutto, assicurati di aggiornare l'SDK più recente. Crea nuovo progetto in Android Studio, quindi aggiungi appcompat-v7.21.0. + E appcompat-v4.21.0. + Librerie nel tuo buid.gradle come dipendenza gradle.

     compile 'com.android.support:appcompat-v7:21.0.2' compile 'com.android.support:support-v4:21.0.2' 

    Aggiungi primaryColor e primarycolorDark nel file color.xml.

     <resources> <color name="primaryColor">#2196F3</color> <color name="primaryColorDark">#0D47A1</color> </resources> 

    Aggiungere il valore di string di apertura / chiusura del cassetto nel file strings.xml.

     <resources> <string name="app_name">Lollipop Drawer</string> <string name="action_settings">Settings</string> <string name="drawer_open">open</string> <string name="drawer_close">close</string> </resources> 

    Il file di layout di activity_my.xml è simile a questo:

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context=".MainActivity"> <include layout="@layout/toolbar" /> <android.support.v4.widget.DrawerLayout android:layout_width="match_parent" android:id="@+id/drawerLayout" android:layout_height="match_parent"> <!-- activity view --> <RelativeLayout android:layout_width="match_parent" android:background="#fff" android:layout_height="match_parent"> <TextView android:layout_centerInParent="true" android:layout_width="wrap_content" android:textColor="#000" android:text="Activity Content" android:layout_height="wrap_content" /> </RelativeLayout> <!-- navigation drawer --> <RelativeLayout android:layout_gravity="left|start" android:layout_width="match_parent" android:background="#fff" android:layout_height="match_parent"> <ListView android:id="@+id/left_drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="#eee" android:background="#fff" android:dividerHeight="1dp" /> </RelativeLayout> </android.support.v4.widget.DrawerLayout> </LinearLayout> 

    Il file di layout di toolbar.xml ha questo aspetto:

     <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.Toolbar> 

    La tua attività MyActivity.java ha questo aspetto: qui la tua attività deve estendere ActionBarActivity e impostare la barra degli strumenti come barra di azione di supporto.

     import android.content.res.Configuration; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; public class MyActivity extends ActionBarActivity { private Toolbar toolbar; private DrawerLayout drawerLayout; private ActionBarDrawerToggle drawerToggle; private ListView leftDrawerList; private ArrayAdapter<String> navigationDrawerAdapter; private String[] leftSliderData = {"Home", "Android", "Sitemap", "About", "Contact Me"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); nitView(); if (toolbar != null) { toolbar.setTitle("Navigation Drawer"); setSupportActionBar(toolbar); } initDrawer(); } private void nitView() { leftDrawerList = (ListView) findViewById(R.id.left_drawer); toolbar = (Toolbar) findViewById(R.id.toolbar); drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); navigationDrawerAdapter=new ArrayAdapter<String>( MyActivity.this, android.R.layout.simple_list_item_1, leftSliderData); leftDrawerList.setAdapter(navigationDrawerAdapter); } private void initDrawer() { drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } }; drawerLayout.setDrawerListener(drawerToggle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.my, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } if (drawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } } 

    Crea file style.xml nella cartella valori-21 per il lollipop android

     <?xml version="1.0" encoding="utf-8"?> <resources> <style name="myAppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/primaryColor</item> <item name="colorPrimaryDark">@color/primaryColorDark</item> <item name="android:statusBarColor">@color/primaryColorDark</item> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/black</item> </style> </resources> 

    Crea il tuo file style.xml nella cartella valori per le versioni precedenti, quindi il lollipop android

     <resources> <style name="myAppTheme" parent="Theme.AppCompat.Light"> <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> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/black</item> </style> </resources> 

    Il tuo AndroidManifest.xml è simile a questo:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="nkdroid.com.lollipopdrawer" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/myAppTheme" > <activity android:name=".MyActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

    Per riferimento solo: è ansible scaricare il codice sorgente completo da qui: clicca qui

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.