【问题标题】:Change color of cardview/button on click Android在点击 Android 时更改卡片视图/按钮的颜色
【发布时间】:2018-03-08 14:27:38
【问题描述】:

我希望 StartStop CardView 上的背景颜色变为红色。目前是绿色的。我该怎么做呢?

不幸的是 StartStopCard.setCardBackgroundColor(Color.parseColor("#b70505"));不管用。

我在下面附上了我的整个代码

public class LandingPage extends AppCompatActivity implements View.OnClickListener {

    private CardView appsCard, parentalControlsCard, customSettingsCard, activateCard, StartStopCard;
    private TextView lockStatus, processStatus;
    private AlarmManager alarmManager;
    private ArrayList<RuleSet> ruleSets = null;
    private boolean mStarted = false;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainactivity);
        lockStatus = (TextView) findViewById(R.id.onOff);
        processStatus = (TextView) findViewById(R.id.processStartStop);


        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        final Intent intent = new Intent(LandingPage.this, LockOptionReceiver.class);
        SharedPreferences setting = getSharedPreferences("PREFS", 0);
        String switcher = setting.getString("lockStatus", "");
        setStatus(switcher);
        String switcher2 = setting.getString("processStatus" , "");
        setProcess(switcher2);


        try {
            ruleSets = RuleSetList.retrieveRuleSet(this);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


        //Defining Cards on Landing Page
        appsCard = (CardView) findViewById(R.id.apps_card);
        parentalControlsCard = (CardView) findViewById(R.id.parentalControls_id);
        customSettingsCard = (CardView) findViewById(R.id.customSettings);
        activateCard = (CardView) findViewById(R.id.activate_id);
        StartStopCard = (CardView) findViewById(R.id.StartStopCard);


        //Add OnClick Listeners
        appsCard.setOnClickListener(this);
        parentalControlsCard.setOnClickListener(this);
        customSettingsCard.setOnClickListener(this);
        activateCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (ruleSets.isEmpty()) {
                    Toast.makeText(LandingPage.this, "You did not create a custom setting.", Toast.LENGTH_SHORT).show();
                } else {
                    PendingIntent pending_start;
                    PendingIntent pending_stop;
                    Intent startIntent = new Intent(LandingPage.this, LockOptionReceiver.class);
                    Intent stopIntent = new Intent(LandingPage.this, LockOptionReceiver.class);
                    Calendar startTime = new GregorianCalendar();
                    Calendar endTime = new GregorianCalendar();
                    String startString = ruleSets.get(0).getStartTime();
                    String endString = ruleSets.get(0).getEndTime();

                    String[] startArr = startString.split(":");
                    String[] endArr = endString.split(":");

                    startTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startArr[0]));
                    startTime.set(Calendar.MINUTE, Integer.parseInt(startArr[1]));

                    endTime.set(Calendar.HOUR_OF_DAY, Integer.parseInt(endArr[0]));
                    endTime.set(Calendar.MINUTE, Integer.parseInt(endArr[1]));

                    pending_start = PendingIntent.getBroadcast(LandingPage.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                    pending_stop = PendingIntent.getBroadcast(LandingPage.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

                    startIntent.putExtra("status", "start");
                    stopIntent.putExtra("status", "stop");

                    Toast.makeText(LandingPage.this, "Your ruleset will start at " + startString, Toast.LENGTH_SHORT).show();

                    setStatus("Lock Active");
                    setProcess("Stop");

                    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_DAY, startTime.getTimeInMillis(), pending_start);
                    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmManager.INTERVAL_DAY, startTime.getTimeInMillis(), pending_stop);
                }
            }
        });


        final CardView StartStopCard = (CardView) findViewById(R.id.StartStopCard);
        StartStopCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mStarted) {
                    mStarted=false;
                    SharedPreferences setting = getSharedPreferences("PREFS", 0);
                    SharedPreferences.Editor editor = setting.edit();
                    editor.remove("switcher");
                    editor.remove("switcher2");
                    editor.remove("lockStatus");
                    editor.remove("processStatus");
                    editor.commit();
                    editor.putString("switcher", "true");
                    editor.putString("switcher2", "true");
                    editor.putString("lockStatus", "Lock Active");
                    editor.putString("processStatus", "Start");
                    editor.apply();
                    intent.putExtra("status", "start");
                    sendBroadcast(intent);
                    intent.putExtra("processStatus", "start");
                    sendBroadcast(intent);
                    String status = setting.getString("lockStatus", "");
                    setStatus(status);
                    String processStatus = setting.getString("processStatus" , "");
                    setProcess(processStatus);

                }
                else {

                    mStarted= true;
                    SharedPreferences setting = getSharedPreferences("PREFS", 0);
                    SharedPreferences.Editor editor = setting.edit();
                    editor.remove("switcher");
                    editor.remove("switcher2");
                    editor.remove("lockStatus");
                    editor.remove("processStatus");
                    editor.commit();
                    editor.putString("switcher", "false");
                    editor.putString("switcher2", "false");
                    editor.putString("lockStatus", "Lock Deactivated");
                    editor.putString("processStatus", "Stop");
                    editor.apply();
                    intent.putExtra("status", "stop");
                    sendBroadcast(intent);
                    intent.putExtra("processStatus", "start");
                    sendBroadcast(intent);
                    String status = setting.getString("lockStatus", "");
                    setStatus(status);
                    String processStatus = setting.getString("processStatus" , "");
                    setProcess(processStatus);
                    StartStopCard.setCardBackgroundColor(Color.parseColor("#b70505"));

                }
            }

        });

    }






    @Override
    public void onClick(View v) {

    Intent i;

    switch (v.getId()) {
        case R.id.apps_card: i = new Intent(this,AppList.class);startActivity(i);break;
        case R.id.parentalControls_id:i = new Intent(this,ParentalWelcomeActivity.class);startActivity(i);break;
        case R.id.customSettings:i = new Intent(this,ViewRuleSets.class);startActivity(i);break;
        case R.id.activate_id:i = new Intent(this, RuleSet.class);startActivity(i);break;
        case R.id.StartStopCard:?????
        default:break;

    }
}

