我需要更改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) {
}
});
}
}
答案 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)
为什么要为此简单的目的进行另一项活动?请改用对话框。
对话方式:
xml layout
。MainActivity
内onCreate()
的ConstraintLayout constraintLayout = findViewById(R.id.rootConstraint_MainActivity);
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);
}
}
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");
}
希望这会起作用。更好的处理方式。