微信号:jszj2014215

介绍:主要分享移动互联网的相关产品和资讯,关注你将学习到更多,在互联网的当下你会赚更多的钱...

(三)Android开发人员不得不收集的代码

2016-09-14 10:25 Android技术之家

获取屏幕截图

/** * 获取当前屏幕截图,包含状态栏 */public static Bitmap snapShotWithStatusBar(Activity activity) {
    View view = activity.getWindow().getDecorView();
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();
    Bitmap bmp = view.getDrawingCache();    int width = getScreenWidth(activity);    int height = getScreenHeight(activity);
    Bitmap bp = null;
    bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
    view.destroyDrawingCache();    return bp;
}/** * 获取当前屏幕截图,不包含状态栏 */public static Bitmap snapShotWithoutStatusBar(Activity activity) {
    View view = activity.getWindow().getDecorView();
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();
    Bitmap bmp = view.getDrawingCache();
    Rect frame = new Rect();
    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);    int statusBarHeight = frame.top;    int width = getScreenWidth(activity);    int height = getScreenHeight(activity);
    Bitmap bp = null;
    bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
            - statusBarHeight);
    view.destroyDrawingCache();    return bp;
}

设置透明状态栏,需在setContentView之前调用

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {    //透明状态栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);    //透明导航栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}// 需在顶部控件布局中加入以下属性让内容出现在状态栏之下android:clipToPadding="true" android:fitsSystemWindows="true"

键盘相关

避免输入法面板遮挡

// 在manifest.xml中activity中设置android:windowSoftInputMode="stateVisible|adjustResize"

动态隐藏软键盘

/** * 动态隐藏软键盘 */public static void hideSoftInput(Activity activity) {
    View view = activity.getWindow().peekDecorView();    if (view != null) {
        InputMethodManager inputmanger = (InputMethodManager) activity
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}/** * 动态隐藏软键盘 */public static void hideSoftInput(Context context, EditText edit) {
    edit.clearFocus();
    InputMethodManager inputmanger = (InputMethodManager) context
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    inputmanger.hideSoftInputFromWindow(edit.getWindowToken(), 0);
}

点击屏幕空白区域隐藏软键盘

// 方法1:在onTouch中处理,未获焦点则隐藏/** * 在onTouch中处理,未获焦点则隐藏 */@Overridepublic boolean onTouchEvent(MotionEvent event) {    if (null != this.getCurrentFocus()) {
        InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);        return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
    }    return super.onTouchEvent(event);
}// 方法2:根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,需重写dispatchTouchEvent@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        View v = getCurrentFocus();        if (isShouldHideKeyboard(v, ev)) {
            hideKeyboard(v.getWindowToken());
        }
    }    return super.dispatchTouchEvent(ev);
}/** * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘 */private boolean isShouldHideKeyboard(View v, MotionEvent event) {    if (v != null && (v instanceof EditText)) {        int[] l = {0, 0};
        v.getLocationInWindow(l);        int left = l[0],
                top = l[1],
                bottom = top + v.getHeight(),
                right = left + v.getWidth();        return !(event.getX() > left && event.getX() < right
                && event.getY() > top && event.getY() < bottom);
    }    return false;
}/** * 获取InputMethodManager,隐藏软键盘 */private void hideKeyboard(IBinder token) {    if (token != null) {
        InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

动态显示软键盘

/** * 动态显示软键盘 */public static void showSoftInput(Context context, EditText edit) {
    edit.setFocusable(true);
    edit.setFocusableInTouchMode(true);
    edit.requestFocus();
    InputMethodManager inputManager = (InputMethodManager) context
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.showSoftInput(edit, 0);
}

切换键盘显示与否状态

/** * 切换键盘显示与否状态 */public static void toggleSoftInput(Context context, EditText edit) {
    edit.setFocusable(true);
    edit.setFocusableInTouchMode(true);
    edit.requestFocus();
    InputMethodManager inputManager = (InputMethodManager) context
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}

正则相关

正则工具类

public class RegularUtils {    //验证手机号
    private static final String REGEX_MOBILE = "^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$";    //验证座机号,正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx
    private static final String REGEX_TEL = "^0\\d{2,3}[- ]?\\d{7,8}";    //验证邮箱
    private static final String REGEX_EMAIL = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";    //验证url
    private static final String REGEX_URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?";    //验证汉字
    private static final String REGEX_CHZ = "^[\\u4e00-\\u9fa5]+$";    //验证用户名,取值范围为a-z,A-Z,0-9,"_",汉字,不能以"_"结尾,用户名必须是6-20位
    private static final String REGEX_USERNAME = "^[\\w\\u4e00-\\u9fa5]{6,20}(?<!_)$";    //验证IP地址
    private static final String REGEX_IP = "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";    //If u want more please visit http://toutiao.com/i6231678548520731137/

    /**     * @param string 待验证文本     * @return 是否符合手机号格式     */
    public static boolean isMobile(String string) {        return isMatch(REGEX_MOBILE, string);
    }    /**     * @param string 待验证文本     * @return 是否符合座机号码格式     */
    public static boolean isTel(String string) {        return isMatch(REGEX_TEL, string);
    }    /**     * @param string 待验证文本     * @return 是否符合邮箱格式     */
    public static boolean isEmail(String string) {        return isMatch(REGEX_EMAIL, string);
    }    /**     * @param string 待验证文本     * @return 是否符合网址格式     */
    public static boolean isURL(String string) {        return isMatch(REGEX_URL, string);
    }    /**     * @param string 待验证文本     * @return 是否符合汉字     */
    public static boolean isChz(String string) {        return isMatch(REGEX_CHZ, string);
    }    /**     * @param string 待验证文本     * @return 是否符合用户名     */
    public static boolean isUsername(String string) {        return isMatch(REGEX_USERNAME, string);
    }    /**     * @param regex  正则表达式字符串     * @param string 要匹配的字符串     * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;     */
    public static boolean isMatch(String regex, String string) {        return !TextUtils.isEmpty(string) && Pattern.matches(regex, string);
    }
}

加解密相关

MD5加密

/** * MD5加密 */public static String encryptMD5(String data) throws Exception {
    MessageDigest md5 = MessageDigest.getInstance("MD5");    return new BigInteger(md5.digest(data.getBytes())).toString(16);
}

SHA加密

/** * SHA加密 */public static String encryptSHA(String data) throws Exception {
    MessageDigest sha = MessageDigest.getInstance("SHA");    return new BigInteger(sha.digest(data.getBytes())).toString(32);
}

未归类

获取服务是否开启

/** * 获取服务是否开启 */public static boolean isRunningService(String className, Context context) {    //进程的管理者,活动的管理者
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);    //获取正在运行的服务
    List<RunningServiceInfo> runningServices = activityManager.getRunningServices(1000);//maxNum 返回正在运行的服务的上限个数,最多返回多少个服务
    //遍历集合
    for (RunningServiceInfo runningServiceInfo : runningServices) {        //获取控件的标示
        ComponentName service = runningServiceInfo.service;        //获取正在运行的服务的全类名
        String className2 = service.getClassName();        //将获取到的正在运行的服务的全类名和传递过来的服务的全类名比较,一直表示服务正在运行  返回true,不一致表示服务没有运行  返回false
        if (className.equals(className2)) {            return true;
        }
    }    return false;
}


 
Android技术之家 更多文章 Android开发人员不得不收集的代码 Gradle打包APK的一些小技巧和productFlavor配置 AndroidStudio之如何使用aar Android自定义控件常用方法总结 软件架构入门,看这篇就够了···
猜您喜欢 从Object-C到Swift 可扩展的Node.js社交游戏后台架构-猫友会大讲坛第3期 NGINX Plus 现在完全支持 HTTP/2 如何使用Ant脚本编译出Jar和Apk包 Python学习之正则表达式