日夜间模式切换第一种方法

//首先在工程中自带的values文件夹下 colors中添加颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="background">#252a2e</color>
    <color name="unablebtn">#dcdcdc</color>
    <color name="dark_bg">#505050</color>
    <color name="light">#ECECEC</color>
    <color name="white">#FFFFFF</color>
    <color name="black">#000000</color>
    <color name="green">#05D992</color>
    <color name="zise">#E5004F</color>
    <color name="dark_bg1">#414141</color>
    <color name="pink">#FF5877</color>
    <color name="yellow">#FFFF00</color>
</resources>

//在工程中自带的values文件夹下 strings文件中  自定义

<resources>
    <string name="app_name">DayNightOne</string>
    <string name="changge_to_night">切换成夜间模式</string>
    <string name="changge_to_day">切换成日间模式</string>
</resources>

//创建一个attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="textColorValue" format="color"></attr>
    <attr name="textContent" format="string"></attr>
</resources>


//在工程中自带的values文件夹下 styles文件中  自定义

<resources>

    <!-- Base application theme. 白天的模式 -->
    <style name="day_theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowBackground">@color/white</item>

        <!--日间模式对应的字体颜色 和日间模式对应的文本内容-->
        <item name="textColorValue">@color/black</item>
        <item name="textContent">@string/changge_to_night</item>

    </style>

    <!-- Base application theme. 夜晚的模式 -->
    <style name="night_theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/dark_bg</item>
        <item name="colorPrimaryDark">@color/dark_bg</item>
        <item name="colorAccent">@color/dark_bg</item>
        <item name="android:windowBackground">@color/dark_bg</item>

        <!--夜间模式对应的字体颜色 和夜间模式对应的文本内容-->
        <item name="textColorValue">@color/white</item>
        <item name="textContent">@string/changge_to_day</item>
    </style>

</resources>


//res下创建一个文件夹anim设置切换时的动画  创建两个xml文件

//第一个sliding_in.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromAlpha="0.0"
    android:toAlpha="1.0"></alpha>

//第二个sliding_out.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:toAlpha="0.0"
    android:fromAlpha="1.0"></alpha>


//在清单文件中要更改配置

android:theme="@style/day_theme"

//创建一个类

public class ThemeUtil {

    //我当前应用的主题
    private static int theme = 0;

    //日间模式主题
    private static final int DAY_THEME = 0;

    //夜间模式主题
    private static final int NIGHT_THEME = 1;

    public static void onActivityCreatedSetTheme(Activity activity) {
        switch (theme) {
            case DAY_THEME:
                activity.setTheme(R.style.day_theme);
                break;
            case NIGHT_THEME:
                activity.setTheme(R.style.night_theme);
                break;
        }
    }


    //点击按钮改变对应得主题
    public static void ChangeCurrentTheme(Activity activity) {

        //1、改变当前主题的theme变量
        switch (theme) {
            case DAY_THEME:
                theme = NIGHT_THEME;
                break;
            case NIGHT_THEME:
                theme = DAY_THEME;
                break;
        }

        //2、重启这个activity
        activity.finish();
        activity.overridePendingTransition(R.anim.sliding_in, R.anim.sliding_out);
        activity.startActivity(new Intent(activity, activity.getClass()));
    }
}

