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)


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

查看所有标签

猜你喜欢:

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

Design for Hackers

Design for Hackers

David Kadavy / Wiley / 2011-10-18 / USD 39.99

Discover the techniques behind beautiful design?by deconstructing designs to understand them The term ?hacker? has been redefined to consist of anyone who has an insatiable curiosity as to how thin......一起来看看 《Design for Hackers》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具