设置Android ActionBar颜色时出现“字段可以转换为局部变量”消息

时间:2015-07-29 23:51:13

标签: java android android-actionbar android-support-library android-appcompat

设置操作栏的颜色后,actionBarColor中的private String actionBarColor = "#B36305";会突出显示为黄色,并且出于某种原因会返回警告。如何摆脱这种警告呢?

  

字段可以转换为局部变量

public class MainActivity extends AppCompatActivity {

    private String actionBarColor = "#B36305";

    private int getFactorColor(int color, float factor) {
        float[] hsv = new float[3];
        Color.colorToHSV(color, hsv);
        hsv[2] *= factor;
        color = Color.HSVToColor(hsv);
        return color;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_activity_main);

        ActionBar actionBar = getSupportActionBar();
        if(actionBar != null) {
            actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(actionBarColor)));
        }
    }
}

3 个答案:

答案 0 :(得分:44)

如果您知道将使用变量,请添加到班级的顶部:

@SuppressWarnings("FieldCanBeLocal")

答案 1 :(得分:31)

警告告诉你的是actionBarColor不应该是全局变量(即字段),因为它仅用于一种方法(onCreate)。这是一个很好的建议:你应该总是最小化变量的范围,因为它提高了可读性并减少了编程错误的可能性。

要摆脱警告,请通过在onCreate中声明变量来解决问题:

final String actionBarColor = "#B36305";

if(actionBar != null) {
    actionBar.setBackgroundDrawable(
        new ColorDrawable(Color.parseColor(actionBarColor)));
}

答案 2 :(得分:-1)

当你进入lint错误时,这不是一个错误,而是在用作局部变量的类级别变量中显示的错误。转到并将其定义为局部变量。它会起作用

例如 -

private Tracker mTracker, mTracker2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GoogleAnalytics mInstance = GoogleAnalytics.getInstance(this);
    mTracker = mInstance.getDefaultTracker();
    mTracker2 = mInstance.getTracker(URL.ANALYTIC);
    mInstance.setDefaultTracker(mTracker2);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.actress_about_detail);
}

我们使用mtracker变量作为本地,因此我们必须在oncreate方法中声明。这将解决您的错误。

希望这会对你有所帮助。