最新方法直接看底部,最新版2.4版本最简单方式
as在2.1版本原生支持java8,只需要在build.gradle一些简单的配置:
1 | android { |
最新方法直接看底部,最新版2.4版本最简单方式
as在2.1版本原生支持java8,只需要在build.gradle一些简单的配置:
1 | android { |
tips:必须使用24.0.0及以后的版本。
添加v7依赖(以添加的查看版本是否为>=24.0.0):
1 | compile 'com.android.support:appcompat-v7:24.2.0' |
修改样式:
1 | <style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar"> |
使用的样式中必须包含DayNight。
在activity中调用(必须继承自AppCompatActivity):
1 | public class MainActivity extends AppCompatActivity { |
修改夜间样式
在res
目录下创建values-night
,在其中放入对应的资源文件
注意,调用切换方法后,必须使用recreate()方法重建view。同时Activity以前的状态会丢失。注意保存数据。
原理:根据activity获取资源的方法getResources(),通过查找其源码,根据其原理,通过生成一个AssetManager并添加一个APK文件的 ,最终生成一个包含所有资源的Resource对象。由于 AssetManager无法直接实例化,所以通过反射方法获取其实例,并调用其添加apk包的addAssetPath()方法。使用DexClassLoader加载目标apk中的资源R类获取需要的资源id的值。使用Resource的get方法(getString(int id)、getDrawable(int id))即可获取到相应的资源。
源码如下:
a.生成一个包含apk路径的AssetManager实例:
1 | public static AssetManager getAssetManager(String filePath) throws |
1 | <style name="tab_bottom"> |
在低版本上出现了
只靠右,无法居中的问题,即时设置了gravity,最终找到解决方法,添加一句:
1 | <item name="android:background">@null</item> |
1 | ListPopupWindow popupWindow = new ListPopupWindow(MainActivity.this); |
此控件在android原生api与v7包中均存在。