2017-11-01 1 views
0

뒤로 버튼을 표시하는 툴바가있는 활동이 있습니다.Android 툴바의 애니메이션 뒤로 버튼

<android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar_about" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="?attr/actionBarTheme" 
     app:title="@string/app_name" 
     /> 

백 버튼은 다음과 같이 사용할 수 있습니다 : 활동의 부모가 매니페스트

에 정의되어

Intent intent = new Intent(this, AboutActivity.class); 
startActivity(intent); 

:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_about); 
setSupportActionBar(toolbar); 
//noinspection ConstantConditions 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setDisplayShowHomeEnabled(true); 

내가 이렇게 내 주요 활동으로이 활동을 호출

<activity android:name=".AboutActivity"> 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value=".EntryActivity" /> 
</activity> 

So 툴바에서 뒤로 버튼을 사용할 때 전환 애니메이션이 잘못되었다는 것을 제외하고는 모든 것이 잘 작동합니다.

활동을 열면 오른쪽에서 슬라이드됩니다.

휴대 전화의 실제 뒤로 버튼을 누르면 다시 오른쪽으로 밀려납니다. 이 말이 맞습니다.

그러나 툴바의 뒤로 버튼을 사용하면 왼쪽으로 미끄러집니다. 이것은 틀린 것 같습니다. 이것을 어떻게 바꿀 수 있습니까? 그러면 물리적 인 뒤로 버튼의 동작이 복제됩니까?

+0

실제로 매니페스트에서 상위 액티비티를 정의해야합니까? 이 말은 내 측면에서 계층 형 네비게이션을 지원하는지 아니면'EntryActivity'가 아닌 곳에서'AboutActivity'를 열 수 있습니까? –

+0

음, 부모를 정의하지 않으면 버튼이 아무 것도하지 않습니다. 나는 그 두 가지 활동 만 할 수 있으므로 다른 활동에서 활동을 불러올 수 있습니다. –

답변

3

작업 표시 줄 위로 버튼을 누르면 AppCompatActivityonMenuItemSelected() 호출에서이 버튼을 감지하고 onSupportNavigateUp()을 호출합니다. 이 메서드는 "부모 작업"Intent을 확인한 다음이를 사용하여 위로 이동합니다. 이전 활동을 (다시) 열기 위해 Intent을 사용하기 때문에 "새"화면을 여는 것과 동일한 애니메이션을 사용합니다.

당신이 "네비게이션"패턴 (당신이 좋아하지 않는 것처럼 들리는 특별한 niceties에 대해 신경 쓰지 않는다고 생각하면, 코멘트가 당신에게 옆쪽 네비게이션이 없다고 믿을 수 있었고 첫 번째 활동이 아닌 다른 곳에서 두 번째 활동으로 이동) onSupportNavigateUp() 메소드를 재정 의하여이 내장 된 "위로"동작을 단계별로 수행 할 수 있습니다.

@Override 
public boolean onSupportNavigateUp() { 
    finish(); 
    return true; 
} 

이 (내가 전에 말했듯이 같은) 실행 바 위로 버튼을 누르면 항상 단순히 finish()은 모든 스마트 내장 된 "최대"행동을 놓치게 때문에, 활동을 말이지 것을 의미합니다 ...하지만 당신이 didn를 어쨌든 그걸 원하지 않아.

onOptionsItemSelected()의 Actionbar Up 버튼도 처리 할 수 ​​있지만 시스템의 동작을 가로 채고 있다는 것이 조금 더 분명하다고 생각하기 때문에 다른 방식을 선호합니다. 지금은 사용하지 않는 때문에 장소에 둘 중 하나와

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     finish(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

, 당신은 매니페스트에서 "부모"정의를 제거 할 수 있습니다.

+0

자세한 답장을 보내 주셔서 감사합니다. 나에게 onOptionsItemSelected()도 관련이 없지만 툴바가 메뉴를 처리해야하기 때문에 발생합니다. 하지만 onSupportNavigateUp() override가 내 유스 케이스에 충분하다. 다시 한번 감사드립니다. –

관련 문제