非常感谢您的任何帮助

【问题讨论】:

  • 试试 v.setBackgroundColor(R.color.some_color)
  • @muminers case R.id.StartStopCard:v.setBackgroundColor(R.color.some_color);你的意思是这样的吗?
  • card.setCardBackgroundColor(你的颜色);
  • 准确来说很难说。您发布的代码不多。但是假设 View v 是被点击的 CardView,那么调用 v.setCardBackgroundColor() 方法会改变它的颜色。可能您还必须调用 v.invoke()。
  • 我是把它放在开关里面还是外面?

标签: android onclicklistener background-color android-button android-cardview


【解决方案1】:

创建您的 startStopCard 视图或您想要更改其颜色的任何其他视图,例如(布局背景),然后在您的 onCreate 中实例化它,然后在您的 onClick 开关案例中,您可以通过以下方式设置其颜色:startStopCard.setCardBackgroundColor(getResources ().getColor(R.color.red));

【讨论】:

  • 谢谢,但是如何设置开关盒?像这样的东西? case R.id.StartStopCard = startStopCard.setCardBackgroundColor(getResources().getColor(R.color.samsMoving));
  • 这就是你的情况应该是这样的:case R.id.StartStopCard: startStopCard.setCardBackgroundColor(getResources().getColor(R.color.samsMoving));休息;
  • 不幸的是它仍然无法工作,我会发布整个代码吗?
  • 你想改变哪个view的背景是cardview的背景还是activity的背景?
  • 这是cardviews bg
【解决方案2】:

如果 R.id.StartStopCard id 代表一个 cardView 比做 -

@Override
    public void onClick(View v) {

    Intent i;

    switch (v.getId()) {
        case R.id.apps_card: i = new Intent(this,AppList.class);startActivity(i);break;
        case R.id.parentalControls_id:i = new Intent(this,ParentalWelcomeActivity.class);startActivity(i);break;
        case R.id.customSettings:i = new Intent(this,ViewRuleSets.class);startActivity(i);break;
        case R.id.activate_id:i = new Intent(this, RuleSet.class);startActivity(i);break;
        case R.id.StartStopCard: ((CardView)v).setCardBackgroundColor((getResources().getColor(R.color.red)));
        default:break;

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2018-08-04
    相关资源
    最近更新 更多