Android主题(theme)的一些总结

您所在的位置:网站首页 安卓主题app哪个好 Android主题(theme)的一些总结

Android主题(theme)的一些总结

2023-11-25 22:57| 来源: 网络整理| 查看: 265

一、theme主题 1.1是个啥?

theme 是我们应用的一个主题,或者是一种风格,比如我们穿衣服一套休闲装或者一套运动装,我们对其进行设置就可以更变咱们这个应用的相关皮肤(就像lol或者王者里面的皮肤一样)。一般它是作用于整个应用的对应的是咱们的application,但是有时候部分的界面需要特殊的处理比如一个特定的activity,设置一个单独的皮肤。

1.2在哪里设置?

首先我们可以看看咱们的manife文件中,application的配置中:

我们可以看到上面的配置文件中分别从两个地方设置了主题:

1.application中设置,这个就是全局的,如果你不再单独的重新为你要设置的activity设置一个主题,那么这个activity的主题就是“@style/AppTheme”这个主题 2.activity中设置,可以看到MainActivity这个activity就被单独的设置了一个主题为:@style/AppTheme.mytheme

所以主题的作用域就是application跟activity,不涉及到咱们的View 当然了有同学就会问,我不想在xml中设置,用代码设置,当然也可以,如下:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(android.R.style.mytheme); setContentView(R.layout.activity_main); }

这里唯一需要注意的就是,我们设置的时候要在setContentView之前设置

1.3常见的系统主题展示,以及内部属性?

常见的系统主题:(来自https://blog.csdn.net/oudetu/article/details/78568436)

android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式 android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏 android:theme="Theme.Light" 背景为白色 android:theme="Theme.Light.NoTitleBar" 白色背景并无标题栏 android:theme="Theme.Light.NoTitleBar.Fullscreen" 白色背景,无标题栏,全屏 android:theme="Theme.Black" 背景黑色 android:theme="Theme.Black.NoTitleBar" 黑色背景并无标题栏 android:theme="Theme.Black.NoTitleBar.Fullscreen" 黑色背景,无标题栏,全屏 android:theme="Theme.Wallpaper" 用系统桌面为应用程序背景 android:theme="Theme.Wallpaper.NoTitleBar" 用系统桌面为应用程序背景,且无标题栏 android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" 用系统桌面为应用程序背景,无标题栏,全屏 android:theme="Translucent" 半透明 android:theme="Theme.Translucent.NoTitleBar" 半透明、无标题栏 android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 半透明、无标题栏、全屏 android:theme=”Theme.Panel” 半透明,无标题,全屏 android:theme=”Theme.Light.Panel”平板风格显示

下面还有被人整理的表格:(来自:https://menxindiaolong.blog.csdn.net/article/details/86561559)

image.png

以上就是常见的系统主题,我们可以直接用,有这么多的主题,那么怎么样才是我们要的呢?往下看

1.4我们自己想定义个我们自己的主题呢?

首先我们要在哪里定义? 定义那些属性? 那些属性对应界面那些位置?

1.首先我们要找到资源文件下的路径 在res/values/style.xml 中定义一个自己要的主题

true @android:color/transparent @null false @null @null

这里的MyTheme就可以在需要用的地方来使用了 好多属性啊,都是个啥意思呢?如下常用属性:(来自:https://www.jianshu.com/p/06a3bbb7ce79)

@color/white @color/white @color/colorAccent #00000000 true true true true true #E91E63 true @drawable/ic_launcher_background false #B0C4DE #E6E6FA #1C71A9 #FFFFFF #C1C1C1 #FF7F50 #FF00FF #FFD700 #1C71A9 singleTop landscape

上面的属性基本咱们使用的时候已经够了,有同学还是不太清楚,比如那个colorAccent具体是啥,colorPrimary有具体是哪里的颜色 咱在网上找了一个图,应该还是挺清晰的吧

image.png 1.5 自定义的一些主题属性?

有时候我们的需求会涉及到那些android原生没有提供的主题样式,这个时候就需要我们自己定义, 举个例子,有个activity名字叫D里面我们有个三个TextView,不同的入口进入的时候(例如:A,B,C三个不同的Activity),D中的这个三个TextView,x 、y、z要显示不同的字体颜色 当然了,有同学会说我们可以在进去D这个Activity之后对字体进行颜色设置,这里是举一个简单的例子,(万一这个应用中有20个Activity,需要通过不同的入口显示不同的字体颜色,你还每个Activity进入之后,获取控件TextView,再一个个setTextColor么) 首先,咱们来自定义一个属性,在res路径下创建个资源文件attr.xml如下:

image.png

然后,在attr.xml中定义三个属性分别对应这三个TextView的字体颜色,如下:

下一步,咱们在需要切换TextView颜色的activity定义咱们自己的主题theme

true @android:color/transparent @null false @null @null @color/color1 @color/color1 @color/color1 true @android:color/transparent @null false @null @null @color/color2 @color/color2 @color/color2 以此类推定义 MyTheme3

接下来我们在activity的布局文件中设置TextView的属性

然后咱们再在不同地方进入D这个Activity的时候加上判断,不同的入口显示不同的样式

onCreate方法中判断 //切换不同的风格,必须在setContentView之前做 swith(themeType){ case 1: setTheme(R.style,MyTheme1); break; case 2: setTheme(R.style,MyTheme2); break; ............ setContentView(R.layout.activity_main);

当然了这些都是Theme的一些延伸,实际的应用过程中,有些应用会用到一些实时换皮肤的效果,比如网易云音乐,项目级的会有更好的方法来实现

1.6 关于应用换肤的延伸?

这个博主写的很详细 https://www.jianshu.com/p/af7c0585dd5b



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3