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"/></merge>
其实到这里,剩下的问题就可以很快解决了。从上面可以看出来,具体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。
更多相关文章
- android support Percent支持库开发
- android:Bitmap和Drawable相互转换方法
- android developer API Guider之user interface---Settings(二)
- 传统menu的使用方法总结
- 第四章(2)Libgdx手工项目设置
- Handler: 更新UI的方法
- 三种定时器的使用
- Android(安卓)AsyncTask 源码解析
- Android通过获取Ip的方法判断手机是否联网