2016-02-12 83 views
0

我想使用浮动动作按钮作为某种喜欢的按钮,即书签功能。我使用的是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)})); 
      } 

     } 
    }); 

但它没有工作。预期功能有点像一个复选框

回答

1

您正在使用if(favSelected = false)这是分配给favSelected,请使用仿佛(favSelected == false)

为了比较,我们使用==标志,而不是=

所以修改这样

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
      @Override 
      public void onClick(View view) { 

       if (!favSelected) { 
        favSelected = true; 
        view.setBackgroundTintList(new ColorStateList(new int[][] 
          {new int[]{0}}, new int[]{getResources().getColor(R.color.colorAccent)})); 
       } else if (favSelected) { 
        favSelected = false; 
        view.setBackgroundTintList(new ColorStateList(new int[][]{new int[]{0}}, new int[]{getResources().getColor(R.color.colorPrimary)})); 
       } 

      } 
     }); 
代码
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));