BG颜色从一个活动到另一个活动的变化的多重意图@Android

时间:2017-04-10 14:35:58

标签: android android-intent

我最初的计划是拥有一个UI首选项,这样用户可以随时从主活动中选择一种bg颜色 - 我得到了它的工作但是它没有显示正确的颜色它&#39 ; s指定为。即在主活动中按下红色按钮时,它会在下一个活动中显示蓝色。

以下是代码片段,其中只有两个按钮使用多个意图进行演示......

我的主要布局:

 <Button
        android:id="@+id/buttonRed"
        android:onClick="passBG"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="RED"
        android:layout_marginLeft="18dp"
        android:layout_marginStart="18dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:id="@+id/buttonBlue"
        android:onClick="passBG"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BLUE"
        android:layout_alignParentBottom="true"
        android:layout_alignLeft="@+id/button"
        android:layout_alignStart="@+id/button" />

主要活动正在运作:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;

public class MainActivity extends AppCompatActivity {

View view;

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

        view=this.getWindow().getDecorView();
        view.setBackgroundResource(R.color.gray);

 public void passBG(View v) {
        Intent intent = new Intent(this, AudioActivity.class);
        intent.putExtra("Red", R.color.red);
        intent.putExtra("Blue", R.color.blue);
        startActivity(intent);
    }
}

但第二项活动有些不对劲:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;

public class AudioActivity extends AppCompatActivity {


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

        int redBG = getIntent().getIntExtra("Red", -1);
        int blueBG = getIntent().getIntExtra("Blue", -1);
        RelativeLayout rootView = (RelativeLayout) findViewById(R.id.activity_audio);
        rootView.setBackgroundResource(redBG);
        rootView.setBackgroundResource(blueBG);
    }
}

我发现&#34; ...&#34; BG中的任何一种颜色都是先实现的

  rootView.setBackgroundResource("..."BG)

将确定只会弹出的那个。它与我想到的序列有关 - 在第一次尝试时,我尝试在不同的方法上使用意图,即

public void goRED(View v)
{
    view.setBackgroundResource(R.color.red);

    Intent intent = new Intent(this, AudioActivity.class);
    intent.putExtra("Red", R.color.red);
    startActivity(intent);
}

public void goBLUE(View v)
{

    view.setBackgroundResource(R.color.blue);
    Intent intent = new Intent(this, AudioActivity.class);
    intent.putExtra("Blue", R.color.blue);
    startActivity(intent);
}

但是只会在错误中结束,所以我用相同的方法调用按钮来防止这个问题。所以现在我遇到了一个新问题 - 如何正确实现多个意图以在下一个活动中显示正确的颜色BG?我应该使用一些if-else语句吗?任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

主要活动正在运作:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    View view;
    private Button redBtn;
    private Button blueBtn;

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

        view=this.getWindow().getDecorView();
        view.setBackgroundResource(R.color.gray); //This can be achieved by using the `android:background` attribute to your main element on your activity layout

        redBtn = (Button) findViewById(R.id.buttonRed); //also, attributes ids on xml layouts shouldnt use uppercase letters, separete words using '_'
        blueBtn = (Button) findViewById(R.id.buttonBlue);
        redBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onButtonClick(R.color.red);
            }
        });
        blueBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onButtonClick(R.color.blue);
            }
        });
    }
    private void onButtonClick(int color){
        Intent intent = new Intent(this, AudioActivity.class);
        intent.putIntExtra("background",color);
        startActivity(intent);
    }
}

然后,在你的第二个活动上:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;

public class AudioActivity extends AppCompatActivity {

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

        int color = getIntent().getIntExtra("background", -1);
        if(color != -1){
            RelativeLayout rootView = (RelativeLayout) findViewById(R.id.activity_audio);
            rootView.setBackgroundResource(color);
        }
    }
}