扩展Snackbar 使其支持居中显示
https://github.com/nispok/snackbar
默認(rèn)Snackbar支持底部或者頂部顯示,不支持居中顯示
查看Snackbar.java的源碼可以看到createMarginLayoutParams方法中有位置的處理SnackbarPosition ,
針對(duì)不同的顯示位置設(shè)置對(duì)應(yīng)的params規(guī)則,這里我們將表示位置的枚舉SnackbarPosition中添加一種類(lèi)型PARENT_CENTER
public static enum SnackbarPosition {TOP(Gravity.TOP), BOTTOM(Gravity.BOTTOM), BOTTOM_CENTER(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL), PARENT_CENTER(Gravity.CENTER_VERTICAL); }createMarginLayoutParams方法中部分邏輯修改如下:
else if (viewGroup instanceof RelativeLayout) {RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);if (position == SnackbarPosition.TOP)params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);else if(position == SnackbarPosition.BOTTOM)params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);else if(position == SnackbarPosition.PARENT_CENTER)params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);return params;}?
如果viewgGroup的類(lèi)型不是RelativeLayout,也可以不修改createMarginLayoutParams方法中的邏輯。
?
因?yàn)?#xff0c;提示條在中間顯示默認(rèn)位移的動(dòng)畫(huà)效果有些突兀,這里我們修改下居中顯示時(shí)的動(dòng)畫(huà)效果,修改為透明度動(dòng)畫(huà)。
修改兩個(gè)獲取動(dòng)畫(huà)資源函數(shù):
/*** @param snackbarPosition* @return the animation resource used by this {@link com.nispok.snackbar.Snackbar} instance* to enter the view*/@AnimRespublic static int getInAnimationResource(SnackbarPosition snackbarPosition) {return snackbarPosition == SnackbarPosition.TOP ? R.anim.sb__top_in :(snackbarPosition == SnackbarPosition.PARENT_CENTER ? R.anim.sb__center_in : R.anim.sb__bottom_in);}/*** @param snackbarPosition* @return the animation resource used by this {@link com.nispok.snackbar.Snackbar} instance* to exit the view*/@AnimRespublic static int getOutAnimationResource(SnackbarPosition snackbarPosition) {return snackbarPosition == SnackbarPosition.TOP ? R.anim.sb__top_out :(snackbarPosition == SnackbarPosition.PARENT_CENTER ? R.anim.sb__center_out : R.anim.sb__bottom_out);}anim文件夾下增加sb__center_in sb__center_out兩個(gè)配置文件如下:
sb__center_in.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"><alpha xmlns:android="http://schemas.android.com/apk/res/android"android:duration="500"android:fromAlpha="0"android:interpolator="@interpolator/sb__decelerate_cubic"android:toAlpha="1" /> </set>sb__center_out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"><alpha xmlns:android="http://schemas.android.com/apk/res/android"android:duration="500"android:fromAlpha="1"android:interpolator="@interpolator/sb__decelerate_cubic"android:toAlpha="0" /> </set>?
在sample的示例代碼SnackSampleActivity中單行顯示文本的Snackbar的代碼修改如下:
singleLineButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SnackbarManager.show(Snackbar.with(SnackbarSampleActivity.this).position(Snackbar.SnackbarPosition.PARENT_CENTER).margin(25).text("Center Single-line snackbar"));}});?
最終顯示效果如下:
? ??
?
轉(zhuǎn)載于:https://www.cnblogs.com/sphere/p/7765887.html
總結(jié)
以上是生活随笔為你收集整理的扩展Snackbar 使其支持居中显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第一次scrum冲刺
- 下一篇: VC ADO连接ACCESS步骤及错误处