Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中动态更改昼夜模式_Android - Fatal编程技术网

在android中动态更改昼夜模式

在android中动态更改昼夜模式,android,Android,我正在开发一个基于Android的GPS导航应用程序,有必要根据光传感器值为该应用程序实现自动昼夜主题切换。问题是我必须在不重新启动活动或应用程序的情况下更改主题 我试图通过遵循本教程()来实现这一点,其中使用自定义状态在白天和夜间模式之间进行更改。但由于我的应用程序有很多布局,所以需要做很多更改。此外,在这种实现中,开发人员必须为将来的屏幕处理昼夜模式 有没有简单有效的方法来实现这一点 否,创建视图/布局之前必须应用主题/样式 因此,如果您想及时更改它们的运行方式,您必须在JAVA代码中执行所

我正在开发一个基于Android的GPS导航应用程序,有必要根据光传感器值为该应用程序实现自动昼夜主题切换。问题是我必须在不重新启动活动或应用程序的情况下更改主题

我试图通过遵循本教程()来实现这一点,其中使用自定义状态在白天和夜间模式之间进行更改。但由于我的应用程序有很多布局,所以需要做很多更改。此外,在这种实现中,开发人员必须为将来的屏幕处理昼夜模式


有没有简单有效的方法来实现这一点

否,创建视图/布局之前必须应用主题/样式

因此,如果您想及时更改它们的运行方式,您必须在JAVA代码中执行所有操作,例如setBackground(color)setImageRes(xxx)setTextColor(xxx)

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

以下是方法:

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

  • MainActivity.java
  • activity_main.xml(包含按钮)
ViewFlipper作为每个layouts子元素放置,如下所示:(每个需要日间和夜间模式的布局)

layout被设置为activity_main,但由于activity_main有一个viewflipper,它将其设置为viewflipper(这是我的日间布局)中的第一个根元素(索引0)。showNext()将显示下一个根元素(索引1我的夜间布局,如果我添加了更多,依此类推)

若要关闭,如果需要显示特定布局,而不是使用.showNext()猜测,则可以调用

   viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(XXX));
其中XXX可以替换为布局的索引(0、1等),或者XXX可以替换为如下所示的特定布局id
viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(findViewById(R.id.DayLayout));

这就是我所使用的,它工作得很好,因为它非常容易理解,而且非常可定制!希望这有帮助


-Stephen

你是否对光传感器值应用了任何类型的过滤器?我正在研究类似的东西,只是好奇。是的。我正在读取传感器值每1或2秒的变化,并找到20次观察的平均值。如果该平均值大于阈值,则我更改了颜色。你试过night和notni吗布局的ght限定值?如本链接中所述,请检查本链接
<?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>
    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);
    }
   viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(XXX));