原文链接
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。

更多相关文章

  1. android support Percent支持库开发
  2. android:Bitmap和Drawable相互转换方法
  3. android developer API Guider之user interface---Settings(二)
  4. 传统menu的使用方法总结
  5. 第四章(2)Libgdx手工项目设置
  6. Handler: 更新UI的方法
  7. 三种定时器的使用
  8. Android(安卓)AsyncTask 源码解析
  9. Android通过获取Ip的方法判断手机是否联网

随机推荐

  1. SQL SERVER 2012数据库自动备份的方法
  2. Navicat导出.sql文件方法
  3. SQL Server中Table字典数据的查询SQL示例
  4. SQL Server中通用数据库角色权限的处理详
  5. SQL Server数据库的三种恢复模式:简单恢复
  6. SQL Server 2008 清空删除日志文件(瞬间
  7. SQL Server统计信息更新时采样百分比对数
  8. SQL Server查找表名或列名中包含空格的表
  9. sql中的常用的字符串处理函数大全
  10. SQL Server数据库设置自动备份策略的完整