日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android夜间模式的几种实现

發布時間:2025/3/20 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android夜间模式的几种实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、直接修改widget顏色,這種方式實現起來最簡單,但需要每個控件都去修改,太過復雜。例如:

/*** 相應交互,修改控件顏色* @param view*/public void onMethod1Click(View view) {if (view.getId() == R.id.btn_method1) {int theme = NightModeUtils.getSwitchDayNightMode(this);NightModeUtils.setBackGroundColor(this, mRootView, theme);NightModeUtils.setTextColor(this, findViewById(R.id.text), theme);NightModeUtils.setDayNightMode(this, theme);}}

NightModeUitls修改顏色方法

/*** 修改背景色* @param context* @param view* @param theme*/public static void setBackGroundColor(Context context, View view, int theme) {int color = context.getResources().getColor(theme == THEME_SUN ? R.color.light_color : R.color.night_color);view.setBackgroundColor(color);}/*** 修改文字色* @param context* @param view* @param theme*/public static void setTextColor(Context context, View view, int theme) {int color = context.getResources().getColor(theme == THEME_SUN ? R.color.night_color : R.color.light_color);TextView textView = (TextView)view;textView.setTextColor(color);}

二、通過修改Theme,更新應用主題。這種方法問題在于,需要重啟Activity才能完成界面渲染。

在Activity中調用setContentView之前進行Theme設置:

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);NightModeUtils.onActivityCreateSetTheme(this);setContentView(R.layout.activity_main);}

?

NightModeUitls設置Theme方法:

/** Set the theme of the activity, according to the configuration. */public static void onActivityCreateSetTheme(Activity activity) {int theme = getDayNightMode(activity);switch (theme) {case THEME_SUN:activity.setTheme(R.style.AppSunTheme);break;case THEME_NIGHT:activity.setTheme(R.style.AppNightTheme);break;default:break;}}

?

三、通過怎加一層遮光罩來實現。效果不是很理想。

通過WindowManager,將一個透明背景的TextView加到Activity主界面中。代碼如下:

private void night() {if (mNightView == null) {mNightView = new TextView(this);mNightView.setBackgroundColor(0xaa000000);}WindowManager.LayoutParams lp = new WindowManager.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.TYPE_APPLICATION,WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,PixelFormat.TRANSLUCENT);lp.gravity = Gravity.BOTTOM;lp.y = 10;try {mWindowManager.addView(mNightView, lp);} catch (Exception ex) {}}private void day() {try {mWindowManager.removeView(mNightView);} catch (Exception ex) {}}

四、最后來看一下Dialog需要怎么實現夜間模式。

AlertDialog.Builder 有一個帶style id參數的構造函數,我們就通過這個構造函數來實現Dialog主題的修改,從而達到夜間模式。

public static AlertDialog.Builder createBuilder(Context context) {if (NightModeUtils.getDayNightMode(context) == NightModeUtils.THEME_SUN) {return new AlertDialog.Builder(context);} else {return new AlertDialog.Builder(context, R.style.NightDialog);}}

我們通過如上方法來獲取Builder,實現主題切換。其中R.style.NightDialog我采用如下方式:

<style name="NightDialog" parent="android:Theme.Holo.Dialog"><item name="android:windowBackground">@android:color/transparent</item></style>

在android?honeycomb之前的版本Theme.Dialog.Alert與AlertDialog這兩個style是public的,可以通過修改主題時,重新定義這兩個style實現dialog主題的修改,但之后的版本已經將他們開放關閉了。所以,我通過上面的辦法實現了dialog的主題修改。

Demo源碼


來源:?http://www.cnblogs.com/yuanzhanxue/p/3470820.html

來自為知筆記(Wiz)

總結

以上是生活随笔為你收集整理的Android夜间模式的几种实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。