Skip to content

Commit 2dd6c72

Browse files
committed
android 10黑暗模式适配
1 parent c31a5f3 commit 2dd6c72

File tree

16 files changed

+144
-71
lines changed

16 files changed

+144
-71
lines changed

app/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,3 @@ android {
129129
testImplementation rootProject.ext.test["mocktio"]
130130
}
131131
}
132-

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
tools:ignore="GoogleAppIndexingWarning">
2929
<activity
3030
android:name=".view.mine.CoinsRankActivity"
31-
android:launchMode="singleTop"/>
31+
android:launchMode="singleTop" />
3232
<activity
3333
android:name=".view.mine.CoinsActivity"
3434
android:launchMode="singleTop" />
@@ -61,8 +61,7 @@
6161
<activity
6262
android:name=".view.mine.CollectionActivity"
6363
android:launchMode="singleTop" />
64-
<activity
65-
android:name=".view.mine.SettingsActivity"/>
64+
<activity android:name=".view.mine.SettingsActivity" />
6665
<activity
6766
android:name=".view.LaunchActivity"
6867
android:theme="@style/AppTheme.LauncherActivity">

app/src/main/java/com/example/hy/wanandroid/App.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
import com.example.hy.wanandroid.di.module.CommonModule;
1212
import com.example.hy.wanandroid.utlis.CommonUtil;
1313
import com.example.hy.wanandroid.utlis.GlideApp;
14+
import com.example.hy.wanandroid.utlis.LanguageUtil;
15+
import com.example.hy.wanandroid.utlis.ThemeUtil;
16+
import com.example.hy.wanandroid.widget.dialog.LanguageDialog;
1417
import com.example.loading.Loading;
1518
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
1619
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
@@ -51,8 +54,8 @@ protected void attachBaseContext(Context base) {
5154
@Override
5255
public void onCreate() {
5356
super.onCreate();
54-
mContext = this;
5557
mAppComponent = DaggerAppComponent.builder().commonModule(new CommonModule(this)).build();
58+
mContext = this;
5659
initLitepal();
5760
initBugly();
5861
initLeakCanary();
@@ -61,29 +64,34 @@ public void onCreate() {
6164
.addLoadingView(R.layout.loading_view)
6265
.addEmptyView(R.layout.empty_view)
6366
.commit();
67+
ThemeUtil.setTheme(this, getAppComponent().getDataModel().getSelectedTheme());
6468
}
6569

6670
@Override
6771
public void onTrimMemory(int level) {
6872
super.onTrimMemory(level);
6973
//当应用所有UI隐藏时应该释放UI上所有占用的资源
70-
if(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN == level)
74+
if(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN == level) {
7175
GlideApp.get(this).clearMemory();
76+
}
7277
//根据level级别来清除一些图片缓存
7378
GlideApp.get(this).onTrimMemory(level);
7479
}
7580

7681
private void initLeakCanary() {
77-
if (!LeakCanary.isInAnalyzerProcess(this))
82+
if (!LeakCanary.isInAnalyzerProcess(this)) {
7883
LeakCanary.install(this);
84+
}
7985
}
8086

8187
private void initLitepal() {
8288
LitePal.getDatabase();
8389
}
8490

8591
private void initBugly() {
86-
if(BuildConfig.DEBUG) return;
92+
if(BuildConfig.DEBUG) {
93+
return;
94+
}
8795
Context context = getApplicationContext();
8896
// 获取当前包名
8997
String packageName = context.getPackageName();

app/src/main/java/com/example/hy/wanandroid/base/activity/BaseMvpActivity.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package com.example.hy.wanandroid.base.activity;
22

33
import android.content.Context;
4+
import android.content.res.Configuration;
5+
import android.view.ContextThemeWrapper;
46

57
import androidx.annotation.CallSuper;
8+
import androidx.annotation.NonNull;
69

10+
import com.example.hy.wanandroid.R;
711
import com.example.hy.wanandroid.utlis.LanguageUtil;
812
import com.example.hy.wanandroid.base.presenter.BasePresenter;
913
import com.example.hy.wanandroid.App;
14+
import com.example.hy.wanandroid.utlis.ThemeUtil;
1015

1116
/**
1217
* 封装了获取Presenter的Activity基类
@@ -20,7 +25,13 @@ public abstract class BaseMvpActivity<T extends BasePresenter> extends BaseActiv
2025
@Override
2126
protected void attachBaseContext(Context newBase) {
2227
String selectedLan = App.getContext().getAppComponent().getDataModel().getSelectedLanguage();
23-
super.attachBaseContext(LanguageUtil.attachBaseContext(newBase, selectedLan));
28+
Context context = LanguageUtil.attachBaseContext(newBase, selectedLan);
29+
super.attachBaseContext(context);
30+
}
31+
32+
@Override
33+
public void onConfigurationChanged(@NonNull Configuration newConfig) {
34+
super.onConfigurationChanged(newConfig);
2435
}
2536

2637
@Override

app/src/main/java/com/example/hy/wanandroid/config/Constant.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public class Constant {
7676
public static final String KEY_PREFS_THEME = "theme";
7777

7878
//utils
79-
public static final String EMAIL_ADDRESS = "1847796089@qq.com";
79+
public static final String EMAIL_ADDRESS = "jianyu9155@gmial.com";
8080

8181
//bugly
8282
public static final String BUGLY_ID = "a0768ddf34";

app/src/main/java/com/example/hy/wanandroid/utlis/LanguageUtil.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import android.os.LocaleList;
99
import android.util.DisplayMetrics;
1010

11+
import com.example.hy.wanandroid.BuildConfig;
12+
1113
import java.util.HashMap;
1214
import java.util.Locale;
1315
import java.util.Map;
@@ -42,7 +44,9 @@ public static boolean isSupportLanguage(String lan){
4244

4345

4446
/**
45-
* 配置Context,使它支持给定的语言
47+
* 配置Context,使它支持给定的语言,要在两处地方调用:
48+
* 1、选择完语言后调用,然后重启app
49+
* 2、每个activity的attachBaseContext方法中调用
4650
* @param context 要配置的配置Context
4751
* @param lan 要设置的语言
4852
* @return 配置过的Context
@@ -61,10 +65,11 @@ public static Context attachBaseContext(Context context, String lan){
6165
* @param lan 要替换的语言
6266
* @return 已经update过的Context
6367
*/
64-
private static Context updateConfigurationContext(Context context, String lan){
68+
public static Context updateConfigurationContext(Context context, String lan){
6569
Resources resources = context.getResources();
6670
Configuration configuration = resources.getConfiguration();
67-
configuration.locale = getSupportLanguage(lan);
71+
Locale locale = getSupportLanguage(lan);
72+
configuration.setLocale(locale);
6873
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
6974
resources.updateConfiguration(configuration, displayMetrics);
7075
return context;
@@ -73,27 +78,26 @@ private static Context updateConfigurationContext(Context context, String lan){
7378
/**
7479
* android7.0之后,需要set local 到 configuration
7580
* @param context 要set的Context
76-
* @param language 要替换的语言
81+
* @param lan 要替换的语言
7782
* @return 一个通过configuration创建的新的Context
7883
*/
79-
@TargetApi(Build.VERSION_CODES.N)
80-
private static Context createConfigurationContext(Context context, String language) {
84+
public static Context createConfigurationContext(Context context, String lan) {
8185
Resources resources = context.getResources();
8286
Configuration configuration = resources.getConfiguration();
83-
Locale locale = getSupportLanguage(language);
87+
Locale locale = getSupportLanguage(lan);
8488
configuration.setLocale(locale);
8589
return context.createConfigurationContext(configuration);
8690
}
8791

88-
8992
/**
9093
* 获取支持的语言的Locale, 没有就返回默认的系统语言Locale
9194
* @param lan 要支持的语言
9295
* @return 支持的语言的Locale
9396
*/
9497
public static Locale getSupportLanguage(String lan){
95-
if(isSupportLanguage(lan))
98+
if(isSupportLanguage(lan)) {
9699
return mSupportLans.get(lan);
100+
}
97101
return getSystemDefaultLanguage();
98102
}
99103

app/src/main/java/com/example/hy/wanandroid/view/LaunchActivity.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import android.content.res.Configuration;
99
import android.os.Bundle;
1010
import android.os.Handler;
11+
import android.os.Looper;
1112
import android.util.Log;
1213
import android.view.animation.AccelerateInterpolator;
1314

1415
import com.example.hy.wanandroid.R;
1516
import com.example.hy.wanandroid.App;
17+
import com.example.hy.wanandroid.utlis.ThemeUtil;
1618
import com.example.hy.wanandroid.widget.customView.SVGBgView;
1719

1820
public class LaunchActivity extends AppCompatActivity {
@@ -27,7 +29,7 @@ protected void onCreate(Bundle savedInstanceState) {
2729
.setDuration(2800);
2830
animator.setInterpolator(new AccelerateInterpolator());
2931
animator.start();
30-
new Handler().postDelayed(() -> {
32+
getWindow().getDecorView().postDelayed(() -> {
3133
startActivity(new Intent(LaunchActivity.this, MainActivity.class));
3234
overridePendingTransition(R.anim.anim_launch_enter, 0);
3335
finish();

app/src/main/java/com/example/hy/wanandroid/view/homepager/ArticleActivity.java

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import android.widget.LinearLayout;
2121
import android.widget.TextView;
2222

23+
import com.example.hy.wanandroid.BuildConfig;
2324
import com.example.hy.wanandroid.R;
2425
import com.example.hy.wanandroid.base.activity.BaseMvpActivity;
2526
import com.example.hy.wanandroid.entity.ArticleBean;
@@ -30,6 +31,7 @@
3031
import com.example.hy.wanandroid.utlis.NetWorkUtil;
3132
import com.example.hy.wanandroid.utlis.ShareUtil;
3233
import com.example.hy.wanandroid.utlis.StatusBarUtil;
34+
import com.example.hy.wanandroid.utlis.ThemeUtil;
3335
import com.example.hy.wanandroid.view.mine.LoginActivity;
3436
import com.example.hy.wanandroid.widget.layout.WebLayout;
3537
import com.just.agentweb.AgentWeb;
@@ -95,8 +97,9 @@ protected ArticlePresenter getPresenter() {
9597
@Override
9698
protected void initView() {
9799
super.initView();
98-
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT <Build.VERSION_CODES.LOLLIPOP)
100+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT <Build.VERSION_CODES.LOLLIPOP) {
99101
StatusBarUtil.setHeightAndPadding(this, tlCommon);
102+
}
100103
initToolBar();
101104
}
102105

@@ -116,6 +119,9 @@ private void initToolBar() {
116119
@Override
117120
protected void initData() {
118121
super.initData();
122+
123+
WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG);
124+
119125
mAgentWeb = AgentWeb.with(this)
120126
.setAgentWebParent(flContainer, new LinearLayout.LayoutParams(-1, -1))
121127
.useDefaultIndicator(getResources().getColor(R.color.colorPrimary))
@@ -141,8 +147,12 @@ protected void initData() {
141147
public boolean onCreateOptionsMenu(Menu menu) {
142148
getMenuInflater().inflate(R.menu.menu_article, menu);
143149
mCollectionItem = menu.findItem(R.id.item_collection);
144-
if(isHideCollection) mCollectionItem.setVisible(false);
145-
if(isCollection) mCollectionItem.setTitle(getString(R.string.articleActivity_cancel_collection));
150+
if(isHideCollection) {
151+
mCollectionItem.setVisible(false);
152+
}
153+
if(isCollection) {
154+
mCollectionItem.setTitle(getString(R.string.articleActivity_cancel_collection));
155+
}
146156
return true;
147157
}
148158

@@ -153,7 +163,9 @@ public boolean onOptionsItemSelected(MenuItem item) {
153163
shareText();
154164
break;
155165
case R.id.item_collection:
156-
if(mArticleId == -1) return true;
166+
if(mArticleId == -1) {
167+
return true;
168+
}
157169
collection();
158170
break;
159171
case R.id.item_browser:
@@ -172,8 +184,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
172184
public void onActivityResult(int requestCode, int resultCode, Intent data) {
173185
super.onActivityResult(requestCode, resultCode, data);
174186
if (resultCode == RESULT_OK && requestCode == Constant.REQUEST_LOGIN) {
175-
if (isCollection) mPresenter.unCollectArticle(mArticleId);
176-
else mPresenter.collectArticle(mArticleId);
187+
if (isCollection) {
188+
mPresenter.unCollectArticle(mArticleId);
189+
} else {
190+
mPresenter.collectArticle(mArticleId);
191+
}
177192
}
178193
}
179194

@@ -223,10 +238,11 @@ public void unCollectArticleSuccess() {
223238

224239
@Override
225240
public void collect() {
226-
if(isCollection)
241+
if(isCollection) {
227242
mPresenter.unCollectArticle(mArticleId);
228-
else
243+
} else {
229244
mPresenter.collectArticle(mArticleId);
245+
}
230246
}
231247

232248
/**
@@ -253,34 +269,37 @@ private void copy(Context context, String text) {
253269
* 分享
254270
*/
255271
private void shareText() {
256-
if(!TextUtils.isEmpty(mTitle) && !TextUtils.isEmpty(mAddress))
272+
if(!TextUtils.isEmpty(mTitle) && !TextUtils.isEmpty(mAddress)) {
257273
ShareUtil.shareText(
258274
this,
259275
getString(R.string.articleActivity_share_text) + "\n" + mTitle + "\n" + mAddress,
260276
getString(R.string.articleActivity_share_to)
261277
);
262-
else
278+
} else {
263279
showToast(getString(R.string.articleActivity_share_fail));
280+
}
264281
}
265282

266283
/**
267284
* 配置WebView
268285
*/
269286
@SuppressLint("SetJavaScriptEnabled")
270287
private void setSettings(WebSettings settings) {
271-
if (mPresenter.getNoImageState())
288+
if (mPresenter.getNoImageState()) {
272289
settings.setBlockNetworkImage(true);
273-
else
290+
} else {
274291
settings.setBlockNetworkImage(false);
292+
}
275293

276294
if(mPresenter.getAutoCacheState()){
277295
settings.setAppCacheEnabled(true);
278296
settings.setDatabaseEnabled(true);
279297
settings.setDatabaseEnabled(true);
280-
if(NetWorkUtil.isNetworkConnected(this))
298+
if(NetWorkUtil.isNetworkConnected(this)) {
281299
settings.setCacheMode(WebSettings.LOAD_DEFAULT);//(默认)根据cache-control决定是否从网络上取数据
282-
else
300+
} else {
283301
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
302+
}
284303
}else {
285304
settings.setAppCacheEnabled(false);
286305
settings.setDatabaseEnabled(false);
@@ -301,6 +320,11 @@ private void setSettings(WebSettings settings) {
301320
settings.setLoadWithOverviewMode(true);
302321
//自适应屏幕
303322
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
323+
324+
//android 10支持WebView暗黑模式
325+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
326+
settings.setForceDark(ThemeUtil.isDarkTheme(this) ? WebSettings.FORCE_DARK_ON : WebSettings.FORCE_DARK_OFF);
327+
}
304328
}
305329

306330
/**

0 commit comments

Comments
 (0)