怎样把java换主题_java – 如何在切换主题时考虑变化?
您可以做的是為視圖類型創(chuàng)建自定義屬性(例如TextView.Person,TextView.Date …),在xml中,您可以引用屬性,然后在不同的主題中定義屬性.例如,你可以使用style.xml
@style/DateTextViewDefault
#ff333333
monospace
#3F51B5
#303F9F
#FF4081
@style/PersonTextViewA
16sp
serif
#ff999999
#888888
#555555
#000000
@style/PersonTextViewB
@style/DateTextViewB
20sp
monospace
#ff55aa
#ff0000BB
sans-serif
然后你的活動xml布局
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
style="?attr/TextView.Person"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="John Doe" />
style="?attr/TextView.Date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="31/12/1999" />
android:id="@+id/buttonA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="THEME A" />
android:id="@+id/buttonB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="THEME B" />
注意TextView的樣式是
style="?attr/TextView.Person"
和
style="?attr/TextView.Date"
AppTheme.A和AppTheme.B對這些屬性有2種不同的分辨率
在此示例中,屬性是視圖的整個樣式,但您可以輕松地為每種視圖類型(TextView.person)設置一種樣式,然后為該樣式的單個項目定義通用屬性,例如:
并且只更改主題中的單個屬性.
然后在您的Activity中,您只需要使用setTheme(int)在onCreate中設置主題,在這種情況下,值可以是R.style.AppTheme_A或R.style.AppTheme_B.
使用此方法,您可以根據(jù)需要添加任意數(shù)量的樣式,而無需觸摸布局.此外,您始終可以在基本主題中定義一些默認樣式,然后僅在某些自定義主題中覆蓋該值,而其他樣式則使用上面示例中的TextView.Date的默認樣式.
如果你想快速嘗試一下,這里是我用來測試style.xml和activity_main.xml的Activity的代碼
class MainActivity : AppCompatActivity() {
private val prefs by lazy { getSharedPreferences("SharedPrefs", Context.MODE_PRIVATE) }
private var customTheme: Int
get() = prefs.getInt("theme", R.style.AppTheme_A)
set(value) = prefs.edit()
.putInt("theme", value)
.apply()
.also { recreate() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setTheme(customTheme)
setContentView(R.layout.activity_main)
buttonA.setOnClickListener { customTheme = R.style.AppTheme_A }
buttonB.setOnClickListener { customTheme = R.style.AppTheme_B }
}
}
總結
以上是生活随笔為你收集整理的怎样把java换主题_java – 如何在切换主题时考虑变化?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java搜索项目内的异常_java中用L
- 下一篇: java 左右两边数据类型不一样_Jav