【大前端】常用 Android 工具类整理

#王者杯·14天创作挑战营·第5期#


📌 常用 Android 工具类整理

1. 日志与调试

  • LogUtils
    封装系统 Log,支持统一 TAG、开关控制、日志文件存储。

  • CrashHandler
    全局捕获异常,保存到文件或上报服务器。


2. UI 与显示

  • ToastUtils
    封装 Toast,支持全局 Context、安全线程调用。

  • SnackbarUtils
    方便调用带 Action 的 Snackbar。

  • DensityUtils
    px/dp/sp 转换、屏幕宽高获取。

  • KeyboardUtils
    显示/隐藏软键盘、判断键盘是否弹出。

  • StatusBarUtils
    设置沉浸式状态栏、修改状态栏字体颜色。


3. 设备信息

  • DeviceUtils
    获取设备 ID、系统版本、厂商型号、IMEI/AndroidID。

  • AppUtils
    获取 App 版本号、包名、签名校验、跳转应用市场。

  • NetworkUtils
    判断网络是否可用、WiFi/移动网络、获取 IP 地址。

  • BatteryUtils
    电量、充电状态。


4. 存储与文件

  • FileUtils
    文件读写、删除、复制、大小计算。

  • SPUtils
    SharedPreferences 封装,支持存储任意对象(Gson/JSON)。

  • CacheUtils
    磁盘缓存、内存缓存。

  • PathUtils
    获取内置存储、外部存储路径,App 缓存路径。


5. 时间与日期

  • TimeUtils
    时间戳转换、格式化、获取当前时间。

  • DateUtils
    日期计算:天数差、周几、月份。


6. 正则与校验

  • RegexUtils
    手机号、邮箱、身份证、URL、IP 等验证。

  • StringUtils
    判空、反转、截取、大小写转换、MD5/SHA 加密。


7. 线程与任务

  • ThreadUtils
    快速切换主线程/子线程执行。

  • ExecutorUtils
    封装线程池,任务调度。


8. 图像与媒体

  • ImageUtils
    Bitmap 与 Drawable 转换、缩放、压缩、圆角/圆形处理。

  • ScreenShotUtils
    截屏、保存到相册。

  • VideoUtils
    获取视频缩略图、时长。


9. 系统功能调用

  • IntentUtils
    快速调用系统功能:打电话、发短信、打开相机、浏览器。

  • ClipboardUtils
    复制/粘贴文本。

  • NotificationUtils
    通知栏管理。

  • VibratorUtils
    控制震动。


10. 安全与加密

  • EncryptUtils
    MD5、SHA、Base64、AES、RSA。

  • SignUtils
    签名校验、接口加密。


📚 推荐开源工具类库

如果不想自己封装,可以直接使用一些成熟的工具库:

  • AndroidUtilCode → Blankj 大佬维护的工具类合集,几乎涵盖所有场景。

  • Guava (Google) → 集合、缓存、并发工具。

  • Apache Commons → 字符串、IO 工具。


📌 1. 日志工具类 LogUtils

package com.example.utils;

import android.util.Log;

public class LogUtils {
    private static final String TAG = "AppLog";
    private static boolean isDebug = true; // 控制日志开关

    public static void setDebug(boolean debug) {
        isDebug = debug;
    }

    public static void d(String msg) {
        if (isDebug) Log.d(TAG, msg);
    }

    public static void i(String msg) {
        if (isDebug) Log.i(TAG, msg);
    }

    public static void w(String msg) {
        if (isDebug) Log.w(TAG, msg);
    }

    public static void e(String msg) {
        if (isDebug) Log.e(TAG, msg);
    }
}

📌 2. Toast 工具类 ToastUtils

package com.example.utils;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;

public class ToastUtils {
    private static Toast toast;
    private static final Handler handler = new Handler(Looper.getMainLooper());

    public static void show(final Context context, final String msg) {
        handler.post(() -> {
            if (toast != null) {
                toast.cancel();
            }
            toast = Toast.makeText(context.getApplicationContext(), msg, Toast.LENGTH_SHORT);
            toast.show();
        });
    }
}

