在棒棒糖戏剧商店的抽屉指标

我正在使用Android 5.0预览版本的Nexus 7。

在这个页面http://developer.android.com/tools/support-library/index.html

我懂了

v7 appcompat库的更改:更新了ActionBarDrawerToggle ,其中包含菜单到箭头的animation

Google Play应用使用的是什么? 我是否读了太多这个陈述? 我需要更改以获取此行为 – 我无法在API文档中find它。

Solutions Collecting From Web of "在棒棒糖戏剧商店的抽屉指标"

我已经在这里发布了一个示例应用程序,该应用程序使用新的工具栏类和ActionBarToggle来提供一个具有Play商店样式animation图标的ActionBar:

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

no-v7-support分支将ActionBarToggle与框架Activity和Toolbar一起使用。 主分支使用v7工具栏和一个ActionBarActivity。

不使用ActionBarActivity的设置如下所示:

 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); } } 

请注意,您必须在主题中禁用窗口操作栏和标题栏,如下所示:

 <?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> 

我想最新的v7 appcompat库的示例代码将很快发布,使这篇文章过时。

来自Square的Chris Renke发布了向上图标animation的替代回传。 代码在GitHub上: https : //github.com/ChrisRenke/DrawerArrowDrawable ,他在http://chrisrenke.com/drawerarrowdrawable上写了一个关于它的博客&#x3002;

这很容易。

DrawerLayout的布局看起来一如既往。 您使用android.support.v4.widget.DrawerLayout并创build抽屉和内容区域:

 <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" /> 

主要的变化是在你的Java代码。 在您的活动中,使用抽屉布局的地方,必须从v7扩展到ActionBarActivity。 然后你为DrawerLayout和ActionBarDrawerToggle创buildvariables。 您的导入应该如下所示:

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

然后连接一切。 记住新的抽屉布局没有图标! 你只是不通过你通常应该在哪里。 我的活动代码:

 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); } } 

它应该工作。

看看这里

在这里输入图像说明

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> 

你看起来有一个工作的抽屉,如果没有, 关于“创build导航抽屉”的文档是相当不错的。

更新了ActionBarDrawerToggle,其中包含菜单到箭头的animation

在这里输入图像说明

上面的引用是指用箭头和汉堡菜单提交创build一个新的ActionBarDrawerToggle 。 作为一个相关的一个: setDrawerIndicatorEnabled被添加在添加能力来禁用在新的ArrowDrawer抽屉指标 。

所以确保setDrawerIndicatorEnabled没有被调用并且使用

 import android.support.v7.app.ActionBarDrawerToggle; 

代替

 import android.support.v4.app.ActionBarDrawerToggle; 

无论如何,这应该是非常明显的弃用警告:

@deprecated请在support-v7-appcompat中使用ActionBarDrawerToggle。

也许还需要

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

首先,确保你更新到最新的SDK。 在Android Studio中创build新项目,然后在buid.gradle中添加appcompat-v7.21.0。+和appcompat-v4.21.0。+库作为gradle依赖项。

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

在你的color.xml文件中添加primaryColor和primarycolorDark。

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

在您的strings.xml文件中添加抽屉打开/closuresstring值。

 <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> 

你的activity_my.xml布局文件如下所示:

 <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> 

您的toolbar.xml布局文件如下所示:

 <?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> 

您的MyActivity.java看起来像这样:在这里您的活动必须扩展ActionBarActivity并将您的工具栏设置为支持操作栏。

 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); } } 

在android棒棒糖的values-21文件夹中创buildstyle.xml文件

 <?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> 

在旧版本的值文件夹中创build您的style.xml文件,然后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> 

你的AndroidManifest.xml如下所示:

 <?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> 

仅供参考:您可以从这里下载完整的源代码 : 点击这里