Android 开发中的代码片段(1)

栏目: IOS · Android · 发布时间: 6年前

内容简介:收集Android开发中常用的一些代码片段,留存记录对安全性要求比较高的APP可以用得到经历过 Tester 的无限摧残得出的结果,主要是使用正则表达式来完成校验。

前言

收集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);

# 最后

未完待续、敬请期待!

我的博客地址

Android 开发中的代码片段(1)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高效程序员的45个习惯

高效程序员的45个习惯

Venkat Subramaniam、Andy Hunt / 钱安川、郑柯 / 人民邮电出版社 / 2010-01 / 35.00元

“书中‘切身感受’的内容非常有价值——通过它我们可以做到学有所思,思有所悟,悟有所行。” ——Nathaniel T. Schutta,《Ajax基础教程》作者 “此书通过常理和经验,阐述了为什么你应该在项目中使用敏捷方法。最难得的是,这些行之有效的实战经验,竟然从一本书中得到了。” ——Matthew Johnson,软件工程师 十年来,软件行业发生了翻天覆地的变化。敏捷......一起来看看 《高效程序员的45个习惯》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具