//MainActivity中

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //设置对应的主题 ,在ui创建好之后设置主题无效,所以要放到setContentView()方法前面setTheme()
        ThemeUtil.onActivityCreatedSetTheme(this);
        setContentView(R.layout.activity_main);
    }


    public void onClick(View v) {

        //切换日夜间模式
        ThemeUtil.ChangeCurrentTheme(this);
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于单片机的交通灯控制系统设计 1 设计任务与要求 本次课程设计的时间是2009年6月,需要完成的任务是用单片机实现交通灯的基本功 能,该系统除了可以实现基本交通灯功能外,也能实现倒计时 紧急特殊模式等功能。 详细功能为:在白天正常东西方向和南北方向通车,通车时间均为45秒。正常通车情 况下,可以对通车的时间进行倒计时计数,并通过显示器显示出来。如果遇到特殊情况 ,在处理特殊事件时,可使整个十字路口禁止通车。强制东西通行,适用某些需要只进 行东西通车的情况。强制南北通行,适用某些需要只进行南北通车的情况。在夜间车流 量较少的情况下,正常东西方向和南北方向通车,通车时间均为10秒,相对与白天通行 模式,车辆等待时间减少,提高了通行效率。 2 系统设计 此次设计通过ATMEL公司的单片机AT89C51对整个交通灯电路进行控制。根据上面的功能 要求,本次设计需要完成正常模式 计时功能 紧急特殊模式 夜间模式等四个功能。 在正常模式下,交通灯每45秒改变一次通行方向,使得南北和东西交替通行。而LE D显示系统则显示到下一次改变所剩的时间,利于司机调整车辆状况。每到同行方向转换 时,绿灯闪烁,变为黄灯。提醒司机注意通行方向的改变,避免不必要的危险。 本交通灯的设计运用了单片机的外部中断,系统的紧急和夜间模式切换采用中断 系统完成。这样在任何通行情况下都可进入以上两种模式。在设计中,设置外部中断0为 夜间模式触发按钮,由电平触发完成,设置为低优先级,设置外部中断1为紧急模式触发 按钮,由电平触发完成,设置为高优先级。此时无论紧急状况(如车祸等)发生在何时 都可以直接进入紧急模式以便于交通管理人员处理问题。同时,通过在紧急模式下软件 检测p3.7和p3.6是否不为1来触发东西及南北强制通行模式,以弥补外部中断的不足,实 现更多的功能。 此次设计运用了软件延时程序,这样不仅调整延时长短十分灵活,而且不占用内部 定时/计数器的资源。设计中通过对指令运行的次数进行循环来实现软件延时。当晶振频 率为12MHz时有以下时间周期: 震荡周期:1/12微秒; 状态周期:1/6微秒; 机器周期:1微秒; 指令周期:1~4微秒;(根据指令的不同而不同) 软件延时的优点是较为灵活,调整更为容易,且不受延时时间限制。但软件延时长时 间占用系统资源,使得CPU工作效率不高,在中断频繁的系统中其定时精度也受到中断的 影响。但本系统要求延时时间较长,且没有频繁申请的中断系统,所以选择软件延时配 合外部申请中断模式切换较为合理。 2.1硬件系统设计 根据上面的功能要求,硬件系统主要模块有单片机模块 显示模块 按键模块,其硬件总 电路图如附录二所示。 2.1.1 单片机模块   AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口 ,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常 规方法进行编程,也可以在线编程。 本设计中AT89C52使用12MHz晶振。 XTAL1(19脚)和XTAL2(18脚):外接晶体引脚,XTAL1和XTAL2分别接外部晶振一端 ;RST:即为RESET,该引脚为单片机的上电复位或掉电保护端。在此设计中接正常模式 按扭;P3.7:使用第二功能,接强制南北通行按扭;P3.6:使用第二功能,接强制东西 通行按扭;P3.3:使用第二功能INT1,接紧急工作模式按扭;P3.2:使用第二功能INT0 ,接夜间工作模式按扭;P1.0~P1.7:输出BCD码,用来控制LED显示器的显示控制;P2. 7、P2.6、P2.5:输出高低电平,用来控制南北交通信号灯;P2.1、P2.2、P2.3:输出高 低电平,用来控制东西交通信号灯;第40脚为电源端VCC,接+5V电源,第20引脚为接地 端VSS。 单片机与其他模块的连接如下图1所示: 图1 单片机与其它模块的连接 2.1.2 显示模块 传统的共阳极或共阴极的数码管其显示输入需要为段码,这样就使得电路相对复杂和 繁琐。对于相同的功能在成本相差不大的情况下,此处运用了带BCD译码电路的LED显示 器。这样既可使线路简化,又可使可靠性提高 本设计中使用的自带BCD译码电路的LED显示器,其主要特点是采用四线BCD码输入, 可显示0-F十六进制数。使用时直接输入BCD码 即可显示相应的数字,使得电路大大简化。设计时,把P1.0~P1.7当 做BCD码输出端口,连接到LED显示器上,这样可把BCD码直接转换成可显示的数字,显示 模块的连接如图2所示: 图2 显示模块 图中的总线接至单片机的P1.0~P1.7端口。 2.1.3 按键模块 在此系统中,按键模块是实现各项功能的关键,按键通过电阻与单片机相连接,可以对 单片机进行控制,低电平信号对相应

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值