我正在应用程序中从ActionBar迁移到工具栏。 但我不知道如何显示和设置单击事件在工具栏上的后退箭头,就像我在动作栏上做的那样。
使用ActionBar,我调用mActionbar.setDisplayHomeAsUpEnabled(true)。 但是没有类似的方法。
有没有人遇到过这种情况,并以某种方式找到了解决它的方法?
我正在应用程序中从ActionBar迁移到工具栏。 但我不知道如何显示和设置单击事件在工具栏上的后退箭头,就像我在动作栏上做的那样。
使用ActionBar,我调用mActionbar.setDisplayHomeAsUpEnabled(true)。 但是没有类似的方法。
有没有人遇到过这种情况,并以某种方式找到了解决它的方法?
当前回答
如果不想创建自定义工具栏,可以这样做
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 . "轻"到< application >标签,用于应用于所有活动
其他回答
如果你正在使用AppCompatActivity并且已经走下了不使用它的路径,因为你不想得到它提供的自动动作栏,因为你想要分离工具栏,因为你的材质设计需求和CoordinatorLayout或AppBarLayout,那么,考虑一下:
你仍然可以使用AppCompatActivity,你不需要为了使用<android.support.v7.widget而停止使用它。xml中的工具栏>。只需关闭操作栏样式,如下所示:
首先,在你的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>
在你的App的manifest中,选择你刚刚定义的子样式主题,如下所示:
<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);
}
在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;
}
}
如果你正在使用ActionBarActivity,那么你可以告诉Android使用工具栏作为动作栏,如下所示:
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的后退箭头,那么你可以使用以下方法:
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. vii .widget。工具栏,然后你应该添加以下代码到你的AppCompatActivity:
@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
如果你想要得到工具栏上的后退箭头,而不是设置为你的SupportActionBar:
(kotlin)
val resId = getResIdFromAttribute(toolbar.context, android.R.attr.homeAsUpIndicator)
toolbarFilter.navigationIcon = ContextCompat.getDrawable(toolbar.context, resId)
toolbarFilter.setNavigationOnClickListener { fragmentManager?.popBackStack() }
从属性中获取res:
@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
}