我的Android手机如何决定在浅色或深色主题之间切换启动画面?

时间:2020-02-24 06:30:49

标签: android android-studio xamarin xamarin.android

这是我为应用程序准备的代码。它可以在明暗之间正确切换,但是它是如何做到的呢?在这些样式中,我看不到任何关于splash_screen_night的内容,但似乎都被调用了。

splash_activity.cs

namespace Test.Droid
{
    [Activity(Label = "test", Theme = "@style/LaunchTheme", MainLauncher = true, NoHistory = true)]
    public class SplashActivity : Activity

values文件夹中的mainThemeStyle.xaml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="launcher_background">#000000</color>

    <style name="MainTheme" parent="MainTheme.Base">
        <item name="android:textAllCaps">false</item>
    </style>

    <style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="elevation">0dp</item>
    </style>

    <style name="MainTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_screen</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:navigationBarColor">#ffffff</item>
    </style>

    <style name="LaunchTheme" parent="MainTheme">
        <item name="android:windowBackground">@drawable/splash_screen</item>
        <item name="android:navigationBarColor">#ffffff</item>
    </style>
</resources>

values-night文件夹中的styles.xaml

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="LaunchTheme" parent="Theme.AppCompat">
        <item name="android:windowBackground">@drawable/splash_screen_night</item>
        <item name="android:navigationBarColor">#000000</item>
    </style>
</resources>

可绘制文件夹中的splash_screen.xaml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white"/>
    <item>
        <bitmap android:src="@drawable/splash_logo"
                android:tileMode="disabled"
                android:gravity="center"
                android:layout_gravity="center"/>
    </item>
</layer-list>
可绘制文件夹中的

splash_screen_night.xaml

<?xml version="1.0" encoding="UTF-8" ?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/black"/>
    <item>
        <bitmap android:src="@drawable/splash_logo"
                android:tileMode="disabled"
                android:gravity="center"
                android:layout_gravity="center"/>
    </item>
</layer-list>

androidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="000401" android:versionName="0.4.2 beta 3" package="com.test.test">
    <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="28" />
    <application android:icon="@mipmap/ic_launcher" android:label="Test"></application>
</manifest>

1 个答案:

答案 0 :(得分:1)

通常,我们在npm i react-router-dom@latest 中提到主题名称。查看清单文件。

有2个选项,要么在 class ScheduleAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() { lateinit var view : View lateinit var itemList: ArrayList<ScheduleItem> override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val context = parent.context val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater if(viewType == HEADER_TYPE){ view = inflater.inflate(R.layout.schedule_header,parent,false) return HeaderViewHolder(view) } else if(viewType == ITEM_TYPE){ view = inflater.inflate(R.layout.schedule_item,parent,false) return ItemViewHolder(view) }else{ return HeaderViewHolder(view) } } override fun getItemCount(): Int = itemList.size override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { if(holder is HeaderViewHolder){ holder.startDay.text = itemList.get(position).startDay }else if(holder is ItemViewHolder){ holder.time.text = itemList.get(position).startTime+"~"+itemList.get(position).endTime holder.title.text = itemList.get(position).title holder.participant.text = itemList.get(position).participant holder.title.text = itemList.get(position).title } } inner class HeaderViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView) { internal var startDay: TextView init { startDay = itemView.findViewById(R.id.startDay) } } inner class ItemViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView) { internal var time: TextView internal var title: TextView internal var participant: TextView internal var place: TextView init { time = itemView.findViewById(R.id.time) title = itemView.findViewById(R.id.title) participant = itemView.findViewById(R.id.participant) place = itemView.findViewById(R.id.place) } } fun addItems(items : ArrayList<ScheduleItem>){ items.addAll(items) } } 属性中添加主题以将主题应用于每个屏幕,要么将主题添加至每个屏幕的活动。

manifest

app