2016-02-12 63 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));