天天看點

android:theme和app:popupTheme的作用,以及在android 3.0以下不起作用問題的解決

在android5.0中,新增了Material Design設計語言,确實挺炫的,使用Toolbar代替了之前的Actionbar确實靈活很多。

之前我們隻能在application或者activity中使用theme主題,但是在android 5.0中可以給View使用theme主題,這個View及其子View都會使用這個theme,給了我們設計一個很大的靈活性。

給View添加theme的方法為:

android:theme="你的theme"

例如:

<android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:theme="@style/AppTheme.AppBarOverlay"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>
           

上面的代碼片段我們就給這個toolbar添加了一個theme,細心的或許看到最後一個屬性app:popupTheme,這個屬性就是用來自定義我們彈出的菜單的樣式,在之前的Actionbar的溢出菜單,我們是不能自定義他的樣式的,隻能根據你的theme來選擇黑白兩種,不能自己定義,現在我們可以定義彈出菜單的樣式。比如我們的需求:

ActionBar文字是白的,ActionBar Overflow彈出的是白底黑字

預設的情況下我們使用theme為android:Theme.Holo.Light.DarkActionBar那麼ActionBar文字是白的,ActionBar Overflow彈出的是黑底白字,但是我們要的是上面的需求白底黑字怎麼辦呢,這在android5.0以前是沒法做到的,現在可以用app:popupTheme這個屬性就可以實作,比如我可以将toolbar的app:popupTheme="ThemeOverlay.AppCompat.Light",那麼這個Overflow彈出的是白底黑字。

最後一個問題使用android:theme這個屬性,在android3.0以上可以應用到View及其子View的,但是在android3.0以下隻能應用到目前的View,是不能使子View起作用的,所有要用到該theme的View都要加上,這個切記,當然了android3.0以下的遺留機器已經很少了,如果你不用适配這個版本,你完全可以忽略這個。