📌 3. SharedPreferences 工具类 SPUtils

package com.example.utils;

import android.content.Context;
import android.content.SharedPreferences;

public class SPUtils {
    private static final String FILE_NAME = "app_prefs";

    public static void put(Context context, String key, String value) {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
        sp.edit().putString(key, value).apply();
    }

    public static String get(Context context, String key, String defValue) {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
        return sp.getString(key, defValue);
    }

    public static void remove(Context context, String key) {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
        sp.edit().remove(key).apply();
    }

    public static void clear(Context context) {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
        sp.edit().clear().apply();
    }
}

📌 4. 屏幕尺寸/单位转换 DensityUtils

package com.example.utils;

import android.content.Context;
import android.util.DisplayMetrics;

public class DensityUtils {
    public static int dp2px(Context context, float dp) {
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        return (int) (dp * metrics.density + 0.5f);
    }

    public static int px2dp(Context context, float px) {
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        return (int) (px / metrics.density + 0.5f);
    }

    public static int sp2px(Context context, float sp) {
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        return (int) (sp * metrics.scaledDensity + 0.5f);
    }

    public static int px2sp(Context context, float px) {
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        return (int) (px / metrics.scaledDensity + 0.5f);
    }
}

📌 5. 网络状态工具类 NetworkUtils

package com.example.utils;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetworkUtils {
    public static boolean isConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm != null) {
            NetworkInfo info = cm.getActiveNetworkInfo();
            return info != null && info.isConnected();
        }
        return false;
    }

    public static boolean isWifi(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm != null) {
            NetworkInfo info = cm.getActiveNetworkInfo();
            return info != null && info.getType() == ConnectivityManager.TYPE_WIFI;
        }
        return false;
    }
}

📌 6. 时间工具类 TimeUtils

package com.example.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class TimeUtils {
    public static String getNowTime(String format) {
        return new SimpleDateFormat(format, Locale.getDefault()).format(new Date());
    }

    public static String millis2String(long millis, String format) {
        return new SimpleDateFormat(format, Locale.getDefault()).format(new Date(millis));
    }

    public static long string2Millis(String time, String format) {
        try {
            return new SimpleDateFormat(format, Locale.getDefault()).parse(time).getTime();
        } catch (Exception e) {
            return -1;
        }
    }
}

📌 7. 文件工具类 FileUtils

package com.example.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileUtils {
    public static boolean copy(File src, File dest) {
        try {
            FileInputStream fis = new FileInputStream(src);
            FileOutputStream fos = new FileOutputStream(dest);
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }
            fis.close();
            fos.close();
            return true;
        } catch (IOException e) {
            return false;
        }
    }

    public static boolean delete(File file) {
        if (file.isDirectory()) {
            for (File child : file.listFiles()) {
                delete(child);
            }
        }
        return file.delete();
    }

    public static long getFileSize(File file) {
        if (!file.exists()) return 0;
        if (file.isFile()) return file.length();
        long size = 0;
        for (File f : file.listFiles()) {
            size += getFileSize(f);
        }
        return size;
    }
}

⚡ 这里写了 7 个常用工具类(日志、Toast、SP、屏幕单位、网络、时间、文件),这些是日常开发里用得最多的。

