【问题标题】:Rotation of screen causes text colour change [duplicate]屏幕旋转导致文本颜色变化[重复]
【发布时间】:2018-06-04 02:19:01
【问题描述】:

我的 android 应用程序有一个小问题,一旦我旋转屏幕,文本颜色就会变回默认颜色。

基本上我有一个 if 语句,如果玩家一选择一个按钮(总共 12 个按钮),他们的选择会显示为特定颜色,如果不是玩家的移动,那么它必须是玩家二他们的选择被标记为不同的文本颜色。

@Override
public void onClick(View v) {
    if (!((Button) v).getText().toString().equals("")) {
        return;
    }

    if (playerOneMove) {
        ((Button) v).setText("A");
        ((Button) v).setTextColor(Color.parseColor("#e8e5e5"));
    } else {
        ((Button) v).setText("Z");
        ((Button) v).setTextColor(Color.parseColor("#737374"));
    } 

    ...

}

以上代码在 OnCreate() 中。我怎样才能让我的测试颜色保持在旋转范围内?我知道有 protected void onSaveInstanceState(Bundle outState)protected void onRestoreInstanceState(Bundle savedInstanceState),但我如何调用其中的按钮?

更新

    private Button btnObj1;
    private Button btnObj2;
    private Button btnObj3;
    private Button btnObj4;
    private Button btnObj5;
    private Button btnObj6;
    private Button btnObj7;
    private Button btnObj8;
    private Button btnObj9;

    private static final String TEXT_COLOR = "textColor";
    private String textColor;

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

if (savedInstanceState != null) {
            textColor = savedInstanceState.getString(TEXT_COLOR);
            if(btnObj1 != null) {
                btnObj1.setTextColor(Color.parseColor(textColor));
            }
            if (btnObj2 != null) {
                btnObj2.setTextColor(Color.parseColor(textColor));
            }
            if (btnObj3 != null) {
                btnObj3.setTextColor(Color.parseColor(textColor));
            }
            if (btnObj4 != null) {
                btnObj4.setTextColor(Color.parseColor(textColor));
            }
            if (btnObj5 != null) {
                btnObj5.setTextColor(Color.parseColor(textColor));
            }
            if (btnObj6 != null) {
                btnObj6.setTextColor(Color.parseColor(textColor));
            }
            if (btnObj7 != null) {
                btnObj7.setTextColor(Color.parseColor(textColor));
            }
            if (btnObj8 != null) {
                btnObj8.setTextColor(Color.parseColor(textColor));
            }
            if (btnObj9 != null) {
                btnObj9.setTextColor(Color.parseColor(textColor));
            }
        }


        if (savedInstanceState != null) {
            textColor = savedInstanceState.getString(TEXT_COLOR);
            btnObj1.setTextColor(Color.parseColor(textColor));
            btnObj2.setTextColor(Color.parseColor(textColor));
            btnObj3.setTextColor(Color.parseColor(textColor));
            btnObj4.setTextColor(Color.parseColor(textColor));
            btnObj5.setTextColor(Color.parseColor(textColor));
            btnObj6.setTextColor(Color.parseColor(textColor));
            btnObj7.setTextColor(Color.parseColor(textColor));
            btnObj8.setTextColor(Color.parseColor(textColor));
            btnObj9.setTextColor(Color.parseColor(textColor));
        }


    setContentView(R.layout.activity_main_player2);

    for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    String buttonID = "button_" + i + j;
                    int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
                    buttons[i][j] = findViewById(resID);
                    buttons[i][j].setOnClickListener(this);
                }
            }

        @Override
        public void onClick(View v) {

            if (!((Button) v).getText().toString().equals("")) {
                return;
            }

            if (playerOneMove) {
                ((Button) v).setText("A");
                textColor = "#e8e5e5";
                ((Button) v).setTextColor(Color.parseColor(textColor));
            } else {
                ((Button) v).setText("Z");
                textColor = "#737374";
                ((Button) v).setTextColor(Color.parseColor(textColor));
            }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {


        outState.putBoolean("playerOneMove", playerOneMove);
        outState.putString(TEXT_COLOR, textColor);

super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {


        playerOneMove = savedInstanceState.getBoolean("playerOneMove");
        textColor = savedInstanceState.getString(TEXT_COLOR);

super.onRestoreInstanceState(savedInstanceState);
    }

谢谢

【问题讨论】:

  • 请不要重复提问。只需使用您拥有的任何新信息、您尝试过的任何新代码或任何已发布答案不起作用的解释来编辑您的原始帖子,就会将它推到活动队列的顶部。另外,如果给定的答案对您不起作用,请不要接受。这表明您的问题已解决,但显然尚未解决。

标签: java android


【解决方案1】:

每当屏幕旋转并且您不处理配置更改时,您的活动将重新创建,因此您的视图的所有状态都不会被维护。如果可以使用onSaveInstanceState来存储状态如下:

private static final String TEXT_COLOR = "TEXT_COLOR";
private String textColor;
private Button btnObj;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    btnObj = findViewById(<button id>);
    if (savedInstanceState != null) {
        textColor = savedInstanceState.getString(TEXT_COLOR);
        btnObj.setTextColor(Color.parseColor(textColor));
    } 
    ...
}

@Override
public void onClick(View v) {
    if (!((Button) v).getText().toString().equals("")) {
        return;
    }

    if (playerOneMove) {
        ((Button) v).setText("A");
         textColor = "#e8e5e5";
        ((Button) v).setTextColor(Color.parseColor(textColor));
    } else {
        ((Button) v).setText("Z");
        textColor = "#737374";
        ((Button) v).setTextColor(Color.parseColor(textColor));
    } 

    ...

}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putString(TEXT_COLOR, textColor);
    super.onSaveInstanceState(savedInstanceState);
}

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 2020-01-22
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多