前言
收集Android開發中常用的一些代碼片段,留存記錄
代碼
禁止截屏
對安全性要求比較高的APP可以用得到
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE)
禁止輸入特殊字元
經曆過 Tester 的無限摧殘得出的結果,主要是使用正規表達式來完成校驗。
/**
* 禁止輸入表情以及特殊字元
*/
public static class EmojiExcludeFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
int type = Character.getType(source.charAt(i));
if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) {
return "";
}
}
String speChat = "[`~!@#$%^&*()+=|{}':;'\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘”“’?]";
Pattern pattern = Pattern.compile(speChat);
Matcher matcher = pattern.matcher(source.toString());
if (matcher.find()) {
return "";
} else {
return null;
}
}
}
調用如下:
edtRemark.setFilters(new InputFilter[]{new UIHelper.EmojiExcludeFilter()});
ViewPager無限滑動
用來做輪播圖(Banner)會用得到。
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
if(arg0 == 0 && (arg1 <= 0.001f && arg1 >= -0.001f)){
mVp.setCurrentItem(list.size()-2, false);
}else if(arg0 == list.size() - 1){
mVp.setCurrentItem(1, false);
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
判斷ViewPager的滑動方向
vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
float lastPositionOffset = 0L;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (lastPositionOffset > positionOffset && positionOffset != 0) {
//右滑
Log.e("direction", "right");
} else if (lastPositionOffset < positionOffset && positionOffset != 0) {
//左滑
Log.e("direction", "left");
}
lastPositionOffset = positionOffset;
}
@Override
public void onPageSelected(int position) { }
@Override
public void onPageScrollStateChanged(int state) {}
});
根據百分比計算顔色值
/**
* 根據目前的百分比 計算兩個顔色之間的值
*
* @param fraction 分值
* @param startValue 開始顔色
* @param endValue 結束顔色
* @return 計算得出的顔色
*/
public static Integer evaluate(float fraction, Integer startValue, Integer endValue) {
float[] startHsv = new float[3];
float[] endHsv = new float[3];
float[] outHsv = new float[3];
// 把 ARGB 轉換成 HSV
Color.colorToHSV(startValue, startHsv);
Color.colorToHSV(endValue, endHsv);
// 根據目前的百分比(fraction)所對應的顔色值
if (endHsv[0] - startHsv[0] > 180) {
endHsv[0] -= 360;
} else if (endHsv[0] - startHsv[0] < -180) {
endHsv[0] += 360;
}
outHsv[0] = startHsv[0] + (endHsv[0] - startHsv[0]) * fraction;
if (outHsv[0] > 360) {
outHsv[0] -= 360;
} else if (outHsv[0] < 0) {
outHsv[0] += 360;
}
outHsv[1] = startHsv[1] + (endHsv[1] - startHsv[1]) * fraction;
outHsv[2] = startHsv[2] + (endHsv[2] - startHsv[2]) * fraction;
// 根據目前的百分比(fraction)所對應的透明度
int alpha = startValue >> 24 + (int) ((endValue >> 24 - startValue >> 24) * fraction);
// 把 HSV 轉換回 ARGB 傳回
return Color.HSVToColor(alpha, outHsv);
}
ViewPager之間關聯
//-----------------------------關聯 下面的内容
int width = vpContent.getWidth();
//滑動内部Viewpager
vpContent.scrollTo((int) (width * position + width * positionOffset), 0);
//-----------------------------關聯 下面的内容
AlertDialog狀态不變黑
主要解決使用AlertDialog狀态欄變黑的問題
public class CustomDialog extends AlertDialog {
public CustomDialog(@NonNull Context context) {
super(context);
}
public CustomDialog(@NonNull Context context, @StyleRes int theme) {
super(context, theme);
}
protected CustomDialog(@NonNull Context context, boolean cancelable, OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 請使用自己的工具類擷取螢幕的高度
int screenHeight = ScreenUtils.getScreenHeight(getContext());
// 請使用自己的工具類擷取到狀态欄的高度
int statusBarHeight = ScreenUtils.getStatusHeight(getContext());
int dialogHeight = screenHeight - statusBarHeight;
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, dialogHeight);
}
}
判斷螢幕旋轉方向
// 判斷Android目前的螢幕是橫屏還是豎屏。橫豎屏判斷
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
//豎屏
} else {
//橫屏
}
手動設定方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
最後
未完待續、敬請期待!
我的部落格位址![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZlBnauIDNwEjY3UGM0UWN0EGM5QWMiNDZyIDO4UDOhJTOlVWMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpeg)
FullScreenDeveloper