Android-제목 표시 줄의 뒤로 버튼
많은 앱 (캘린더, 드라이브, Play 스토어)에서 버튼을 탭하고 새로운 활동을 입력하면 제목 표시 줄의 아이콘이 뒤로 버튼으로 바뀌지 만 제가 만들고있는 앱에서는 그렇게하지 않습니다. 이 아이콘을 어떻게 이전 화면으로 되돌릴 수 있습니까?
제목 표시 줄에 뒤로 버튼을 만드는 간단한 두 단계가 있습니다.
먼저 제목 표시 줄에 뒤로 버튼을 추가하려는 활동에서 다음 코드를 사용하여 애플리케이션 아이콘을 클릭 할 수 있도록합니다.
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
위 코드를 추가하면 애플리케이션 아이콘 왼쪽에 뒤로 화살표가 나타납니다.
둘째, 위의 작업을 수행 한 후에도 클릭 이벤트를 활용할 코드를 만들어야합니다. 이렇게하려면 실제로 응용 프로그램 아이콘을 클릭하면 onOptionsItemSelected
메서드가 호출됩니다. 따라서 이전 활동으로 돌아가려면 해당 메소드를 활동에 추가하고 이전 활동으로 돌아가는 Intent
코드를 입력하십시오. 예를 들어,이 활동은 당신이하고자하는 말을하자 돌아갈 이라고합니다 MyActivity
. 다시 돌아가려면 다음과 같이 메소드를 작성하십시오.
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), MyActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
그게 다야!
(안드로이드 개발자 API에서는 매니페스트를 엉망으로 만들고 android:parentActivityName
. 과 같은 것들을 추가 할 것을 권장 합니다. 그러나 그것은 저에게 효과가없는 것 같습니다. 위의 내용은 더 간단하고 신뢰할 수 있습니다.)
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
그리고 당신의 활동에서
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
이 코드를 사용
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
그 후이 코드를 onOptionsItemSelected
메소드에 작성하십시오.
int id = item.getItemId();
if (id==android.R.id.home) {
finish();
}
마침내 액션 바 / 툴바에 뒤로 버튼을 제대로 추가했습니다.
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
1.- AndroidManifest.xml에 활동을 추가하고 메타 데이터를 제공해야합니다.
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
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>
2.- 활동의 onCreate 메서드에 다음 코드를 추가합니다.
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
3.- onOptionsItemSelected를 재정의하고 NavUtils.navigateUpFromSameTask () 정적 메서드를 사용하여 스택을 탐색합니다.
@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);
}
그러나 navigateUpFromSameTask () 사용은 앱이 현재 작업의 소유자 인 경우에만 적합합니다 (즉, 사용자가 앱에서이 작업을 시작 함). 사실이 아니고 활동이 다른 앱에 속한 작업에서 시작된 경우 Up으로 이동하면 앱에 속한 새 작업이 생성되어야하며,이 경우 새 백 스택을 생성해야합니다.
활동이 활동을 확장하는 경우
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
작업이 AppCompatActivity를 확장하는 경우
public class YourActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xxx);
getSupportActionBar().setHomeButtonEnabled(true);
[...]
}
[...]
}
더 이상 할 일이 없습니다. 추가 작업을 참조 하십시오.
[선택 사항] 상위 활동을 명시 적으로 정의하려면 Manifest.xml을 다음과 같이 수정하십시오.
<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.YourActivity "
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>
상위 활동 지정을 참조하십시오.
Google에서 설명하는 가장 간단한 방법과 모범 사례는 다음 과 같습니다 .
1. 다음에서 childActivity의 부모를 추가합니다 AndroidManifest.xml
.
<activity
android:name=".ChildActivity"
android:parentActivityName=".ParentActivity" >
</activity>
2. childActivity에서 뒤로 버튼을 활성화합니다.
myActionOrActionSupportBar.setDisplayHomeAsUpEnabled(true);
나를 위해 일했고, 당신에게도 효과가 있기를 바랍니다.
우선 onCreate 함수에서 다음 줄을 추가하십시오.
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
그런 다음 코드에 다음 함수를 추가하십시오.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Android 스튜디오에서 5.1 용 새 지원 라이브러리를 사용하는 경우 대신 AppCompatActivity에서 사용할 수 있습니다.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.mipmap.ic_arrow_back_white_24dp);
actionBar.setDisplayShowHomeEnabled(true);
건배.
먼저이 코드를 작성해야합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
그런 다음 매니페스트에이 줄을 추가합니다.
<activity android:name=".MainActivity"
android:parentActivityName=".PreviousActivity"></activity>
나는 그것이 작동 할 것이라고 생각한다
활동이 확장되면 다음 과 같이 메서드 AppCompatActivity
를 재정의해야합니다 onSupportNavigateUp()
.
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
...
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
}
onBackPressed()
메서드 에서 논리를 처리 하고 해당 메서드를 호출 onSupportNavigateUp()
하면 전화기의 뒤로 단추와 도구 모음의 화살표가 동일한 작업을 수행합니다.
사용하지 않는 경량 버전 ActionBarActivity
은 여전히 여기에 동일한 bahaviors가 있습니다.
public class ToolbarConfigurer implements View.OnClickListener {
private Activity activity;
public ToolbarConfigurer(Activity activity, Toolbar toolbar, boolean displayHomeAsUpEnabled) {
toolbar.setTitle((this.activity = activity).getTitle());
if (!displayHomeAsUpEnabled) return;
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
toolbar.setNavigationOnClickListener(this);
}
@Override
public void onClick(View v) {
NavUtils.navigateUpFromSameTask(activity);
}
}
사용법 : 넣어 new ToolbarConfigurer(this, (Toolbar) findViewById(R.id.my_awesome_toolbar), true);
에서 onCreate
.
ActionBar를 사용하는 경우 http://developer.android.com/reference/android/app/ActionBar.html#setDisplayHomeAsUpEnabled(boolean) 문서를 읽고 싶을 것입니다.
그런 다음 onOptionsItemSelected (MenuItem) 메서드를 덮어 쓰고 android.R.id.home 이벤트가 들어 오도록해야합니다. 그런 다음 사용자가 작업 표시 줄에서 뒤로 버튼을 클릭했음을 알 수 있습니다.
매니페스트 파일에 아래 언급 된 코드를 추가해야합니다. 뒤로 화살표 기능을 추가 할 활동을 검색합니다. 하나를 찾으면 괜찮거나 활동을 만드십시오.
<activity android:name=".SearchActivity">
</activity>
그런 다음 그 사이에 다음 세 줄의 코드를 추가합니다.
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.raqib.instadate.MainActivity" />
이 코드를 onCreate ()에 추가하는 것을 잊지 마십시오. 뒤로 화살표가 필요한 특정 활동의 방법.
Toolbar toolbar = (Toolbar) findViewById(R.id.searchToolbar);
setSupportActionBar(toolbar);
try{
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}catch(NullPointerException e){
Log.e("SearchActivity Toolbar", "You have got a NULL POINTER EXCEPTION");
}
이것이 제가 문제를 해결 한 방법입니다. 감사.
내 앱에는 언제든지 돌아갈 수있는 3 가지 활동이 있기 때문에 올바른 답을 얻기 위해 몇 가지 답변을 혼합해야했습니다. 활동 1> 활동 2> 활동 3. 내 activity3에서 뭔가를 할 때 뒤로 버튼이 Activity2로 올바르게 백업되었습니다. 그러나 Activity2에서를 사용 finish()
하면 Activity1이 아닌 Activity3으로 돌아갑니다. 그리고 AppCompatActivity를 확장하고 있습니다. 그래서 내 해결책은 다음과 같습니다.
public class Activity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setHomeButtonEnabled(true);
}
}
on AndroidManifest.xml:
<activity android:name=".activities.Activity2"
android:parentActivityName="com.example.appname.activities.Activity1">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.appname.activities.Activity1" />
</activity>
and finally, the action button on my menu (actionbar):
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
...
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
Using NavUtils.navigateUpFromSameTask(this);
worked for me, instead of finish()
.
You can also simply put onBackPressed()
in your onClick listener. This causes your button to act like the default "back/up" buttons in android apps!
It can also be done without code by specifying a parent activity in app manifest If you want a back button in Activity B which will goto Activity A, just add Activity A as the parent of Activity B in the manifest.
Toolbar toolbar=findViewById(R.id.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (getSupportActionBar()==null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home)
finish();
return super.onOptionsItemSelected(item);
}
This is working for me.. Suppose there are two activity (Activityone,Activitytwo)
Inside Activitytwo use this code
@Override
protected void onCreate(Bundle savedInstanceState) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
On Activityone
//when you need to go second activity
startActivity(new Intent(Activityone.this, Activitytwo.class));
This should be included in second activity inside manifest file
<activity android:name=".Activitytwo"
android:parentActivityName=".Activityone"></activity>
And The result would be like this
For kotlin :
override fun onOptionsItemSelected(item: MenuItem): Boolean {
onBackPressed();
return true;
}
The other answers don't mention that you can also set this in the XML of your Toolbar
widget:
app:navigationIcon="?attr/homeAsUpIndicator"
For example:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:navigationIcon="?attr/homeAsUpIndicator"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="@string/title_activity_acoustic_progress" />
Just sharing something that helped me and may be useful for others. Although most of the answers here are correct, by using the getActionBar().setDisplayHomeAsUpEnabled(true);
, this wasn't working for me. The issue I had was that I was trying to create a second Activity manually, but there are more details involved.
What really solved my problem was following Android Developers tutorial (https://developer.android.com/training/basics/firstapp/starting-activity) for creating a second Activity using Android Studio own tools:
Create the second activity
1. In the Project window, right-click the app folder and select New > Activity > Empty Activity.
2. In the Configure Activity window, enter "DisplayMessageActivity" for Activity Name and click Finish (leave all other properties set to the defaults).
Android Studio automatically does three things:
- Creates the DisplayMessageActivity file.
- Creates the corresponding activity_display_message.xml layout file.
- Adds the required <activity> element in AndroidManifest.xml.
This is working for me getSupportActionBar().setDisplayHomeAsUpEnabled(false); enter image description here
참고 URL : https://stackoverflow.com/questions/14545139/android-back-button-in-the-title-bar
'developer tip' 카테고리의 다른 글
Eclipse 시작시 SDK로드 오류 (0) | 2020.08.31 |
---|---|
AdMob 용 기기 ID는 어떻게받을 수 있나요? (0) | 2020.08.31 |
Xcode 8 cocoapods 중단 트랩 : 6 (0) | 2020.08.31 |
비트 연산 및 사용 (0) | 2020.08.31 |
jQuery 추가 페이드 인 (0) | 2020.08.31 |