在android中动态更改昼夜模式
我正在开发一个基于Android的GPS导航应用程序,有必要根据光传感器值为该应用程序实现自动昼夜主题切换。问题是我必须在不重新启动活动或应用程序的情况下更改主题 我试图通过遵循本教程()来实现这一点,其中使用自定义状态在白天和夜间模式之间进行更改。但由于我的应用程序有很多布局,所以需要做很多更改。此外,在这种实现中,开发人员必须为将来的屏幕处理昼夜模式在android中动态更改昼夜模式,android,Android,我正在开发一个基于Android的GPS导航应用程序,有必要根据光传感器值为该应用程序实现自动昼夜主题切换。问题是我必须在不重新启动活动或应用程序的情况下更改主题 我试图通过遵循本教程()来实现这一点,其中使用自定义状态在白天和夜间模式之间进行更改。但由于我的应用程序有很多布局,所以需要做很多更改。此外,在这种实现中,开发人员必须为将来的屏幕处理昼夜模式 有没有简单有效的方法来实现这一点 否,创建视图/布局之前必须应用主题/样式 因此,如果您想及时更改它们的运行方式,您必须在JAVA代码中执行所
有没有简单有效的方法来实现这一点 否,创建视图/布局之前必须应用主题/样式 因此,如果您想及时更改它们的运行方式,您必须在JAVA代码中执行所有操作,例如setBackground(color)setImageRes(xxx)setTextColor(xxx)这是我在应用程序中使用的,允许用户选择白天或晚上的主题。另外,由于java的性质,它可以根据任何布尔值进行更改(即,如果光线比原来暗2秒)。这就是说,没有真正简单的方法可以在不为切换编码或不依赖其他人的工作的情况下自动切换所有布局 以下是方法: 我有一个应用程序,它有一个活动、一个布局和一个按钮来切换颜色
- MainActivity.java
- activity_main.xml(包含按钮)
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));