用于记录Android开发中一些常用的代码和小技巧,方便查询和使用。 目前记录的有:
使用gradle生成不同的包名和应用名
使用gradle往资源文件中添加数据
使用gradle自动生成apk文件名
Android 6.0以上实现深色模式
设置TextView中的可点击链接
Gradle 配置构建类型和产品类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 flavorDimensions "default" productFlavors { dev { resValue("string" , "app_name" , "影库(Dev)" ) } prod { resValue("string" , "app_name" , "影库" ) } } buildTypes { debug { applicationIdSuffix ".debug" minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt' ), 'proguard-rules.pro' debuggable true jniDebuggable false renderscriptDebuggable false renderscriptOptimLevel 3 zipAlignEnabled true shrinkResources false ndk { abiFilters "armeabi" , "armeabi-v7a" , "x86" } } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt' ), 'proguard-rules.pro' ndk { abiFilters "armeabi" , "armeabi-v7a" } } }
通过gradle写入字符串到资源文件 1 2 3 4 5 6 7 8 9 10 buildTypes.each { Properties properties = new Properties() properties.load(project .rootProject.file ("local.properties" ).newDataInputStream()) def tmdbApiKey = properties.getProperty("tmdb_api_key" , "" ) it.buildConfigField 'String' , "TMDB_API_KEY" , tmdbApiKey it.resValue 'string' , "api_key" , tmdbApiKey }
指定构建生成的apk名称 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 applicationVariants.all { variant -> variant.outputs.all { output -> delete fileTree (output.outputFile.parent) def SEP = "_" def appName = "影库" def dateTime = new Date().format("yyyyMMdd_HHmm" ) def productFlavor = variant.productFlavors[0 ].name def buildType = variant.buildType.name def versionCode = variant.versionCode def versionName = variant.versionName def apkName = appName + SEP + dateTime + SEP + productFlavor + SEP + versionCode + SEP + versionName + ".apk" outputFileName = apkName } }
UI Android 6.0以上深色模式 1 2 3 4 5 6 7 8 9 10 11 12 13 <style name ="Base.AppTheme" parent ="Theme.MaterialComponents.DayNight.NoActionBar" > <item name ="colorPrimary" > @color/colorPrimaryitem > <item name ="colorPrimaryDark" > @color/colorPrimaryDarkitem > <item name ="android:windowLightStatusBar" tools:targetApi ="m" > @bool/use_light_statusitem > <item name ="android:statusBarColor" > @color/transparentitem > <item name ="android:windowLightNavigationBar" tools:targetApi ="o_mr1" > @bool/use_light_navigationitem > style >
改变activity的主题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @SuppressLint("WrongConstant" ) fun AppCompatActivity.updateForTheme (theme: Theme ) = when (theme) { Theme.DARK -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES Theme.LIGHT -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_NO Theme.SYSTEM -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM Theme.BATTERY_SAVER -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY } @SuppressLint("WrongConstant" ) fun updateForTheme (delegate: AppCompatDelegate , theme: Theme ) = when (theme) { Theme.DARK -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES Theme.LIGHT -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_NO Theme.SYSTEM -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM Theme.BATTERY_SAVER -> delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY }
设置TextView中的可点击链接 TextView加载Html后,可能需要对于html中的链接可以点击,可以采用如下代码实现点击效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 protected void makeLinkClickable (SpannableStringBuilder strBuilder, final URLSpan span) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan clickable = new ClickableSpan() { public void onClick (View view) { } }; strBuilder.setSpan(clickable, start, end, flags); strBuilder.removeSpan(span); } protected void setTextViewHTML (TextView text, String html) { CharSequence sequence = Html.fromHtml(html); SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence); URLSpan[] urls = strBuilder.getSpans(0 , sequence.length(), URLSpan.class); for (URLSpan span : urls) { makeLinkClickable(strBuilder, span); } text.setText(strBuilder); text.setMovementMethod(LinkMovementMethod.getInstance()); }