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);
}