【问题标题】:ActionBar with icon & title带有图标和标题的操作栏
【发布时间】:2018-04-13 13:04:51
【问题描述】:

我有一个现有的应用,其中 ActionBar。操作栏有一个后退按钮(相关的地方)、图标、左侧对齐的标题和右侧的选项菜单。我最近将 AppCompat 库添加到项目中。现在图标不见了。背面、标题和选项显示正常。

所以我开始创建一个工具栏并将其包含在布局中。问题是有很多屏幕已经开始崩溃,因为我没有包含工具栏。另外,如果添加了 NoActionBar 主题,getSupportActionBar 将返回 null。

有没有一种简单的方法可以保留旧的操作栏(不添加工具栏)?

代码

android.support.v7.app.ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
      if (toolbar != null)
         setSupportActionBar(toolbar);

      actionBar.setTitle("Scan Code");
 }

工具栏布局

<android.support.design.widget.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    app:layout_scrollFlags="scroll|enterAlways">

    <android.support.v7.widget.Toolbar
        android:minHeight="?attr/actionBarSize"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:navigationIcon="@drawable/app_icon">

    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

风格

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="icon">@mipmap/app_icon</item>
</style>

【问题讨论】:

  • 请添加logcat错误
  • 请检查您是否扩展了 AppComptActivity 和清单样式主题

标签: java android


【解决方案1】:

当我想在所有活动中用工具栏替换操作栏时,我会覆盖 BaseActivity 中的 setContentView() 方法。它看起来像这样:

    @Override
public void setContentView(@LayoutRes int layoutResID) {
    super.setContentView(layoutResID);
    View view = findViewById(R.id.toolbarContainer);
    if (view != null) {
        toolbar = (Toolbar) view.findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        actionBar = getSupportActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
        setTitle(getTitle());
    }
}

【讨论】:

  • 这似乎是一个更简洁的实现,因为所有视图都有 setContentView 可以被覆盖以添加自定义设置。
【解决方案2】:

解决方案很简单。您需要针对特定​​屏幕的自定义工具栏。您已经制作了 apptheme = AppTheme.NoActionBar。这意味着您的所有屏幕都不会有工具栏。 首先将您的应用程序更改为默认值。

<style name="AppStyle" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="icon">@mipmap/app_icon</item>
</style>

如果您只想为一个屏幕更改工具栏,您可以添加与您的 Apptheme 相同的自定义样式。

<style name="CustomStyle" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
 <item name="icon">@mipmap/app_icon</item>
</style>

当您在清单文件中声明此活动时添加此样式。

<activity
    android:theme="@style/CustomStyle"
    android:name=".MyActivity" />

【讨论】:

    【解决方案3】:
    • 删除android.support.v7.app.ActionBar
    • Toolbar中使用setTitlesetNavigationIcon

    试试这个。

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    // App Logo
    toolbar.setLogo(R.mipmap.ic_launcher);
    // Title
    toolbar.setTitle("My Title");
    setSupportActionBar(toolbar);
    // Navigation Icon
    toolbar.setNavigationIcon(R.mipmap.ic_launcher);
    

    【讨论】:

      【解决方案4】:

      试试这个删除android.support.v7.app.ActionBar

      toolbar = (Toolbar) findViewById(R.id.ar_toolbar);
      setSupportActionBar(toolbar);
      getSupportActionBar().setTitle("Title");
      getSupportActionBar().setIcon(R.mipmap.ic_launcher);
      

      将此主题应用到您的活动中

      <style name="AccountSetting" parent="Theme.AppCompat.Light.NoActionBar">
              <!-- Customize your theme here. -->
              <item name="colorPrimaryDark">@color/colorWhite</item>
              <item name="colorPrimary">@color/colorWhite</item>
             <item name="colorAccent">@color/colorAccent</item>
      
       </style>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多