ViewFlipper! 这是我在我的应用程序中使用的,允许用户选择白天或晚上的主题。同样由于 java 的性质,它可以根据任何布尔值进行更改(即,如果光线比 2 秒时更暗)。话虽如此,没有真正简单的方法可以自动切换所有布局,而无需为切换编码或构建其他人的工作。
方法如下:
我有一个应用程序,它有 1 个活动、1 个布局和一个用于切换颜色的按钮。
- MainActivity.java
- activity_main.xml(包含按钮)
ViewFlipper 被放置为每个布局的子元素,如下所示:(每个布局都需要白天和夜间模式)
<?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>
然后对于每个布局,我制作白天彩色布局和夜间彩色布局
Day 和 Night 布局都必须是 ViewFlipper 的子级,因此如果您折叠这两个布局,它应该是
麻烦来了:每个元素都必须有一个唯一的 id,因为它们在同一个文档中,例如,如果您想在同一屏幕上显示白天按钮和夜晚按钮。
<?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>
布局就是这样,现在来实际更改它:
在每个具有日间或夜间布局的活动中添加以下代码:(我将我的添加到每个活动的 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));
其中 XXX 可以替换为布局的索引 (0, 1, ect),或者 XXX 可以替换为特定的布局 id,如下所示
viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(findViewById(R.id.DayLayout));
这是我使用的,效果很好,因为它非常易于理解并且非常可定制!希望这会有所帮助
-斯蒂芬