自定义全局应用组件样式

从手艺层面上 themestyle 未有啥分别

本篇提到的措施,是因而转移应用使用大旨中的style的习性,来驱动自定义布局能够运用到全局。

要聊到两岸的两样便是大家在 Android 应用使用 ThemeStyle 的主意是见仁见智的。

更换theme暗许颜色


Theme是应用到方方面面application或activity的体裁,其实也是一种style,只可是比较庞大。使用api 25新建module,默许使用持续与“Theme.AppCompat.Light.DarkActionBar”的“AppTheme”大旨,并更动了多少个颜色属性。AppTheme定义在module的values/styles.xml中。退换这多个颜色,发现个别对应app的标题栏、手提式无线话机顶栏和组件默许颜色。将三者分别改为红、绿、蓝三色,以下是代码及相应的分界面:

图片 1

代码

图片 2

对应分界面

其实,这多少个属性是在最底部的Theme样式中定义的,由此能够利用到任何组件。

 <style name="myStyle"> <item name="android:background"> @color/colorAccent </item> </style>

自定义全局组件


既是能够透过更动colorAccent来改换全数组件的颜料,那么肯定可以因此类似的法门,定义组件样式,并在全局使用。上面来自定义贰个大局button。能够想到,应该有多个属性,是用来内定button样式的,只要重为那性子情赋值就能够。事实上,这几个属性都是属于android.智跑.attr的,具体的注解可知官方文书档案R.attr。而自定义button,须要使用buttonStyle属性。

属性(Attribute)

性情正是键值对的键,平时也会在里边评释值的格式和花色。定义了值的品类可以一本万利保存值,同期也平价依据值的类型读取值。

默认Button样式

buttonStyle的现实性样式也是在Theme中内定的:<item name="buttonStyle">@style/Widget.Button</item>。顺便说下Theme样式的定义能够在C:Users【username】AppDataLocalAndroidsdkplatformsandroid-xxdataresvalues中找到。Widget.Button定义如下:

<style name="Widget.Button">
        <item name="background">@drawable/btn_default</item>
        <item name="focusable">true</item>
        <item name="clickable">true</item>
        <item name="textAppearance">?attr/textAppearanceSmallInverse</item>
        <item name="textColor">@color/primary_text_light</item>
        <item name="gravity">center_vertical|center_horizontal</item>
    </style>

其中@drawable/btn_default的定义如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal" />
    <item android:state_window_focused="false" android:state_enabled="false"
        android:drawable="@drawable/btn_default_normal_disable" />
    <item android:state_pressed="true" 
        android:drawable="@drawable/btn_default_pressed" />
    <item android:state_focused="true" android:state_enabled="true"
        android:drawable="@drawable/btn_default_selected" />
    <item android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal" />
    <item android:state_focused="true"
        android:drawable="@drawable/btn_default_normal_disable_focused" />
    <item
         android:drawable="@drawable/btn_default_normal_disable" />
</selector>

这当中的drawable文件已经无力回天右键go to declaration了,所以是图表文件。可在C:Users【username】AppDataLocalAndroidsdkplatformsandroid-xxdataresdrawable-mdpi中找到呼应的图片。默许样式如下:

图片 3

默认button样式

属性值的门类

  • 财富类型1 fraction天性定义
<attr name = "pivotX" format = "fraction" />

质量使用

<rotate android:pivotX = "200%"/>

2 float本性定义

<attr name = "fromAlpha" format = "float" />

属性使用

<alpha android:fromAlpha = "1.0"/>

3 boolean性格定义

<attr name = "focusable" format = "boolean" />

属性使用

<Button android:focusable = "true"/>

4 color天性定义

<attr name = "textColor" format = "color" />

属性使用

<TextView android:textColor = "#00FF00" />

5 string特性定义

<attr name = "text" format = "string" />

属性使用

<TextView android:text = "我是文本"/>

6 dimension个性定义

