我使用附加到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>
答案 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>