• 看源码 snackbar其实就是两个textview组成的
1
2
mMessageView = (TextView) findViewById(R.id.snackbar_text);
mActionView = (Button) findViewById(R.id.snackbar_action);

见名知意,一个是信息文本,一个是动作文本
然而,他虽然提供给了修改actoinView的颜色方法

1
2
3
4
5
6
7
8
9
10
/**
* Sets the text color of the action specified in
* {@link #setAction(CharSequence, View.OnClickListener)}.
*/
@NonNull
public Snackbar setActionTextColor(@ColorInt int color) {
final TextView tv = mView.getActionView();
tv.setTextColor(color);
return this;
}

但是没有提供修改mMessageView颜色的方法,而且是私有的
可是呢,

1
2
3
4
5
6
7
/**
* Returns the {@link Snackbar}'s view.
*/
@NonNull
public View getView() {
return mView;
}

那么我们可以拿到snackbar的view!!,那后面的事情就好办了

1
2
3
4
5
6
7
8
9
10
11
Snackbar snackbar = Snackbar.make(container, "hehe", Snackbar.LENGTH_SHORT)
.setAction("なに??", new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "whattttt", Toast.LENGTH_SHORT).show();
}
})
.setActionTextColor(0xffffc0cb);
//findViewById拿到文本textview,然后修改颜色就是了
((TextView)snackbar.getView().findViewById(R.id.snackbar_text)).setTextColor(0xffffc0cb);
snackbar.show();