2014-11-14 1 views
8

문제가 있습니다. support library v7없이 롤리팝 용 앱을 개발 중이므로 ActionBar 표준을 사용해야합니다. 이전에는 actionBar으로 여러 활동에서 setHomeButtonEnabled을 사용했습니다.Lollipop에서 작업 표시 줄의 홈 버튼이 작동하지 않습니다.

어플 리케이션 테마를 재료로 전환했을 때 setHomeButtonEnabled 메소드를 제외한 모든 것이 잘 작동합니다.

제목을 클릭 할 수 없습니다.

도움말!

+0

표준 ActionBar 또는 툴바를 작업 표시 줄로 사용하고 있습니까? – dhuma1981

+0

표준 ActionBar – TommyNecessary

+1

홈 버튼에서 어떤 기능을 기대합니까? 위로 단추 또는 서랍 토글로 작동하려면? 귀하가 사용하고있는 몇 가지 코드와 주제를 게시하십시오. – Simas

답변

17

Google의 직원은 어떤 이유로 인해 이러한 광고가 운영되지 않아야한다고 결정했습니다. 아래에서 확인할 수 있습니다.

ToolbarWidgetWrapper.java

@Override 
public void setHomeButtonEnabled(boolean enable) { 
    // Ignore 
} 

ToolbarActionBar.java

@Override 
public void setHomeButtonEnabled(boolean enabled) { 
    // If the nav button on a Toolbar is present, it's enabled. No-op. 
} 

차이를 액션 바 툴바를 매핑하는 데 사용되는 ToolbarWidgetWrapper는 '홈으로 도구 모음에서 탐색 아이콘을 취급 것처럼 그것은의를 보인다 '위로 표시기'. 따라서 해당 부분 만 클릭 할 수 있습니다. 툴바에서 설정할 수있는 새로운 로고를 클릭 할 수 없습니다. 그들은 심지어 시야를 드러내지 않습니다. private롤스 - 눈. 이 기능은 '업으로 홈'을 사용하지 않거나 다음 당신은 단순히 당신의 android:actionBarStyle 함께 android:displayOptions="homeAsUp"을와의 android:homeAsUpIndicator 속성을 설정할 수 있습니다 홈 당김으로 최대 당김을 결합하고자하는 경우

그래서 주위의 첫 작품이다 .

<style name="AppBaseTheme" parent="@android:style/Theme.Material.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/ActionBar</item> 
</style> 

<style name="ActionBar" parent="@android:style/Widget.Material.Light.ActionBar.Solid"> 
    <item name="android:background">@color/action_bar_bg</item> 
    <item name="android:displayOptions">homeAsUp</item> 
    <item name="android:homeAsUpIndicator">@drawable/app_logo</item> 
</style> 

분명히 동일한 일은 코드로 수행 할 수 있습니다.

getActionBar().setHomeAsUpIndicator(R.drawable.app_logo); 
getActionBar().setDisplayHomeAsUpEnabled(true); 

하지만 이는 실제로 활동이로드되는 동안에는 나타나지 않음을 의미합니다. 테마 옵션을 사용하는 것이 가장 좋습니다.

3 번째 옵션은 새로운 툴바보기의 탐색 버튼을 스타일링하는 것입니다. 어느 android:navigationButtonStyle를 사용하지만, 그들은 그것을 공개하지 않았다고 생각합니다. 저는 이것이 geninue 실수라고 생각합니다. 그러나 이것은 우리 모두가 ActionBar로 가지고 있던 원래의 문제들과 매우 흡사합니다.

그래서 해결할 수 있습니다. 이제 android:toolbarStyleandroid:navigationIcon을 설정해 보겠습니다. 아니. 좋아요. android:actionBarStyleandroid:actionBarTheme을 사용하여 생각할 수있는 다른 모든 대안을 시도해보십시오. 아니. NavIcon이 기본 ActionBar/Activity/Toolbar 엉망으로 덮어 쓰여지고 있기 때문에 기대됩니다. 나는 주변 어디에서나 일할 수있는 방법을 찾으려고 귀찮아한다.

마지막으로 가장 유연한 옵션을 선택하도록합니다. 이전 홈 버튼을 버리고 이전 사용자 정의 탐색 기능을 구현하여 자체 홈 버튼을 사용하십시오. 즉, 이미 사용자 정의 탐색을 사용하는 경우 탐색을이 경로와 결합해야합니다.

값 -v21/스타일.XML

<style name="AppBaseTheme" parent="@android:style/Theme.Material.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/ActionBar</item> 
</style> 

<style name="ActionBar" parent="@android:style/Widget.Material.Light.ActionBar.Solid"> 
    <item name="android:background">@color/action_bar_bg</item> 
    <item name="android:displayOptions">showCustom</item> 
    <item name="android:customNavigationLayout">@layout/nav_layout</item> 
</style> 

레이아웃-V21은/nav_layout.xml 액티비티/BaseActivity 클래스에서

<?xml version="1.0" encoding="utf-8"?> 
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/home" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="start|center_vertical" 
    android:layout_marginEnd="8dp" 
    android:paddingTop="16dp" 
    android:paddingBottom="16dp" 
    android:adjustViewBounds="true" 
    android:background="?android:attr/actionBarItemBackground" 
    android:contentDescription="@string/ab_home_description" 
    android:src="@drawable/app_logo" 
    android:scaleType="fitCenter" 
    /> 

는 다음을 추가합니다. 그리고 이것은 홈 버튼을 가짜로 만들 것입니다.

@Override 
public boolean onPrepareOptionsMenu(final Menu menu) 
{ 
    prepareOptionsMenuLollipop(menu); 
    return super.onPrepareOptionsMenu(menu); 
} 

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
private void prepareOptionsMenuLollipop(Menu menu) 
{ 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ 
     final MenuItem homeItem = menu.add(Menu.NONE, android.R.id.home, 
      Menu.NONE, R.string.ab_home_description); 
     homeItem.setVisible(false); 
     View homeView = getActionBar().getCustomView().findViewById(android.R.id.home); 
     homeView.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) 
      { 
       getWindow().getCallback().onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, homeItem); 
      } 
     }); 
    } 
} 
+1

어쩌면 그들은 또 다른 몇 개의 테마를 추가하고 몇 가지 역방향 이중 후방 종속성 삽입 된 상속 해상도 값 (장치 독립적)을 추가하여 몇 가지 특성을 추가했을 수 있습니다. 그것은'@ hide'라고 꼭 확인하십시오! 필리스틴을 들여 보내고 싶지 않아! 그들은 물건을 엉망으로 만들거야. – nmr

+1

appcompat의'getSupportActionBar()'와 정확히 같은 문제 - com.android.support:appcompat-v7:23.1.1 ' – kellogs

+0

이것들은 iOS에서 저를 괴롭히는 것과 같은 문제입니다. 이 동작은 Android 버전에서도 테스트하기가 매우 어렵습니다. 이 방법으로 DrawerLayout과 ActionBarDrawerToggle을 사용하는 것은 어떻습니까? 변경없이 작동합니까? –

관련 문제