작업 표시 줄에 뒤로 버튼 표시


181

나는 표시하기 위해 노력하고있어 Back button온을 Action bar이전 페이지 / 활동을 이동하거나 메인 페이지로 (제 1 개구) 할 수 있습니다. 그리고 나는 그것을 할 수 없습니다.

내 코드.

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);

코드는입니다 onCreate.


19
사용 : getSupportActionBar (). setDisplayHomeAsUpEnabled (true);
Sukitha Udugamasooriya 2016 년

@SukithaUdugamasooriya 감사합니다
Sardorbek Rkh

답변:


207

음 이것은 뒤로 버튼을 표시하는 간단한 것입니다.

actionBar.setDisplayHomeAsUpEnabled(true);

그런 다음 onOptionsItemSelected에서 back 이벤트를 사용자 정의 할 수 있습니다

case android.R.id.home:
this.finish();
return true;

난 이미 메뉴 옵션을 클릭 홈 ID 나던 작업 리디렉션 ID를 나열하는 액션 나쁜 오전에 메뉴가 있기 때문에 나는, onOptionsItemSelected (MenuItem의 항목)의 내부에 위의 라인을 추가

이상한 동작이 발생하는 경우 (예 : 조각의 뒤로 버튼 (R.id.home)을 사용하고 활동을 종료 함)이 활동에 "android : noHistory"가 설정되어 있지 않은지 확인하십시오. 심지어 조각에서 활동의 "개요"로 돌아가더라도 완료됩니다.
Igor

2
R.id.home 버튼이 작동하도록 AndroidMenifest.xml에서 상위 활동을 설정했는지 확인하십시오.
Leap Hawk

192

onSupportNavigateUp()가장 최선의 방법 이라고 생각 합니다. 아래 단계를 확인하십시오. 1 단계는 필수이며 2 단계는 대안이 있습니다.

1 단계 뒤로 버튼 표시 : 뒤로 버튼onCreate() 을 표시하는 방법 으로이 줄을 추가하십시오 .

assert getSupportActionBar() != null;   //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true);   //show back button

백 클릭의 2 단계 구현 : 이 메소드 재정의

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

그것을 먹으 렴 당신은 완료
또는 2 단계 대안 : 당신은 매니페스트 파일의 활동 메타를 추가 할 수 있습니다

<meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="MainActivity" />

편집 : 당신이 사용하지 않는 경우 AppCompat사용하지 않는 다음 활동을 support단어를, 당신은 사용할 수 있습니다

getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`

// And override this method
@Override 
public boolean onNavigateUp(){ 
     finish(); 
     return true; 
}

의견을 보내 주신 @atariguy에게 감사드립니다.


2
이 솔루션은 부모 활동으로 데이터를 다시 보내야하거나 부모 활동에서 EditText 값을 유지하려는 경우에 효과적입니다. onOptionsItemSelected솔루션을 시도 했지만 실패했습니다.
weeix

3
최고의 솔루션 +10.
Satheeshwaran

3
작업 표시 줄에 지원 라이브러리를 사용하지 않는 경우 다음과 같이 수정하십시오. getActionBar().setDisplayHomeAsUpEnabled(true); @Override public boolean onNavigateUp(){ finish(); return true; }
atariguy

1
경이로운. +1. 단순한. 우아한. 아름다운. :)
Rohit Kumar

1
당신의 도움을 주셔서 감사합니다. 매니페스트를 사용하면 작동하지 않지만 작동하는 코드를 사용하여
santosh

70

마법은에서 발생합니다 onOptionsItemSelected.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; go home
            Intent intent = new Intent(this, HomeActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

1
제 경우에는 onOptionsItemSelected (MenuItem item) 이벤트가없는 페이지에 뒤로 버튼을 추가하고 싶습니다 ... 다른 해결책이 있습니까 ??
Vidhi

1
getActionBar().setDisplayHomeAsUpEnabled(true);show back 버튼을 위해 onCreateMethod를 먼저 추가해야 합니다.
aletede91

1
이 방법을 사용하면 이전 활동을 다시 한 번 더 확보해도 다시 돌아 가지 않고 오랫동안 계속하면 스택 오버플로가 발생할 때까지 항상 앞뒤로 이동한다고 생각합니다. Igor의 대답이 맞다고 생각합니다. finish () 로이 활동을 중지하고 프레임 워크가 이전 활동 인스턴스 실행으로 돌아갈 수있게하십시오.
Reijo Korhonen

2
this.onBackPressed();사용자가 뒤로 버튼을 클릭 할 때 방법을 사용 하십시오.
CaptRisky

47

공식 솔루션

이 두 코드 스 니펫을 SubActivity에 추가하십시오.

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

메타 데이터 및 parentActivity를 추가하여 더 낮은 SDK를 지원하도록 나타냅니다.

 <application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.SubActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

여기를 참조하십시오 : http://developer.android.com/training/implementing-navigation/ancestral.html


5
참고 : 이전 버전과의 호환성을 위해 지원 라이브러리를 사용하는 경우 "getActionBar ()"대신 "getSupportActionBar ()"를 사용해야합니다. 이것은 가장 완전하고 공식적인 답변입니다.
Christopher Bull

32

이 줄을 onCreate ()에 추가하십시오.

android.support.v7.app.ActionBar actionBar = getSupportActionBar();
   actionBar.setHomeButtonEnabled(true);
   actionBar.setDisplayHomeAsUpEnabled(true);

그리고 onOptionItemSelected에서

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                //Write your logic here
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

희망이 당신을 도울 것입니다 ..!


27

이 코드를 사용해보십시오. 뒤로 버튼이 필요한 경우에만 고려하십시오.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //YOUR CODE
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //YOUR CODE
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

17

onCreate방법 추가 :

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

AndroidManifest.xml상위 활동 (작업 표시 줄의 뒤로 단추를 누르면 호출되는 활동) 에서 정의하는 동안 :

당신에 <activity>매니페스트에 정의 라인을 추가합니다 :

android:parentActivityName="com.example.activities.MyParentActivity"

4.0 이전 장치를 지원하려는 경우 Manifest 코드 만 입력하면됩니다. 첫 번째 코드 비트는 현재 라이브러리에 더 나은 솔루션입니다.
Louie Bertoncin 2016 년

8

조금 늦었다는 것을 알고 있지만 문서를 따르면이 문제를 해결할 수있었습니다. 직접 .

메타 데이터 태그를 추가하여 AndroidManifest.xml(시스템에서 알 수 있도록)

 <activity
        android:name=".Sub"
        android:label="Sub-Activity"
        android:parentActivityName=".MainChooser"
        android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainChooser" />
    </activity>

그런 다음 MainActivity

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_child);
 
    // my_child_toolbar is defined in the layout file 
    Toolbar myChildToolbar =
        (Toolbar) findViewById(R.id.my_child_toolbar);
    setSupportActionBar(myChildToolbar);
 
    // Get a support ActionBar corresponding to this toolbar 
    ActionBar ab = getSupportActionBar();
 
    // Enable the Up button 
    ab.setDisplayHomeAsUpEnabled(true);
    } 

그리고, 당신은 모두 설정됩니다!

출처 : Android 개발자 문서


6

위의 많은 유용한 솔루션을 알고 있지만 이번에는이 기사 (sdk 23이있는 현재 Android Studio 2.1.2)를 읽었을 때 위의 방법 중 일부가 작동하지 않습니다.

하위 활동에 대한 내 솔루션은 MapsActivity입니다.

먼저 parentActivity를 추가해야합니다.

AndroidManifest.xml

이처럼 :

<application ... >
    ...
    <!-- Main activity (which has no parent activity) -->
    <activity
        android:name="com.example.myapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        .....
        android:parentActivityName=".MainActivity" >
        <!-- Support Parent activity for Android 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myapp.MainActivity" />
    </activity>
</application>

둘째, 하위 활동이 AppCompatActivityFragmentActivity가 아닌 확장되는지 확인하십시오 .

셋째, 재정의 onOptionsItemSelected()방법

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon action bar is clicked; go to parent activity
                this.finish();
                return true;
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

이것이 도움이되기를 바랍니다!


4

onCreate ()에서 이것을 시도하십시오

 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true);

클릭 이벤트의 경우

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon in action bar clicked; goto parent activity.
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

4

이를 위해 두 단계 만 거치면됩니다.

1 단계 : 태그 AndroidManifest.xml에서이 매개 변수로 이동하여 추가 <activity>-android:parentActivityName=".home.HomeActivity"

예:

<activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

2 단계 :에서가 ActivityDetail당신을 추가 action이전 페이지 / 활동

예:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

4

onCreate 메소드 쓰기에서

Toolbar toolbar = findViewById(R.id.tool);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
    finish();
}

그리고 이것은 xml 파일입니다.

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:id="@+id/tool">

styles.xml에서 다음으로 변경하십시오.

Theme.AppCompat.Light.NoActionBar

이것이 우리가해야 할 전부입니다.


4

이것은 간단하고 매우 잘 작동합니다.

이것을 onCreate () 메소드 안에 추가하십시오

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

이것을 oncreate () 메소드 외부에 추가하십시오.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

3

귀하의 onCreate()방법 에서이 줄을 추가하십시오

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

동일한 액티비티에서이 메소드를 추가하여 버튼 클릭을 처리합니다.

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

2

이런 식으로 해결

@Override
public boolean  onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onBackPressed(){
    Intent backMainTest = new Intent(this,MainTest.class);
    startActivity(backMainTest);
    finish();
}

1

작업 코드가 화면으로 돌아갑니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

    case android.R.id.home:

        Toast.makeText(getApplicationContext(), "Home Clicked",
                Toast.LENGTH_LONG).show();

        // go to previous activity
        onBackPressed();

        return true;

    }

    return super.onOptionsItemSelected(item);
}

1
 public void initToolbar(){
       //this set back button 
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
       //this is set custom image to back button
       getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image);
}


//this method call when you press back button
@Override
public boolean onSupportNavigateUp(){
    finish();
    return true;
}

1
ActionBar actionBar=getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

@Override
public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) {
        case android.R.id.home: 
            onBackPressed();
            return true;
        }

    return super.onOptionsItemSelected(item);
}

1

대답하기에는 너무 늦을 수 있지만 제 의견으로는 더 짧고 기능적인 해결책이 있습니다.

// Inside your onCreate method, add these.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);

// After the method's closing bracket, add the following method exactly as it is and voiulla, a fully functional back arrow appears at the action bar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

1

oncreate ()에서; 이 줄을 쓰십시오->

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

그런 다음 해당 클래스에서 아래 메소드를 구현하십시오.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        // app icon in action bar clicked; go home
      onBackPressed();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

1

Manifest.xml

<activity
            android:name=".Activity.SecondActivity"
            android:label="Second Activity"
            android:parentActivityName=".Activity.MainActivity"
            android:screenOrientation="portrait"></activity>

1

Kotlin에 작업 표시 줄 뒤로 버튼을 표시 하려면 두 가지 방법이 있습니다.

1. Android에서 제공하는 기본 작업 표시 줄 사용-활동에 작업 표시 줄이있는 테마를 사용해야합니다 (예 : Theme.AppCompat.Light.DarkActionBar).

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val actionBar = supportActionBar
    actionBar!!.title = "your title"
    actionBar.setDisplayHomeAsUpEnabled(true)
    //actionBar.setDisplayHomeAsUpEnabled(true)
}

override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}

2. 나만의 액션 바 디자인 -기본 액션 바 비활성화-예 : Theme.AppCompat.Light.NoActionBar-activity.xml에 레이아웃 추가

    <androidx.appcompat.widget.Toolbar
     android:id="@+id/main_toolbar"
     android:layout_width="match_parent"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toTopOf="parent">

     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:layout_editor_absoluteX="16dp">

         <TextView
             android:id="@+id/main_toolbar_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="Your Title"
             android:textSize="25sp"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

     </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.appcompat.widget.Toolbar>
  • onCreate
override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)

     setSupportActionBar(findViewById(R.id.main_toolbar))
 }
  • 나만의 버튼 만들기
<?xml version="1.0" encoding="utf-8"?>
<menu
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto" >

 <item
     android:id="@+id/main_action_toolbar"
     android:icon="@drawable/ic_main_toolbar_item"
     android:title="find"
     android:layout_width="80dp"
     android:layout_height="35dp"
     app:actionLayout="@layout/toolbar_item"
     app:showAsAction="always"/>

</menu>
  • YourActivity.kt에서
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
     menuInflater.inflate(R.menu.main_toolbar_item, menu)

     leftToolbarItems = menu!!.findItem(R.id.main_action_toolbar)
     val actionView = leftToolbarItems.actionView
     val badgeTextView = actionView.findViewById<TextView>(R.id.main_action_toolbar_badge)
     badgeTextView.visibility = View.GONE

     actionView.setOnClickListener {
         println("click on tool bar")
     }
     return super.onCreateOptionsMenu(menu)
 }

0

onCreate 함수에 아래 코드를 추가하십시오.

getSupportActionBar (). setDisplayHomeAsUpEnabled (true);

그런 다음 재정의하십시오. @Override public boolean onOptionsItemSelected (MenuItem item) {onBackPressed (); true를 반환; }


0

업데이트 된 버전에서 getActionBar ()가 작동하지 않습니다!

대신이 방법으로이 작업을 수행 할 수 있습니다

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

안드로이드 제목 표시 줄에 다시 버튼을 추가 하면 2020 년에 도움이됩니다.


마지막 몇 가지 답변은 모두 동일한 사이트에 연결됩니다. 어떤 방식 으로든 해당 사이트와 연결 / 관련되어 있습니까? 당신이 제휴하는 경우, 당신 은 게시물에 그 제휴를 공개해야합니다 . 가입을 공개하지 않으면 스팸으로 간주됩니다. 참조 : "좋은"자기 홍보를 의미한다 무엇? , 자체 프로모션에 대한 몇 가지 팁과 조언 , 스택 오버플로에 대한 "스팸"의 정확한 정의는 무엇입니까? , 무엇을 스팸으로 만드는가 .
Makyen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.