<attr name = "layout_width" format = "dimension" />

属性使用

<Button android:layout_width = "42dip"/>

7 integer质量定义

<attr name = "framesCount" format="integer" />

属性使用

<animated-rotate android:framesCount = "12"/>
  • 破例种类此处之所以叫十分类型是因为她们只会被在概念属性时行使。8 flag属性定义
<declare-styleable name="名称"> <attr name="gravity"> <flag name="top" value="0x30" /> <flag name="bottom" value="0x50" /> <flag name="left" value="0x03" /> <flag name="right" value="0x05" /> <flag name="center_vertical" value="0x10" /> ... </attr></declare-styleable>

品质使用

<TextView android:gravity="bottom|left"/>

9 enum属性定义

<declare-styleable name="名称"> <attr name="orientation"> <enum name="horizontal" value="0" /> <enum name="vertical" value="1" /> </attr></declare-styleable>

品质使用

<LinearLayout android:orientation = "vertical"></LinearLayout>

10 reference属性定义

<declare-styleable name = "名称"> <attr name = "background" format = "reference" /></declare-styleable>

性情使用

<ImageView android:background = "@drawable/图片ID"/>
自定义Button样式

在module的style.xml中自定义样式,并用其重定义buttonStyle属性:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="buttonStyle">@style/MyButtonStyle</item>
    </style>

    <style name="MyButtonStyle" parent="@android:style/Widget.Button">
        <item name="android:background">#0000ff</item>
    </style>

由于暗中认可样式是Widget.Button,由此这里直接接轨它,然后改成希望改造的属性。那样不想改变的品质就无需再本人定义二次。这里把background属性重定义成黑灰。然后在使用的AppTheme样式中,将buttonStyle属性钦点为自定义的MyButtonStyle样式。注意,使用系统的style或性质,名称前要使用"android:"。实现后布局中button的样式如下:

图片 4

自定义样式

以这种办法,类似地,能够将全部组件改动为自定义样式。并且就buttonStyle来讲,大家已经精通此属性定义在Theme这一个style中,因而在具备基于Theme的体裁中,都能够动用这种方法,而不管不顾虑没有对应的习性。

属性的命名空间

android 框架提供 android schema 来交付该 xml 剖判的正式,当然也足以自个儿定义 schema 来疏解 xml 中 tag 和总体性以及值的意思。

<android.support.constraint.ConstraintLayout xmlns:andro

自定义属性

自然也能够团结定义属性,其落成在应用 android 库就存在一些自定义属性,值得注意的是我们和好定义的属性在使用等第是全局的,假设四个属性名称一致势必形成在营造项目发生争持错误。

  • 命名空间的是大局的
  • 具有的性质都服从应用的 schema

theme 和 style 的区别

主题

void setTheme(int themeResId);Theme getTheme();

能够在 Activity 中调用 setTheme() 然后传出 theme 财富id,就能够在暗中同意theme 上增多本身配置或概念的 theme。一样能够透过 getTheme 获取当前的 theme。其实宗旨自身作者并未做什么样,仅仅是用于保存二个配备。

android:editTextStyle举个例子大家在布局引入 editText 大家就能够选取四个editTextStyle 默许的组件样式,组件默许的样式正是在主旨中定义的。每一个零部件都和谐的比不上的默许样式名称。举个例子editText 的私下认可样式是 editTextStyle, textview 的暗中同意样式是 textviewStyle。

android:textColorPrimary大家还应该有一部分颜料值,常常大大多颜色值都以用于定义文本颜色。比方textColorPrimary、textColorSecondary 和 teriary 等等。

android:textAppearanceSmall

android:windowActionBar当您的 activity 或 dialog 创立时候, 在里边的已经 成立 window,依照安排是或不是有 actionBar,即使有 actionBar 会加载 actionBar 视图。

本文由365bet体育在线官网发布于网络工程,转载请注明出处:自定义全局应用组件样式

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。