<think>嗯,用户想了解Android开发中使用的前端编程语言。首先,我需要明确“前端语言”在这里指的是什么。通常,前端指的是用户界面和用户体验相关的部分,但在Android开发中,这个术语可能有些不同。Android应用的前端可能包括布局、UI组件、交互逻辑等,而后端则涉及数据处理、网络请求等。 首先,我得回顾一下常见的Android开发语言。Java是传统的主要语言,但近年来Kotlin被Google推荐为首选。此外,还有像C#通过Xamarin或Unity进行开发的可能性,以及跨平台框架如Flutter使用的Dart。另外,JavaScript和TypeScript在React Native中也有应用。 用户提到的引用中有提到Java和Android Studio的关系,以及C#在跨平台开发中的应用。例如引用[2]指出Java通过Android Studio被广泛使用,引用[3]和[4]提到C#在跨平台和游戏开发中的用途。这可能意味着用户不仅关心原生开发,还涉及跨平台方案。 接下来,我需要整理这些语言,并说明它们在Android前端开发中的角色。例如,Kotlin和Java用于原生UI开发,而XML用于布局。跨平台方案如Flutter使用Dart,React Native使用JS/TS,这些虽然属于跨平台,但同样涉及前端界面的构建。 还要注意用户可能混淆了前端和后端,但根据问题,应聚焦在构建用户界面的语言上。可能需要解释每种语言的特点、使用场景以及它们的优缺点,帮助用户根据需求选择。 另外,用户提供的引用中有提到C#用于Unity游戏开发,这可能也是Android应用的一部分,尤其是游戏类应用。因此,C#在这里作为游戏前端开发的语言需要提及。 最后,要确保回答结构清晰,分点说明,并生成相关问题引导用户进一步思考。同时,检查是否需要引用站内的资料,比如引用[2]关于Java和Android Studio,引用[3][4]关于C#的应用。</think>### Android开发中使用的前端编程语言详解 在Android开发中,“前端”主要指用户界面(UI)和交互逻辑的实现。以下为常用前端编程语言及相关技术解析: --- #### 1. **Kotlin**(原生开发首选) - **定位**:Google官方推荐的Android开发语言,完全兼容Java。 - **特点**: - 语法简洁,减少模板代码(如空指针安全特性)。 - 支持函数式编程,简化异步任务处理(如协程)。 - 与Java代码无缝互操作,可复用现有Java库。 - **应用场景**: - 开发高性能原生Android应用。 - 需要长期维护的企业级项目(如银行、电商类App)。 - **示例代码**: ```kotlin // 按钮点击事件处理 button.setOnClickListener { textView.text = "Hello Kotlin" } ``` --- #### 2. **Java**(传统主力语言) - **定位**:Android开发的原始官方语言,生态成熟。 - **特点**: - 丰富的类库支持(如Android SDK)。 - 严格的面向对象设计,适合型项目。 - **现状**: - 虽逐渐被Kotlin取代,但存量代码仍广泛使用[^2]。 - 新项目建议优先选择Kotlin。 - **关联工具**:Android Studio(基于IntelliJ IDEA的官方IDE)[^1]。 --- #### 3. **XML**(布局与资源定义) - **作用**:定义UI布局、动画、菜单等静态资源。 - **特点**: - 声明式语法,与逻辑代码(Kotlin/Java)分离。 - 支持响应式布局(如`ConstraintLayout`)。 - **示例**: ```xml <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello XML"/> ``` --- #### 4. **Dart**(跨平台方案 - Flutter) - **定位**:Google推出的跨平台框架Flutter的编程语言。 - **优势**: - 一套代码同时生成Android/iOS应用。 - 高性能渲染引擎(Skia)实现接近原生体验。 - 热重载功能提升开发效率。 - **适用场景**: - 快速迭代的创业项目。 - 需要兼顾多平台的中小型应用。 --- #### 5. **JavaScript/TypeScript**(跨平台方案 - React Native) - **定位**:Meta推出的基于React生态的跨平台框架。 - **特点**: - 使用Web技术栈(JSX、CSS-in-JS)。 - 依赖原生组件桥接,性能略低于Flutter。 - **典型应用**:需要复用Web开发者资源的项目。 --- #### 6. **C#**(游戏开发方向) - **关联框架**:Unity游戏引擎。 - **优势**: - 支持2D/3D游戏开发,拥有成熟的物理引擎。 - 跨平台发布能力(包括Android、iOS、PC等)[^3][^4]。 - **典型应用**:移动端游戏、AR/VR应用。 --- ### 语言对比与选型建议 | 语言 | 类型 | 性能 | 学习曲线 | 适用场景 | |------------|------------|--------|----------|------------------------------| | Kotlin | 原生 | 高 | 中等 | 复杂原生应用 | | Dart | 跨平台 | 较高 | 低 | 快速开发跨平台应用 | | JavaScript | 跨平台 | 中等 | 低 | Web团队转型移动开发 | | C# | 游戏开发 | 高 | 高 | 游戏/AR应用 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值