툴바에 뒤로 화살표 표시
응용 프로그램 에서에서 ActionBar
로 마이그레이션 중입니다 Toolbar
. 그러나 내가 Toolbar
했던 것처럼 뒤로 화살표에 클릭 이벤트를 표시하고 설정하는 방법을 모르겠습니다 Actionbar
.
로 ActionBar
전화 mActionbar.setDisplayHomeAsUpEnabled(true)
합니다. 그러나 이와 비슷한 방법은 없습니다.
누구 든지이 상황에 직면하여 어떻게 든 해결할 수있는 방법을 찾았습니까?
를 사용하는 경우 ActionBarActivity
Android에 Toolbar
다음 ActionBar
과 같이 사용하도록 지시 할 수 있습니다 .
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
그런 다음
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
작동합니다. 당신은 또한 첨부 된 조각에서 ActionBarActivities
이것을 사용할 수 있습니다 :
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
사용하지 ActionBarActivities
않거나 뒤로 화살표를 Toolbar
설정하지 않은 SupportActionBar
경우 다음을 사용할 수 있습니다.
mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//What to do on back clicked
}
});
를 사용하는 경우 android.support.v7.widget.Toolbar
다음 코드를 추가해야합니다 AppCompatActivity
.
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
나는 많은 답변을 보았지만 여기에 언급되지 않은 것이 있습니다. API 8 이상에서 작동합니다.
public class DetailActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
// toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// add back arrow to toolbar
if (getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle arrow click here
if (item.getItemId() == android.R.id.home) {
finish(); // close this activity and return to preview activity (if there is any)
}
return super.onOptionsItemSelected(item);
}
그것을 달성하는 많은 방법이 있습니다, 여기 내가 가장 좋아하는 것이 있습니다 :
나열한 것:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="?attr/homeAsUpIndicator" />
활동:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// back button pressed
}
});
툴바 setNavigationIcon 메소드를 사용할 수 있습니다. 안드로이드 닥
mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleOnBackPress();
}
});
사용자 정의를 작성하지 않으려면 Toolbar
다음과 같이하십시오.
public class GalleryActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setTitle("Select Image");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
}
당신 안에 AndroidManifest.xml
<activity
android:name=".GalleryActivity"
android:theme="@style/Theme.AppCompat.Light">
</activity>
당신은이를 넣을 수 있습니다 android:theme="@style/Theme.AppCompat.Light"
로 <aplication>
모든 활동에 적용을 위해, 태그
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.back_arrow); // your drawable
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed(); // Implemented by activity
}
});
API 21 이상 android:navigationIcon
<android.support.v7.widget.Toolbar
android:navigationIcon="@drawable/back_arrow"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
Google 개발자 문서 에서이 방법을 사용했습니다 .
@Override
public void onCreate(Bundle savedInstanceState) {
...
getActionBar().setDisplayHomeAsUpEnabled(true);
}
널 포인터 예외가 발생하면 테마에 따라 달라질 수 있습니다. 매니페스트에서 다른 테마를 사용해 보거나 대신 사용하십시오.
@Override
public void onCreate(Bundle savedInstanceState) {
...
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
그런 다음 매니페스트에서 현재 활동에 대한 부모 활동을 설정합니다.
<activity
android:name="com.example.myapp.MyCurrentActivity"
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.myapp.MyMainActivity" />
</activity>
이것이 당신을 도울 수 있기를 바랍니다!
당신이 경우 한 사용 AppCompatActivity
하고 자동하지 싶었 기 때문에, 사용하지 않을의 경로 아래로 갔다 ActionBar
가 제공하는 당신이 밖으로 분리를 원하기 때문에, Toolbar
때문에 당신의 재료 설계의 요구와의 CoordinatorLayout
또는 AppBarLayout
, 다음, 이것을 고려 :
당신은 여전히을 사용할 수 있으며 AppCompatActivity
, <android.support.v7.widget.Toolbar>
XML에서을 사용할 수 있도록 사용을 중단 할 필요는 없습니다 . 다음과 같이 작업 표시 줄 스타일 을 끄십시오 .
먼저, 당신은 당신처럼하는 NoActionBar 테마 중 하나에서 스타일을 도출 styles.xml
, 내가 사용 Theme.AppCompat.Light.NoActionBar
과 같이 :
<style name="SuperCoolAppBarActivity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/primary_dark</item>
...
...
</style>
앱 매니페스트에서 방금 정의한 자식 스타일 테마를 다음과 같이 선택하십시오.
<activity
android:name=".activity.YourSuperCoolActivity"
android:label="@string/super_cool"
android:theme="@style/SuperCoolAppBarActivity">
</activity>
Activity Xml에서 툴바가 다음과 같이 정의 된 경우 :
...
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
/>
...
그런 다음이 부분이 중요 합니다. 지원 작업 표시 줄을 확장중인 AppCompatActivity로 설정 하면 XML의 도구 모음 이 작업 표시 줄이됩니다. 사용자 지정 클릭 핸들러 등을 추가하지 않고도 메뉴, 자동 활동 제목, 항목 선택 처리 등과 같이 ActionBar가 허용하는 많은 작업을 간단하게 수행 할 수 있기 때문에 이것이 더 좋은 방법이라고 생각합니다.
활동의 onCreate 재정의에서 다음을 수행하십시오.
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_super_cool);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Your toolbar is now an action bar and you can use it like you always do, for example:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
툴바에 간단하고 쉬운 뒤로 버튼 표시
이 코드를 onCreate 메소드에 붙여 넣기
if (getSupportActionBar() != null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
이 재정의 메소드를 onCreate 메소드 외부에 붙여 넣기
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()== android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
MyActivity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
toolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(arrow -> onBackPressed());
}
에서 AppCompatActivity
예를 들어, 당신은 할 수
public class GrandStatActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grand_stat);
}
@Override
public void onResume() {
super.onResume();
// Display custom title
ActionBar actionBar = this.getSupportActionBar();
actionBar.setTitle(R.string.fragment_title_grandstats);
// Display the back arrow
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
// Back arrow click event to go to the parent Activity
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
}
쉽게 할 수 있습니다.
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
크레딧 : https://freakycoder.com/android-notes-24-how-to-add-back-button-at-toolbar-941e6577418e
뒤로 버튼을 추가하려는 활동의 매니페스트 파일에서 android : parentActivityName 속성을 사용합니다 .
<activity
android:name=".WebActivity"
android:screenOrientation="portrait"
android:parentActivityName=".MainActivity"
/>
PS 이 속성은 API 레벨 16에서 도입되었습니다.
이것은 완벽하게 작동했습니다
public class BackButton extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_box);
Toolbar chatbox_toolbar=(Toolbar)findViewById(R.id.chat_box_toolbar);
chatbox_toolbar.setTitle("Demo Back Button");
chatbox_toolbar.setTitleTextColor(getResources().getColor(R.color.white));
setSupportActionBar(chatbox_toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
chatbox_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Define Back Button Function
}
});
}
}
코 틀린에서는
private fun setupToolbar(){
toolbar.title = getString(R.string.YOUR_TITLE)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
}
// don't forget click listener for back button
override fun onSupportNavigateUp(): Boolean {
onBackPressed()
return true
}
이것을 레이아웃 폴더의 액티비티 xml에 추가하십시오.
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/prod_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
툴바를 클릭 가능하게 만들고 onCreate 메소드에 다음을 추가하십시오.
Toolbar toolbar = (Toolbar) findViewById(R.id.prod_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
당신이 사용하는 경우 DrawerLayout 와 ActionBarDrawerToggle을 다음 보여 뒤로 대신 버튼 메뉴 , 당신이 당신의 활동에이 코드를 추가 할 필요가 버튼 (및 viceversa에를)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.application_name, R.string.application_name);
mDrawerLayout.addDrawerListener(mDrawerToggle);
mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_arrow_back_white_32dp);
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed(); // Or you can perform some other action here when Back button is clicked.
}
});
mDrawerToggle.syncState();
// ...
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle.onOptionsItemSelected(item))
return true;
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
// ...
}
return super.onOptionsItemSelected(item);
}
public void showBackInToolbar(boolean isBack) {
// Remove next line if you still want to be able to swipe to show drawer menu.
mDrawerLayout.setDrawerLockMode(isBack ? DrawerLayout.LOCK_MODE_LOCKED_CLOSED : DrawerLayout.LOCK_MODE_UNLOCKED);
mDrawerToggle.setDrawerIndicatorEnabled(!isBack);
mDrawerToggle.syncState();
}
따라서 메뉴 버튼 대신 뒤로 버튼 을 표시해야 할 경우 showBackInToolbar (true)를 호출 하고 메뉴 버튼 이 필요한 경우 showBackInToolbar (false)를 호출 하십시오 .
여기 에서 뒤로 화살표 (ic_arrow_back_white_32dp) 를 생성 하고 클립 아트 섹션 에서 arrow_back 을 검색 할 수 있습니다 ( 8dp 패딩에서 기본 32dp 사용). 원하는 색상을 선택하십시오.
언제든지 a Relative layout
또는 a Linear Layout
를 추가하고 원하는대로 Toolbar
뒤로 아이콘 또는 닫기 아이콘의 이미지보기를 툴바의 아무 곳에 나 배치 할 수 있습니다
예를 들어 툴바에서 상대적 레이아웃을 사용했습니다.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_top"
android:layout_width="match_parent"
android:layout_height="35dp"
android:minHeight="?attr/actionBarSize"
android:nextFocusDown="@id/netflixVideoGridView"
app:layout_collapseMode="pin">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Myflix"
android:textAllCaps="true"
android:textSize="19sp"
android:textColor="@color/red"
android:textStyle="bold" />
<ImageView
android:id="@+id/closeMyFlix"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
app:srcCompat="@drawable/vector_close" />
</RelativeLayout>
</android.support.v7.widget.Toolbar>
그리고 다음과 같이 보입니다 :
해당 이미지보기에서 클릭 리스너를 활동 또는 이와 같은 조각으로 추가 할 수 있습니다.
closeMyFlix.setOnClickListener({
Navigator.instance.showFireTV( activity!!.supportFragmentManager)
})
Kotlin은 다음과 같이되었습니다.
Xml :
<include
android:id="@+id/tbSignToolbar "
layout="@layout/toolbar_sign_up_in"/>
당신의 활동에서 :-
setSupportActionBar(tbSignToolbar as Toolbar?)//tbSignToolbar :id of your toolbar
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
SupportActionBar로 설정되지 않은 툴바에 뒤로 화살표를 표시하려면 다음을 수행하십시오.
(코트 린)
val resId = getResIdFromAttribute(toolbar.context, android.R.attr.homeAsUpIndicator)
toolbarFilter.navigationIcon = ContextCompat.getDrawable(toolbar.context, resId)
toolbarFilter.setNavigationOnClickListener { fragmentManager?.popBackStack() }
속성에서 입술을 얻으려면 :
@AnyRes
fun getResIdFromAttribute(context: Context, @AttrRes attr: Int): Int {
if (attr == 0) return 0
val typedValueAttr = TypedValue()
context.theme.resolveAttribute(attr, typedValueAttr, true)
return typedValueAttr.resourceId
}
JetPack Navigation을 사용하는 경우
MainActivity의 레이아웃은 다음과 같습니다.
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolBar"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.appcompat.widget.Toolbar>
<fragment
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintTop_toBottomOf="@id/toolBar"
app:layout_constraintBottom_toTopOf="parent"
app:navGraph="@navigation/nav_graph"/>
Activity 클래스의 onCreate ()에서 아래와 같이 활동에 툴바를 설정하십시오.
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return
val navController = navHostFragment.findNavController()
val toolBar = findViewById<Toolbar>(R.id.toolBar)
setSupportActionBar(toolBar) // To set toolBar as ActionBar
setupActionBarWithNavController(navController)
setupActionBarWithNavController (navController) 필요한 경우 툴바에 뒤로 버튼을 만들고 backButton 기능을 처리합니다. CustomBack 기능을 작성해야하는 경우 단편 onCreate () 메소드에서 아래와 같이 콜백을 작성하십시오.
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
// Handle the back button event
}
설명서에서 : https://developer.android.com/guide/navigation/navigation-custom-back
참고 URL : https://stackoverflow.com/questions/26651602/display-back-arrow-on-toolbar
'Programming' 카테고리의 다른 글
Java에서 파일의 파일 확장자를 얻으려면 어떻게합니까? (0) | 2020.02.16 |
---|---|
LINQ를 사용하여 컬렉션의 모든 개체 업데이트 (0) | 2020.02.16 |
각도 지시문-컴파일, 컨트롤러, 사전 링크 및 사후 링크 사용시기 및 방법 [폐쇄] (0) | 2020.02.16 |
사용자 에이전트 스타일 시트 란 무엇입니까 (0) | 2020.02.16 |
Google CDN에서 jQuery UI CSS 다운로드 (0) | 2020.02.16 |