Nexus 7でAndroid 5.0プレビュービルドを使用しています。
このページで http://developer.Android.com/tools/support-library/index.html
そうですか
V7 appcompatライブラリの変更:メニューから矢印へのアニメーションを含む
ActionBarDrawerToggle
を更新
これはGoogle Playアプリが使用するものですか?この声明を読みすぎていますか?この動作を得るために何を変更する必要がありますか-APIドキュメントで見つけることができません。
新しいツールバークラスとActionBarToggleを使用して、PlayストアスタイルのアニメーションアイコンをActionBarに提供するサンプルアプリをここに投稿しました。
https://github.com/03lafaye/LollipopDrawerToggle
No-v7-supportブランチは、フレームワークのアクティビティとツールバーでActionBarToggleを使用します。マスターブランチは、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が、アップアイコンアニメーションの代替バックポートを公開しました。コードはGitHubにあります: https://github.com/ChrisRenke/DrawerArrowDrawable そして彼はそれについてブログを書いています http://chrisrenke.com/drawerarrowdrawable 。
これはとても簡単だ。
DrawerLayoutを使用したレイアウトは、いつものように見えます。 Android.support.v4.widget.DrawerLayoutを使用して、引き出しとコンテンツ領域を作成します。
<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の変数を作成します。このような:
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>
私がそれを読んだとき、あなたは働く引き出しを持っているように見えますが、そうでない場合は、 「ナビゲーション引き出しの作成」に関するドキュメント はかなり良いです。
メニューから矢印へのアニメーションを含むActionBarDrawerToggleを更新しました
上記の引用は、 矢印とハンバーガーメニューで新しいActionBarDrawerToggleを作成 commitを参照しています。関連するものとして:setDrawerIndicatorEnabled
が 新しいArrowDrawerでドロワーインジケータを無効にする機能を追加 に追加されました。
したがって、setDrawerIndicatorEnabled
がfalse
で呼び出されないことを確認して、
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で新しいプロジェクトを作成し、appcompat-v7.21.0。+およびappcompat-v4.21.0。+ライブラリをgradle依存関係としてbuid.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ファイルに追加します。
<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 Lollipopのvalues-21フォルダーにstyle.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>
古いバージョンの場合は、valuesフォルダーにstyle.xmlファイルを作成してからAndroid Lollipop
<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>
参照のみ:ここから完全なソースコードをダウンロードできます: ここをクリック