我正在将我的应用程序从ActionBar
迁移到Toolbar
,但是我不知道如何在Toolbar
上显示并设置返回箭头的单击事件,就像我在Actionbar
上做的那样。
使用Actionbar
,我调用mActionbar.setDisplayHomeAsUpEnabled(true)
,但没有类似的方法。
有人曾经遇到这种情况并找到了解决办法吗?
我正在将我的应用程序从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
,或者您想在未设置为您的SupportActionBar
的Toolbar
上获取返回箭头,则可以使用以下内容:
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;
}
R.drawable.abc_ic_ab_back_mtrl_am_alpha
和R.drawable.ic_action_back
。 - Henrique de Sousatoolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
- Bolein95我看到很多答案,但我这个答案之前没有提到过。它适用于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);
}
onOptionItemSelected()
з‚№иµћгЂ‚иї™зЇ‡е›ћз”е®Њж€ђдє†MrEngineer13没有提及的部分。 - Atul有很多方法可以实现这个目标,以下是我最喜欢的方法:
布局:
<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
}
});
setNavigationOnClickListener()
þÜäµø┐õ╗úµû╣µíêµÿ»Õ£¿onOptionsItemSelected()
õ©¡µÀ╗Õèácase android.R.id.home:
ÒÇé - eugenecase android.R.id.home
对我没用。所以经过一番搜索,你的答案解决了我的问题。谢谢。 - deejay您可以使用工具栏的setNavigationIcon方法。 Android文档
mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleOnBackPress();
}
});
setNavigationOnClickListener()
е·ІеңЁAPIзә§еҲ«21еҸҠд»ҘдёҠж·»еҠ гҖӮ - Ali Mehrpour如果您不想创建自定义的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"
放置在<application>
标签中,这样就可以应用于所有活动。
if (item.getItemId() == android.R.id.home)
。 - Adizbek Ergashev 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"/>
androidx.appcompat.app.AppCompatActivity
,只需要使用以下代码:Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
那么只需要在 Manifest.xml
中定义父 Activity。
<activity
android:name=".MyActivity"
...>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ParentActivity" />
</activity>
如果您正在使用工具栏(Toolbar)
,并且想要自定义行为,请使用:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:navigationIcon="?attr/homeAsUpIndicator"
.../>
而在你的Activity中:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//....
}
});
我使用了Google Developer 文档中的这种方法:
@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>
我希望这能对你有所帮助!
getSupportActionBar()
都起作用了。谢谢! - Rick如果您曾经使用过 AppCompatActivity
,并且因为不想自动获取它提供的 ActionBar
,而希望将 Toolbar
分离出来,同时符合 Material Design 需求和 CoordinatorLayout
或 AppBarLayout
的要求,那么请考虑以下内容:
您仍然可以使用 AppCompatActivity
,无需停止使用它以便在xml中使用<android.support.v7.widget.Toolbar>
。只需按照以下方式关闭操作栏 样式:
首先,在您的 styles.xml
中从 NoActionBar 主题中派生一个您喜欢的样式,我使用了 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允许的事情,比如菜单、自动活动标题、项目选择处理等,而不需要添加自定义的单击处理程序等。
在你的Activity的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);
}
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
}