android 0xff2195f3,Snackbar使用,修改字体和背景颜色

原文链接

http://www.jcodecraeer.com/plus/view.php?aid=3187

字体颜色设置

对于Action可以通过Snack的bar的公开API

snackbar.setActionTextColor(int color)

设置,但是使用的时候不太好用,但是没有找到设置消息文字颜色的API,但是在查看Snackbar.class的时候找到了一个方法:

public View getView() {

return this.mView;

}

当去查看setActionTextColor(int color)的时候,发现了这个方法也被调用了,用于获取Snackbar的用于显示Action的TextView实例。继续查看,可以发现,每一个Snackbar的内容通过其内部类SnackbarLayout来呈现,其具体声明如下:

public static class SnackbarLayout extends LinearLayout

而在Snackbar(ViewGroup parent)这个包级声明的方法中发现上面的getView()返回的mView就是SnackbarLayout实例,这个类的布局最终是

layout_snackbar_include.xml

,这个是Android Support Design Library库中的布局文件,具体内容如下:

"http://schemas.android.com/apk/res/android">

"@+id/snackbar_text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:paddingTop="@dimen/snackbar_padding_vertical"

android:paddingBottom="@dimen/snackbar_padding_vertical"

android:paddingLeft="@dimen/snackbar_padding_horizontal"

android:paddingRight="@dimen/snackbar_padding_horizontal"

android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"

android:maxLines="@integer/snackbar_text_max_lines"

android:layout_gravity="center_vertical|left|start"

android:ellipsize="end"/>

"@+id/snackbar_action"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="@dimen/snackbar_extra_spacing_horizontal"

android:layout_marginStart="@dimen/snackbar_extra_spacing_horizontal"

android:layout_gravity="center_vertical|right|end"

android:background="?attr/selectableItemBackground"

android:paddingTop="@dimen/snackbar_padding_vertical"

android:paddingBottom="@dimen/snackbar_padding_vertical"

android:paddingLeft="@dimen/snackbar_padding_horizontal"

android:paddingRight="@dimen/snackbar_padding_horizontal"

android:visibility="gone" android:textAppearance="@style/TextAppearance.Design.Snackbar.Action"/>

其实到这里,剩下的问题就可以很快解决了。从上面可以看出来,具体Snackbar的内容就是布局中的两个TextView,因此只要能够获取这两个个TextView实例,那么修改属性就非常简单了。而上面的getView()则解决了上面这个问题,因此可以写下面的帮助方法实现设置消息文本的颜色。

public static void setSnackbarMessageTextColor(Snackbar snackbar, int color) {

View view = snackbar.getView();

((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(color);

}

使用下面的代码使用:

Snackbar snackbar =

Snackbar.make(container, "SnackbarTest", Snackbar.LENGTH_LONG).setAction("Action", new View.OnClickListener() {

@Override

public void onClick(View v) {

Snackbar snackbar =

Snackbar.make(container, "ActionClick", Snackbar.LENGTH_LONG);

setSnackbarMessageTextColor(snackbar,Color.parseColor("#FF0000"));

snackbar.show();

}

});

setSnackbarMessageTextColor(snackbar, Color.parseColor("#FFFFFF"));

snackbar.show();

原文链接http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0714/3186.html

如何为Snackbar添加背景颜色

可以通过getView() 方法获取Snackbar的核心视图,然后就可以在对它采用任意颜色了。

比如:

snackbar.getView().setBackgroundColor(colorId);

下面是ColoredSnackbar类,它封装了一些方法,可以根据用户指定的类型显示不同背景颜色。

public class ColoredSnackbar {

private static final int red = 0xfff44336;

private static final int green = 0xff4caf50;

private static final int blue = 0xff2195f3;

private static final int orange = 0xffffc107;

private static View getSnackBarLayout(Snackbar snackbar) {

if (snackbar != null) {

return snackbar.getView();

}

return null;

}

private static Snackbar colorSnackBar(Snackbar snackbar, int colorId) {

View snackBarView = getSnackBarLayout(snackbar);

if (snackBarView != null) {

snackBarView.setBackgroundColor(colorId);

}

return snackbar;

}

public static Snackbar info(Snackbar snackbar) {

return colorSnackBar(snackbar, blue);

}

public static Snackbar warning(Snackbar snackbar) {

return colorSnackBar(snackbar, orange);

}

public static Snackbar alert(Snackbar snackbar) {

return colorSnackBar(snackbar, red);

}

public static Snackbar confirm(Snackbar snackbar) {

return colorSnackBar(snackbar, green);

}

}

如何使用?

Snackbar snackbar = Snackbar.make(getView(), R.string.hello_snackbar, Snackbar.LENGTH_SHORT);

ColoredSnackBar.alert(snackbar).show();

这里,我使用的是fragment的getView()方法来获得view,不过你也可以使用FrameLayout或者CoordinatorLayout。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值