按下时更改浮动动作按钮颜色

时间:2016-02-12 06:29:00

标签: java android floating-action-button

我想使用浮动操作按钮作为某种喜欢的按钮,即书签功能。我正在使用boolean,初始化如下:

boolean favSelected = false;

我的活动将从我的SQLite数据库中检索一些信息,以确定favSelected是真还是假。如果这是真的,我希望我的工厂有不同的颜色,如果是假的原始颜色。我试过这个:

    fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(favSelected = false) {
                favSelected = true;
                fab.setBackgroundTintList(new ColorStateList(new int[][]{new int[]{0}}, new int[]{getResources().getColor(R.color.header_pressed)}));
            } else if ( favSelected = true){
                favSelected = false;
                fab.setBackgroundTintList(new ColorStateList(new int[][]{new int[]{0}}, new int[]{getResources().getColor(R.color.colorPrimary)}));
            }

        }
    });

但它不起作用。预期的功能有点像复选框

2 个答案:

答案 0 :(得分:2)

尝试使用此代码更改按下状态下的FAB颜色:

    int[][] states = new int[][]{
            new int[]{android.R.attr.state_pressed},
            new int[]{-android.R.attr.state_pressed},
            new int[]{android.R.attr.state_focused},
            new int[]{-android.R.attr.state_pressed}
    };

    int[] colors = new int[]{
            ContextCompat.getColor(this, R.color.color_pressed),
            ContextCompat.getColor(this, R.color.color_normal),
            ContextCompat.getColor(this, R.color.color_pressed),
            ContextCompat.getColor(this, R.color.color_normal)
    };
    fab.setBackgroundTintList(new ColorStateList(states, colors));

答案 1 :(得分:1)

您正在使用private void configureButton() { get_gps.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{ Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET, Manifest.permission.ACCESS_NETWORK_STATE }, 10); } } locationManager.requestLocationUpdates("gps", 5000, 0, locationListener); } }); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 10: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) { configureButton(); return; } } } 这是对favSelected的分配,请像if(favSelected = false)一样使用。

对于比较,我们使用(favSelected == false)符号代替==

所以像这样修改你的代码

=