使用BaseActivity进行OnResume操作栏样式设置

时间:2014-01-20 16:09:55

标签: java android

我正在尝试修改一个项目,其中包含用于设置操作栏样式的代码。样式发生的方式是在每个FragmentActivity中存在以下代码:

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    actionbarcolor = PreferenceData.getIntValues(AddJournalEntry.this,
            "actionbarcolor");
    if (actionbarcolor == 1) {
        ActionBar actionBar = getActionBar();
        actionBar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowTitleEnabled(true);
    } else if (actionbarcolor == 2) {
        ActionBar actionBar = getActionBar();
        actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED));
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowTitleEnabled(true);
    }
}

我想创建一个新的基本片段活动类,其中包含此代码,因此对于每个屏幕,我都不必复制/粘贴/更新此代码。我只是将其扩展到其他屏幕。我已经创建了一个新的类:

package com.fasttracksites.skyrimjournal;

import android.app.ActionBar;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v4.app.FragmentActivity;

import com.fasttracksites.adapters.PreferenceData;

public class BaseActivity extends FragmentActivity {

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        actionbarcolor = PreferenceData.getIntValues(AddJournalEntry.this,
                "actionbarcolor");
        if (actionbarcolor == 1) {
            ActionBar actionBar = getActionBar();
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));
            actionBar.setDisplayShowTitleEnabled(false);
            actionBar.setDisplayShowTitleEnabled(true);
        } else if (actionbarcolor == 2) {
            ActionBar actionBar = getActionBar();
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED));
            actionBar.setDisplayShowTitleEnabled(false);
            actionBar.setDisplayShowTitleEnabled(true);
        }
    }

}

我看到的唯一问题是我需要能够传递当前屏幕的上下文,是否可以这样做或者我应该做些不同的事情?

1 个答案:

答案 0 :(得分:1)

您不需要拥有当前屏幕的上下文,您只需使用“this”即可。如果您在父类中有代码,则父和子的引用也是相同的。您可以像这样更新代码:

public class BaseActivity extends FragmentActivity {

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
            //Removed the AddJournalEntry before this
        actionbarcolor = PreferenceData.getIntValues(this,
                "actionbarcolor");
        if (actionbarcolor == 1) {
            ActionBar actionBar = getActionBar();
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));
            actionBar.setDisplayShowTitleEnabled(false);
            actionBar.setDisplayShowTitleEnabled(true);
        } else if (actionbarcolor == 2) {
            ActionBar actionBar = getActionBar();
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED));
            actionBar.setDisplayShowTitleEnabled(false);
            actionBar.setDisplayShowTitleEnabled(true);
        }
    }

}

您还可以使用xml中的主题进行样式设置。如果你想让风格快速上升,我强烈推荐使用Android Asset Studio Action Bar Style Generator。这是一个很好的工具,可以为操作栏生成所需的样式和资源文件。确保查看它生成的文件,以熟悉如何使用xml设置操作栏的样式。