如何从其他活动更改活动的背景颜色?

时间:2020-10-19 12:19:16

标签: android android-studio background android-constraintlayout

我需要更改MainActivity ConstraintLayout的背景颜色。我还有第二个活动,叫做selectcolors,其中有一些按钮,单击它们会改变MainActivity背景色。

我需要一种方法来分别从第二个活动的每种颜色的每个按钮更改主要活动的背景颜色。

    package com.example.kidscalculator;

    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    public class selectcolors extends AppCompatActivity {
    private TextView textSelect;
    private Button buttonWhite;
    private Button buttonYellow;
    private Button buttonRed;
    private Button buttonBlue;
    private Button buttonGreen;
    private Button buttonOrange;
    private Button buttonPurple;
    private Button buttonBlack;
    private Button buttonGrey;
    private Button buttonOrangeLight;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_selectcolors);

            textSelect = (TextView)findViewById(R.id.textSelect);
            buttonWhite = (Button)findViewById(R.id.buttonWhite);
            buttonYellow = (Button)findViewById(R.id.buttonYellow);
            buttonRed = (Button)findViewById(R.id.buttonRed);
            buttonBlue = (Button)findViewById(R.id.buttonBlue);
            buttonGreen = (Button)findViewById(R.id.buttonGreen);
            buttonOrange = (Button)findViewById(R.id.buttonOrange);
            buttonPurple = (Button)findViewById(R.id.buttonPurple);
            buttonBlack = (Button)findViewById(R.id.buttonBlack);
            buttonGrey = (Button)findViewById(R.id.buttonGrey);
            buttonOrangeLight = (Button)findViewById(R.id.buttonOrangeLight);

            buttonWhite.setOnClickListener(new View.OnClickListener() {
                @Override
        public void onClick(View v) {
               //Set Main Activity ConstraintLayout Background White
        }
    });

    buttonYellow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             //Set Main Activity ConstraintLayout Background Yellow
        }
    });

    buttonRed.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //etc.
        }
    });

    buttonBlue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    buttonGreen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    buttonOrange.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    buttonPurple.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    buttonBlack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    buttonGrey.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    buttonOrangeLight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });
}
}

3 个答案:

答案 0 :(得分:1)

您可以做的一件事是。 在selectcolors类中,为每个按钮分配ID或名称,以便主活动知道单击了哪种颜色。并使用intent转到MainActivity。

在selectcolors.class中

所有按钮点击

Intent intent = new Intent(getApplicatioinContext(),MainActivity.class); intent.putExtra("color","Red"); startActivity(intent)

所有按钮的相似之处。

在MainActivity.class

String bgcolor = "";

在onCreate()

if (getIntent().getExtras() != null || getIntent().getExtras().containsKey("color")) { bgcolor= getIntent().getExtras().getString("color");}

if (bgcolor.equals("red")){ (layout_id).setBackground(context.getResources().getDrawable(R.drawable.red)); }

对所有其他按钮也执行相同操作。

答案 1 :(得分:1)

您可以使用以下代码

从Mainactivity中启动selectcolors活动,如下所示:

Intent intent  = new Intent(this,selectcolors.class);
startActivityForResult(intent,1234);

现在,只要您选择任何颜色(即onClick),就可以进行selectcolors活动。 只需添加以下代码段

Intent intent = new Intent();
intent.putExtra("selectedColor",<Your selected color>); // Suppose you are passing color as #aabbcc i.e hex string
setResult(1234,intent);

现在处于mainactivity状态的代码段如下

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
      if(requestCode == 1234){
         String yourSelectedColor = data.getStringExtra("selectedColor");
         Intent myIntent = new Intent(this,Mainactivity.class);
         myIntent.putExtra("selectedColor",yourSelectedColor);
         finish(); // Finish this activity
         startActivity(myIntent);
        
      }

}

然后最后在main的onCreate中 在onCreate()

if (getIntent().getExtras() != null || getIntent().getExtras().containsKey("selectedColor")) {
 bgcolor= getIntent().getExtras().getString("selectedColor");
(layout_id).setBackground(Color.parseColor(bgcolor));

}

答案 2 :(得分:0)

为什么要为此简单的目的进行另一项活动?请改用对话框。

对话方式:

  1. 创建活动布局后,使用颜色按钮创建xml layout
  2. MainActivityonCreate()
  3. 中找到根ConstraintLayout视图。例如ConstraintLayout constraintLayout = findViewById(R.id.rootConstraint_MainActivity);
  4. 创建如下对话框类:
public class DialogColorPicker extends DialogFragment implements View.OnClickListener{
    private static final String TAG = "ColorPickerDialog";
    private static int colorRed = Color.RED;
    private static int colorGreen = Color.GREEN;
    private static int colorYellow = Color.YELLOW;
    private static int colorBlue = Color.BLUE;
    
    private DialogColorPickerListener listener;

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        View view = View.inflate(getContext(), R.layout.fragment_color_picker, null);
        Button btn_red = view.findViewById(R.id.btn_red_fragment);
        Button btn_green = view.findViewById(R.id.btn_green_fragment);
        Button btn_yellow = view.findViewById(R.id.btn_yellow_fragment);
        Button btn_blue = view.findViewById(R.id.btn_blue_fragment);
        
        btn_red.setOnClickListener(this);
        btn_green.setOnClickListener(this);
        btn_yellow.setOnClickListener(this);
        btn_blue.setOnClickListener(this);
    

        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setView(view)
                .setTitle("Choose Color");
        
        return builder.create();
    }
    
    @Override
    public void onClick(View v) {
        switch(v.getId()) {
        case R.id.btn_red_fragment:
            listener.onConfirm(colorRed);
            break();
        case R.id.btn_green_fragment:
            listener.onConfirm(colorGreen);
            break();
        case R.id.btn_yellow_fragment:
            listener.onConfirm(colorYellow);
            break();
        case R.id.btn_blue_fragment:
            listener.onConfirm(colorBlue);
            break();
    }
    
    public void setListener(DialogColorPickerListener listener) {
        this.listener = listener;
    }

    public interface DialogColorPickerListener {
        void onConfirm(int selectedColor);
    }
}
  1. MainActivity.class外的onCreate()
public void openColorPickerDialog(View v) {
        DialogColorPicker colorPicker = new DialogColorPicker();
        colorPicker.setListener(new DialogColorPicker.DialogColorPickerListener(){
            @Override
            public void onConfirm(int selectedColor) {
                //Handle your color change from here;
                constraintLayout.setBackgroundColor(selectedColor);
            }
        });
        colorPicker.showNow(getSupportFragmentManager(), "ColorPicker");
    }

希望这会起作用。更好的处理方式。

相关问题