查看翻转器!这就是我在应用程序中使用的内容,允许用户选择白天或夜间主题。另外,由于 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>
然后对于每个布局,我制作白天彩色布局和夜间彩色布局
白天和夜间布局都必须是 ViewFlipper 的子级,因此如果您折叠这两个布局,它应该是
- < 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);
}
布局设置为activity_main,但由于activity_main有一个viewflipper,所以将其设置为第一根(索引 0)在 viewflipper(这是我的白天布局)内,.showNext() 将显示下一个根元素(索引 1 我的夜间布局,依此类推,如果我添加更多)
关闭,如果您需要显示特定布局而不是使用 .showNext() 猜测,您可以调用
viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(XXX));
其中 XXX 可以替换为布局的索引(0、1 等),或者 XXX 可以替换为特定布局 id,如下所示 viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(findViewById(R.id.DayLayout));
这就是我使用的,它效果很好,因为它非常容易理解并且非常可定制!希望这可以帮助
-Stephen