ActionBar没有在Android 2.3.3上显示标题

时间:2014-07-25 09:48:59

标签: android android-actionbar

我正在使用Google support-v7在Android 2.3+上获得ActionBar支持,这是我的代码

public abstract class NavUpActionBarActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeAsUpIndicator(R.drawable.title_back);
        actionBar.setDisplayOptions(
            ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP);
        actionBar.setTitle(getCustomTitleResId());
    }

    @Override
    public boolean onSupportNavigateUp () {
        this.finish();
        return true;
    }

    protected abstract int getCustomTitleResId();
}

NavupActionBarActivity的所有子类都没有在2.3.3上显示任何标题,任何想法?

UPDATED1

以上代码适用于每台设备4.x

UPDATED2

这是谷歌的已知issue

2 个答案:

答案 0 :(得分:0)

而不是

actionBar.setTitle(getCustomTitleResId());

你应该这样做:

ActionBar ab = getSupportActionBar();
ab.setTitle("My Title");
ab.setSubtitle("sub-title");

如果你想从你的资源中获取标题的字符串,那么你应该有这样的东西

{
    /* ... */
    ActionBar ab = getSupportActionBar();
    ab.setTitle(getCustomTitleResId());
    ab.setSubtitle("sub-title");
    /* ... */
}

protected String getCustomTitleResId() {
    return getString(R.string.CustomTitle);
}

请记住,如果您希望此方法有效,则应将其定义到Activity中,或将活动上下文传递给它:

 protected String getCustomTitleResId(Context c) {
    return c.getString(R.string.CustomTitle);
}

答案 1 :(得分:0)

试试这个..

actionBar.setDisplayShowTitleEnabled(true);

此外,如果您需要创建自定义操作栏,请在此处关注我的帖子。Android Action Bar: Can I replace a custom Title in appcompat v7

<强>更新

设置标题试试这个...

   actionBar.setTitle(Html.fromHtml("<font color='#013145'>Sign in or Create an account</font>"));

希望有所帮助......

<强>更新

我已经遇到过这个问题..这就是我建议你为Action栏创建自定义视图的原因。在您尝试时,无法保证UI的外观和感觉..

如果您还需要这样做,请关注: 现在,当你正在尝试..你需要获得较低版本的标题栏的ID,然后你需要更新该标题.. 对于Ex:你首先需要检查更低版本和更高版本..在更高版本中你只需要像我上面提到的那样定义..对于较低版本你需要获得标题Texview的ID然后你需要设置标题在它上面。

你可以获得这样的标题ID ..

抓取action_bar_title的ID

int titleId = getResources().getIdentifier("action_bar_title", "id", "android");

现在您可以将ID与TextView一起使用

TextView abTitle = (TextView) findViewById(titleId);
abTitle.setText("You title text");

但总而言之,我发现使用自定义视图是完成此任务的更好方法..因为这将允许您以非常简单和方便的方式制作更复杂的UI。

希望你能选择这个选项。

对于较低版本和较高版本的检查..您可以尝试这样..

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

                    // Higher version

                } else {

                    // Lower version 

                }

希望听起来很棒..干杯!