Android Material Design ————SnackBar使用及初步自定义

Android Material Design ————SnackBar使用及初步自定义

使用Material Design 控件需要导入包:

compile 'com.android.support:design:22.2.0'
compile 'com.android.support:appcompat-v7:22.2.0' //android版本5.0以下需导入

使用Snackbar需要Activity继承AppcompatAcitivity。
Snackbar最简单的使用,调用Snackbar的make()方法获得Snackbar。

public static Snackbar make(View view, CharSequence text, int duration) {
        Snackbar snackbar = new Snackbar(findSuitableParent(view));
        snackbar.setText(text);
        snackbar.setDuration(duration);
        return snackbar;
    }

第一个参数可以传入你点击的View对象,(Snackbar为根据这个View获取根部Layout)。
第二个参数是Snackbar的文本信息。
第三个参数是Snackbar的显示时长:
Snackbar.LENGTH_SHORT,Snackbar.LENGTH_LONG和Snackbar.LENGTH_INDEFINITE(会持续显示)。

Snackbar还可以设置Action:

Snackbar.make(view, content, Snackbar.LENGTH_SHORT)
                .setAction("ACTION", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                    }
                })
                .show();

Snackbar的背景色和文本颜色都是默认的,只有一个setActionTextColor()方法可以改变Action文本的颜色,无法满足多元化需求。所以这里我们需要自定义Snackbar的相关属性。
可以通过源码观察发现Snackbar的样子是由SnackbarLayout实现的,而SnackbarLayout的布局文件中有两个控件:

<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
        android:id="@+id/snackbar_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingTop="14dp"
        android:paddingBottom="14dp"
        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
        android:maxLines="2"
        android:layout_gravity="center_vertical|left|start"
        android:ellipsize="end"
        android:textAlignment="viewStart"/>

<Button
        android:id="@+id/snackbar_action"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="0dp"
        android:layout_marginStart="0dp"
        android:layout_gravity="center_vertical|right|end"
        android:paddingTop="14dp"
        android:paddingBottom="14dp"
        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:visibility="gone"
        android:textColor="?attr/colorAccent"
        style="?attr/borderlessButtonStyle"/>
</merge>

所以这里我们通过获得这个layout来改变相关属性:

        View v = snackbar.getView();
        if(v!=null){
            //修改view的背景色
            v.setBackgroundColor(getResources().getColor(R.color.white));
            //获取Snackbar的message控件,修改字体颜色

            ((TextView)v.findViewById(R.id.snackbar_text))
            .setTextColor(getResources().getColor(R.color.black));
            //获取Snackbar的message控件,修改字体大小
            ((TextView) v.findViewById(R.id.snackbar_text))
            .setTextSize(snackbarTextSize);
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值