面试题答案
一键面试- 布局文件:
- 在
styles.xml
文件中定义不同主题颜色的样式。例如:
<style name="AppTheme.Red" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="colorPrimary">@color/red</item> <item name="colorPrimaryVariant">@color/red_variant</item> <item name="colorOnPrimary">@color/white</item> <item name="colorSecondary">@color/secondary_red</item> <item name="colorSecondaryVariant">@color/secondary_red_variant</item> <item name="colorOnSecondary">@color/white</item> </style> <style name="AppTheme.Blue" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="colorPrimary">@color/blue</item> <item name="colorPrimaryVariant">@color/blue_variant</item> <item name="colorOnPrimary">@color/white</item> <item name="colorSecondary">@color/secondary_blue</item> <item name="colorSecondaryVariant">@color/secondary_blue_variant</item> <item name="colorOnSecondary">@color/white</item> </style>
- 在
res/values/colors.xml
文件中定义颜色资源:
<color name="red">#FF0000</color> <color name="red_variant">#FF4500</color> <color name="blue">#0000FF</color> <color name="blue_variant">#1E90FF</color> <color name="secondary_red">#FF69B4</color> <color name="secondary_red_variant">#FFB6C1</color> <color name="secondary_blue">#6495ED</color> <color name="secondary_blue_variant">#B0C4DE</color>
- 在
- Kotlin代码:
- 在Activity或Fragment中,通过
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
确保主题颜色在白天模式下正确显示(如果需要处理夜间模式,可进一步调整)。 - 创建一个函数来切换主题,例如:
fun changeTheme(themeResId: Int) { setTheme(themeResId) recreate() }
- 处理用户选择事件,假设通过一个Spinner选择主题颜色:
val spinner: Spinner = findViewById(R.id.theme_spinner) spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { when (position) { 0 -> changeTheme(R.style.AppTheme.Red) 1 -> changeTheme(R.style.AppTheme.Blue) } } override fun onNothingSelected(parent: AdapterView<*>) {} }
- 在Activity或Fragment中,通过
- 资源文件(可能涉及):
- 除了上述提到的
styles.xml
和colors.xml
,如果有其他与主题相关的资源,如drawable
资源中使用了主题颜色相关的属性,确保这些资源也能正确适配不同主题。例如,在drawable
资源文件中使用?attr/colorPrimary
等属性来引用主题颜色,这样在切换主题时,相关图形也能相应改变颜色。
- 除了上述提到的