Android Activity theme是作用于哪个View?

一个Activity声明如下:

<activity android:name=".MainActivity"
    android:theme="@android:style/Theme.Wallpaper.NoTitleBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

可以看到Activity的背景变成了桌面壁纸,其原理是将壁纸设置为了Activity中某个View的背景吗,如果是,怎么找到这个View,并获取这个壁纸实例(也就是这个壁纸)呢?

阅读 4.3k
4 个回答

getWindow().getDecorView();这个

每个activity都需要setContentView 这个View就是.
但这跟theme无关. theme是作用于Activity的, 并不会直接影响View

原理不是把壁纸设置为某个View的背景, 弄个简单的Activity然后向上遍历就可以得到这个结论

查阅一些资料都没有具体分析这个原理, 推测是通过更底层的机制显示壁纸的...
如果找到相关的分析资料, 麻烦共享下, 感谢 :D

实际上是应用在Context上,ContextThemeWrapper这个子类了解一下。比如你想在同一个界面上部分使用不同主题,构建一个新的ContextThemeWrapper传递给View的构造函数就能生效,5.0以上版本的android:theme属性也是这个原理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题