ActionBarCompat:如何隐藏/删除“基础”活动的“标题”?

时间:2014-03-16 08:23:52

标签: android android-fragments android-xml android-actionbar-compat

我使用附加到1个基础活动的 ActionBarCompat 。并且可以使用导航抽屉导航许多片段。

每个片段都以编程方式设置了相应的标题集。

官方Gmail应用程序之类的应用程序具有干净的启动器活动,即您在短暂时刻看到的第一个屏幕在操作栏中没有图标,没有标题。我怎样才能实现同样的目标?

在应用程序加载了以下片段后,ActionBar已经以编程方式正确设置了相应的标题和图标样式,如前所述。

我已尝试将以下代码放入style.xml并从清单中调用它。但是整个应用程序中禁用了Action Bar,我不想要。:

      <style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat">

          <item name="android:windowNoTitle">true</item>

      </style>

3 个答案:

答案 0 :(得分:1)

只需将setTitle("");添加到您的活动oncreate。

答案 1 :(得分:1)

我认为您可以像这样创建自己的ActionBar布局:

在你的BaseActivity中(你有一个,对吧?)做这样的事情:

public class BaseActivity extends ActionBarActivity  {
    private TextView mActionBarTextView;    
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final android.support.v7.app.ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeButtonEnabled(true);
            actionBar.setDisplayShowCustomEnabled(true);
            actionBar.setDisplayShowTitleEnabled(false);
            LayoutInflater inflator = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View actionBarView = inflator.inflate(R.layout.ab_custom_view, null);
            mActionBarTextView = (TextView) actionBarView.findViewById(R.id.title);
            mActionBarTextView.requestFocus();
            this.getSupportActionBar().setCustomView(actionBarView);
            setTitle(Constants.EMPTY_STRING); 
    }
}

ab_custom_view.xml看起来像(设置你自己的TextView首选项,这只是一个未经测试的例子):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/transparent">
  <TextView
      android:id="@+id/title"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerVertical="true"
      android:layout_marginLeft="5dp"
      android:textColor="@color/white"
      android:textSize="18sp"
      android:maxLines="1"
      android:ellipsize="marquee"
      android:focusable="true"
      android:singleLine="true"
      android:focusableInTouchMode="true" />
</RelativeLayout>

返回BaseActivity,添加以下便捷方法:

@Override
public void setTitle(final CharSequence title) {
    if (mActionBarTextView != null) {
        if (title != null) {
            mActionBarTextView.setText(title);
        } else {
            mActionBarTextView.setText(null);
        }
        requestTitleFocus();
    }
}
@Override
public void setTitle(final int titleId) {
    if (mActionBarTextView != null) {
        if (titleId > 0) {
            mActionBarTextView.setText(getString(titleId));
        } else {
            mActionBarTextView.setText(getString(R.string.some_default_string);
        }
        requestTitleFocus();
    }
}
public void requestTitleFocus() {
    if (mActionBarTextView != null) {
        mActionBarTextView.requestFocus();
    }
}

最后,在您的活动(继承自BaseActivity)中,如果您需要设置不同于空标题:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle("Your Title");
}

(我假设您将最常用的字符串存储在静态最终字段中以方便和高效...)

public final class Constants {
    public static final String EMPTY_STRING = "";
}   

这应该可以解决问题。

你获得的好处是你可以在ActionBar中使用自定义字体(如果你使用自定义字体,则匹配你的应用程序字体)因为你对ActionBar有完全的控制权(和参考号)&# 39; s textview。 ;)

答案 2 :(得分:0)

尝试在清单文件中为您的活动使用样式。请记住,在您的onCreate()方法中,当您想要恢复操作栏或应用程序样式时,必须在setContentView()之前调用setStyle()或requestWindowFeature()。

    <style name="MyApp.Fullscreen" parent="android:Theme.Black.NoTitleBar">
    <item name="android:windowBackground">@color/app_background</item>
</style>