2014-10-17 3 views
13

내 프로젝트 (this : https://github.com/SimonVT/android-menudrawer)에 menudrawer 라이브러리를 사용하고 있습니다.내비게이션 창 (menudrawer) Android 5 (lollipop) 스타일

API21 (Android 5 Lollipop) 및 Material Design과 호환되도록 앱을 업데이트하고 있습니다. API21에서이 라이브러리를 사용하면 menudrawer 아이콘이 나 빠진다.

새로운 Play 스토어에서 볼 수있는 전환을 달성하고 싶습니다 (화살표로 새 menudrawer 아이콘 전환).

Play Store navigation drawer icon

그렇게하는 가장 좋은 방법은 무엇입니까? 이 라이브러리로 가능합니까? 내가 지금 생각하고있는 유일한 해결책은 맞춤형 drawable이다. 하지만 네이티브 드로어 블을 어떤 식 으로든 사용할 수 있습니까?

+0

왜 안드로이드 5.0 SDK에 APPCOMPAT-V7 라이브러리를 사용하지 않는? – alanv

+0

@alanv하지만 appcompat-v7을 사용하려면 내 프로젝트에서 menudrawer를 제거하고 기본 메뉴를 사용하십시오. 지금이 문제가 있습니다. – adek

+0

지원 라이브러리에서 DrawerLayout을 사용한다는 의미입니다. menudrawer가 똑같은 기능을 제공하는 것처럼 보이지만 DrawerLayout은 ActionBarDrawerToggle (이 애니메이션을 제공하는 것)을 사용하기위한 것입니다. – alanv

답변

41

확인. 나는 새로운 API로 몇 시간을 보냈다. 그리고 나에게 가장 좋은 점은 내 서랍을 lib에서 네이티브 DrawerLayout으로 다시 쓰는 것이라고 생각한다.

하지만 비슷한 문제가있는 사람에게 유용 할 수 있습니다. DrawerLayout으로 테스트 프로젝트를 만들었습니다 (Android Studio -> Menudrawer가있는 새 프로젝트).

그리고 나서 같은 문제가 발생했습니다. 잘못된 아이콘. 멋진 애니메이션과 Android 5.0 용 아이콘을보고 싶다면 다음을 사용하고 있는지 확인하십시오.

import android.support.**v7**.app.ActionBarDrawerToggle; 

v7에 기록하십시오. 기본적으로 Fragment 클래스에는 v4 import가 있으며, 그러면 좋은 아이콘이 보이지 않을 것입니다.

또 하나. v7로 변경 한 후 ActionBarDrawerToggle을 새 생성자로 수정해야합니다. 그리고 그게 다야. 새 서랍 아이콘이 표시됩니다.

+2

v4 버전의 ActionBarDrawerToggle은 더 이상 사용되지 않습니다. http://developer.android.com/reference/android/support/v4/app/ActionBarDrawerToggle.html을 참조하십시오. –

+0

@adek - 이것은 안드로이드 API 레벨 10을 실행하는 장치에서도 작동합니다? 또는 이러한 API 수준에서 전환 효과를 별도로 코딩해야합니까? –

+0

@ Rat-a-tat-a-tatRatatouille 좋은 질문입니다. API10에서 작동해야한다고 읽었습니다. 나는 현재 14+와 함께 사용하고 있습니다. – adek

19

먼저 최신 SDK로 업데이트하십시오. Android Studio에서 새 프로젝트를 만든 다음 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 파일에 서랍 열기/닫기 문자열 값을 추가하십시오.

<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를 연장하고 도구 모음을 지원 actionbar로 설정해야합니다.

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

당신의 스타일을 만들기 안드로이드 롤리팝

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

값-21 폴더에 style.xml 파일을 만듭니다.이전 버전의 값 폴더에 XML 파일 다음 안드로이드 롤리팝 귀하의 AndroidManifest.xml은

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

은 다음과 같습니다 참고로

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

전용 : 할 수 있습니다 여기에서 다운로드 완전한 소스 코드 : click here

관련 문제