当前位置: 首页 > 知识库问答 >
问题:

android中昼夜模式的动态变化

有宏峻
2023-03-14

我正在一个基于Android的GPS导航应用程序,有必要实现自动日夜主题切换的应用程序基于光传感器的价值。问题是我必须改变主题而不重新启动活动或应用程序。

有没有简单有效的方法可以做到这一点?

共有1个答案

章承基
2023-03-14

ViewFlipper!这是我在我的应用程序中使用的,允许用户选择白天或晚上的主题。另外,由于java的特性,它可以根据任何布尔值进行更改(例如,如果光线比原来暗了2秒)。也就是说,没有真正简单的方法自动地使所有布局切换,而不为切换编写代码或建立在其他人的工作之上。

方法如下:

我有一个应用程序,有1个活动,1个布局,和一个按钮来切换颜色。

    null
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <ViewFlipper
    android:id="@+id/viewFlipper"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

  </ViewFlipper>

</RelativeLayout>
    null
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ViewFlipper
  android:id="@+id/viewFlipper"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <LinearLayout
    android:id="@+id/DayLayout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:layout_marginBottom="15dp">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/profileDayBtn"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:background="#fff"
        android:textColor="#000" />
</LinearLayout>
<LinearLayout
    android:id="@+id/NightLayout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/profileNightBtn"
    android:layout_marginBottom="20dp"
    android:layout_marginTop="15dp"
    android:textStyle="bold"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:background="#000"
    android:textColor="#fff" />
</LinearLayout>

</ViewFlipper>
</RelativeLayout>

在每个有白天或晚上布局的活动中添加以下代码:(我将mine添加到每个活动的onCreate中,但这不适用于基于时间的切换)

    setContentView(R.layout.activity_main);

    Button dayBtn = (Button) findViewById(R.id.profileDayBtn);
    Button nightBtn = (Button) findViewById(R.id.profileNightBtn);

    View.OnClickListener changeColorMode = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          ViewFlipper vf = (ViewFlipper) findViewById( R.id.viewFlipper );
          if (v == dayBtn) {
            vf.showNext();
          } else if (v == nightBtn) {
            vf.showPrevious();
          }
    };
    dayBtn.setOnClickListener(changeColorMode);
    nightBtn.setOnClickListener(changeColorMode);
    }

layout被设置为activity_main,但是因为activity_main有一个viewflipper,所以它将它设置为viewflipper中的第一个根元素(索引0)(这是我的白天布局),.shownext()将显示下一个根元素(索引1是我的夜间布局,如果我添加了更多)

要关闭,如果需要显示特定的布局而不是用。shownext()猜测,可以调用

   viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(XXX));

这是我使用的,它的工作很好,因为它非常简单的理解,是非常可定制的!希望这能有所帮助

--斯蒂芬

 类似资料:
  • 现在我们提供一个夜间模式,你只需要在 body 或者 .page 或者 .content 上加上 .theme-dark。它和其中所有子元素都会变成夜间模式。你也可以单独给 .bar 加上 .theme-dark,这样可以单独使标题栏或者工具栏变成夜间模式。 夜间模式最大的区别是他的背景变成了黑色,而前景色变成了白色。 夜间模式还处在测试阶段,可能会有某些组件在夜间模式下显示不正常。有任何问题都可

  • 本文向大家介绍Android夜间模式最佳实践,包括了Android夜间模式最佳实践的使用技巧和注意事项,需要的朋友参考一下 由于Android的设置中并没有夜间模式的选项,对于喜欢睡前玩手机的用户,只能简单的调节手机屏幕亮度来改善体验。目前越来越多的应用开始把夜间模式加到自家应用中,没准不久google也会把这项功能添加到Android系统中吧。 业内关于夜间模式的实现,有两种主流方案,各有其利弊

  • 我到处找了一会儿,只好“硬着头皮学”: Activity、AppCompatActivity、FragmentActivity和ActionBarActivity:何时使用哪个? 用风格开发主题(Android Dev Summit'19)

  • 获取设备夜间模式 接口说明 获取设备夜间模式 示例代码: Swift: RokidMobileSDK.device.getNightMode(device: RKDevice, completion: @escaping (_ error: RKError?, _ nightMode: SDKDeviceNightMode?) -> Void) Objc: RKDevice * device

  • 获取设备夜间模式 接口说明 获取设备夜间模式 参数说明 字段 类型 必须? 说明 deviceId String 是 设备ID 示例代码: String deviceId = "XXXXXX"; RokidMobileSDK.device.getNightMode(deviceId, new IGetDeviceNightMode() { @Override

  • 我正在做一些大的重构操作,相对于android应用程序中的一些性能改进,该应用程序使用了一个带有大量静态变量的类,甚至静态活动引用,然后通过应用程序使用!因此,我在Android中寻找一些最佳实践来存储数据,并在我的应用程序中为这些数据提供全局访问。 首先,我删除了所有的活动引用,以避免任何内存泄漏,但我仍然希望知道什么是关于静态变量的最佳实践,这些变量需要在android应用程序的任何地方使用。