精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Style在Android中的繼承關系

移動開發 Android
Android的Styles(樣式)和Themes(主題)非常類似Web開發里的CSS,方便開發者將頁面內容和布局呈現分開。Style和Theme在Android里的定義方式是完全一樣的,兩者只是概念上的區別:Style作用在單個視圖或控件上,而Theme用于Activity或整個應用程序。由于作用范圍的不同,Theme也就需要比Style包含更多的定義屬性值的項目(item)。

[[182651]]

Android的Styles(樣式)和Themes(主題)非常類似Web開發里的CSS,方便開發者將頁面內容和布局呈現分開。Style和Theme在Android里的定義方式是完全一樣的,兩者只是概念上的區別:Style作用在單個視圖或控件上,而Theme用于Activity或整個應用程序。由于作用范圍的不同,Theme也就需要比Style包含更多的定義屬性值的項目(item)。不過本文,我將Style和Theme都歸為Style來稱呼。

Android的Style和Web的CSS相比,有一個缺陷就是只能針對一個對象只能通過android:theme="@style/AppTheme"或style="@style/MyStyle"指定一個值。而CSS則可以通過class屬性在DOM元素上定義多個樣式來達到組合的效果。不過Style也有CSS沒有的功能,那就是繼承(Inheritance)。(當然CSS通過LESS和SASS這些工具也獲得繼承的能力。)

Style繼承簡介

根據Android Developers官方文檔的介紹,定義Style的繼承有兩種方式:一是通過parent標志父Style;

  1. <style name="GreenText" parent="@android:style/TextAppearance" 
  2.     <item name="android:textColor">#00FF00</item>  
  3. </style>  

另一種則是將父Style的名字作為前綴,然后通過“.”連接新定義Style的名字:

  1. <style name="CodeFont.Red"
  2. <item name="android:textColor">#FF0000</item> 
  3. </style>  

第二種方式可以***連接子Style來實踐多層繼承:

  1. <style name="CodeFont.Red.Big"
  2. <item name="android:textSize">30sp</item> 
  3. </style>  

相對***種,Android對第二種方式做出的限制就是Style必須是由自己定義的,或者說父Style和子Style必須是定義在同一個程序內,不能是引用第三方或系統的Style。畢竟對于系統的Style的引用是需要加上android:前綴作為命名空間。

其次在使用Style時,對于第二種方式定義的Style,必須引用其完全的名字,也就是說必須要包含完整的前綴和名字:

  1. <EditText 
  2. style="@style/CodeFont.Red.Big" 
  3. ... />  

Android對于***種定義方式并沒用限制,所以所有以第二種方式定義的Style都可以轉用***種:

  1. <style name="Big" parent="CodeFont.Red"
  2. <item name="android:textSize">30sp</item> 
  3. </style>  

只要parent中的名字對應上實際定義的Style名字即可。不過換成***種后Style的名字如果太簡潔就容易沖突了。

兩種繼承方式混合的效果

前面說到Style的兩種繼承方式的效果是一致的,那假如將兩種方式混在一起定義一個Style又會是什么樣的效果呢?下邊就用實際例子來分析一下。

首先定義一些實驗所需的自定義屬性(attr),(這樣可以減少系統屬性的干擾,因為系統總是會為它的屬性定義值,那樣可能無法分辨***的效果是來自系統還是定義的值)

  1. <?xml version="1.0" encoding="utf-8"?> 
  2.  
  3. <resources> 
  4.  
  5.     <declare-styleable name="CustomStyle"
  6.  
  7.         <attr name="customColor" format="color"/> 
  8.  
  9.         <attr name="customText" format="string"/> 
  10.  
  11.         <attr name="customSize" format="dimension"/> 
  12.  
  13.     </declare-styleable> 
  14.  
  15. </resources>  

接著定義一個TextView的子類,并在其中獲取上邊自定義屬性的值并賦予TextView去呈現:

  1. import android.util.TypedValue; 
  2.  
  3. import android.widget.TextView; 
  4.  
  5. /** 
  6.  
  7. * @author Ider 
  8.  
  9. */ 
  10.  
  11. public class StyledTextView extends TextView { 
  12.  
  13.     public StyledTextView(Context context) { 
  14.  
  15.         this(context, null); 
  16.  
  17.     } 
  18.  
  19.     public StyledTextView(Context context, AttributeSet attrs) { 
  20.  
  21.         this(context, attrs, 0); 
  22.  
  23.     } 
  24.  
  25.     public StyledTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
  26.  
  27.         super(context, attrs, defStyleAttr); 
  28.  
  29.         final TypedArray a = context.getTheme() 
  30.  
  31.                 .obtainStyledAttributes(attrs, R.styleable.CustomStyle, defStyleAttr, 0); 
  32.  
  33.         final CharSequence text = a.getText(R.styleable.CustomStyle_customText); 
  34.  
  35.         final int color = a.getColor(R.styleable.CustomStyle_customColor, Color.RED); 
  36.  
  37.         final float size = a.getDimensionPixelSize(R.styleable.CustomStyle_customSize, 70); 
  38.  
  39.         a.recycle(); 
  40.  
  41.         setText(text); 
  42.  
  43.         setTextColor(color); 
  44.  
  45.         setTextSize(TypedValue.COMPLEX_UNIT_PX, size); 
  46.  
  47.     } 
  48.  
  49.  

然后就是定義研究所需的Style

  1. <resources> 
  2.  
  3.     <style name="SuperStyleOne"
  4.  
  5.         <item name="customColor">@android:color/holo_orange_dark</item> 
  6.  
  7.         <item name="customText">Hello World</item> 
  8.  
  9.         <item name="customSize">30dp</item> 
  10.  
  11.     </style> 
  12.  
  13.     <style name="SuperStyleTwo"
  14.  
  15.         <item name="customText">www.iderzheng.com</item> 
  16.  
  17.     </style> 
  18.  
  19.     <style name="SuperStyleOne.SubOne"
  20.  
  21.         <item name="customColor">@android:color/holo_blue_dark</item> 
  22.  
  23.     </style> 
  24.  
  25.     <style name="SuperStyleOne.SubTwo" parent="SuperStyleTwo"
  26.  
  27.     </style> 
  28.  
  29.     <style name="SuperStyleOne.SubThree" parent="SuperStyleTwo"
  30.  
  31.         <item name="customText">blog.iderzheng.com</item> 
  32.  
  33.     </style> 
  34.  
  35. </resources>  

上邊定義的Style里,SuperStyleOne將通過添加前綴的方式作用到子Style上,而SuperStyleTwo則通過指定到parent來其作用。可以看到SubTwo和SubThree混合了兩種方式。

***在Activity的布局視圖里使用自定類并設定上不同的Style

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.  
  3.               xmlns:tools="http://schemas.android.com/tools" 
  4.  
  5.               android:orientation="vertical" 
  6.  
  7.               android:layout_width="match_parent" 
  8.  
  9.               android:layout_height="match_parent" 
  10.  
  11.               android:paddingLeft="@dimen/activity_horizontal_margin" 
  12.  
  13.               android:paddingRight="@dimen/activity_horizontal_margin" 
  14.  
  15.               android:paddingTop="@dimen/activity_vertical_margin" 
  16.  
  17.               android:paddingBottom="@dimen/activity_vertical_margin" 
  18.  
  19.               tools:context=".MainActivity"
  20.  
  21.     <com.ider.trial.styles.StyledTextView 
  22.  
  23.             style="@style/SuperStyleOne" 
  24.  
  25.             android:layout_width="wrap_content" 
  26.  
  27.             android:layout_height="wrap_content"/> 
  28.  
  29.     <com.ider.trial.styles.StyledTextView 
  30.  
  31.             style="@style/SuperStyleOne.SubOne" 
  32.  
  33.             android:layout_width="wrap_content" 
  34.  
  35.             android:layout_height="wrap_content"/> 
  36.  
  37.     <com.ider.trial.styles.StyledTextView 
  38.  
  39.             style="@style/SuperStyleOne.SubTwo" 
  40.  
  41.             android:layout_width="wrap_content" 
  42.  
  43.             android:layout_height="wrap_content"/> 
  44.  
  45.     <com.ider.trial.styles.StyledTextView 
  46.  
  47.             style="@style/SuperStyleOne.SubThree" 
  48.  
  49.             android:layout_width="wrap_content" 
  50.  
  51.             android:layout_height="wrap_content"/> 
  52.  
  53. </LinearLayout>  

運行之后得到效果如下: 

 

 

 

***個和第二個都是Style標準的使用方式,也看到它們正確地獲得了定義的屬性值,子Style也正確的繼承和覆蓋了父Style的屬性值。

對于第三個和第四個,它們呈現的顏色是代碼中使用的默認紅色(Color.RED),字體的值也是源自代碼中的使用值,所以明顯比前兩者要小。這也就是說它們并沒用繼承下SuperStyleOne中定義的字體大小和顏色。但是SuperStyleTwo中定義的內容被第三個正確的顯示了出來,也說明SubTwo成功繼承通過parent指定的父Style的內容。而第四個呈現出來內容則說明覆蓋的效果也是正確的。

在做這個試驗之前,我一直以為兩種方式會同時其作用,只是用parent指定比用前綴有高優先級。也就是說Android會先從當前Style定義中找某個屬性的值,如果沒有找到就轉到parent指定的父Style中找,還沒有則轉到前綴指定的父Style中找。但是通過上邊的結果表明:當使用parent指定父Style后,前綴方式則不在其作用,只是作為Style的名字。也就是說:Android的Style不支持多繼承。Style的繼承只能單線一層層下來。

反過來在看看系統定義的Style也更容易懂了,比如打開themes_holo.xml,會看到很多一樣的內容被”冗余”地定義在Theme.Holo和Theme.Holo.Light兩個Style下。但因為Theme.Holo.Light用parent指定了其父Style是Theme.Light,所以Theme.Holo.Light并沒有從Theme.Holo繼承任何屬性值,也因此這樣的冗余是必須的。

  1. <style name="Theme.Holo.Light" parent="Theme.Light"
  2.  
  3. ... ... ... ... 
  4.  
  5. </style>  

使用Theme.Holo.Light作為Style的名字只是為了名字更加的清晰明了。

References:

  1. Styles and Themes | Android Developers
  2. Android XML theme inheriting from two parent themes? – Stack Overflow
  3. xml – Reason why style attribute does not use the android: namespace prefix – Stack Overflow 
責任編輯:龐桂玉 來源: 安卓開發精選
相關推薦

2009-07-02 09:40:14

Hibernate的繼

2009-06-02 10:28:36

JPA繼承類Netbeans

2022-03-21 15:11:17

Java繼承初始化

2010-06-18 15:15:13

UML

2011-08-08 09:51:52

Cocoa 框架

2009-09-18 13:40:40

繼承關系

2010-08-24 14:10:44

div style

2010-01-19 18:51:17

C++類

2023-05-09 12:42:51

Java繼承多態

2013-03-04 11:10:03

JavaJVM

2009-09-25 14:12:16

Hibernate繼承

2010-08-09 14:01:22

關系法則

2010-08-25 13:48:51

CSSlist-style-

2012-05-30 15:03:43

ibmdw

2022-12-26 00:00:03

非繼承關系JDK

2025-01-13 00:00:00

MapStruct繼承關系Java

2010-09-15 14:09:01

GraphDataba

2022-10-14 16:18:40

MobileNetAndroid端模型訓練

2017-01-17 17:13:20

AndroidAspectJ開發

2011-07-15 15:47:02

JAVA
點贊
收藏

51CTO技術棧公眾號

樱花视频在线免费观看| 亚洲av无码一区二区三区观看| 国产午夜在线观看| 老司机精品视频在线| 欧美成人在线免费视频| 噜噜噜在线视频| 精品乱码一区二区三区四区| 一区二区三区日韩欧美| 久久综合九色综合久99| 伊人影院中文字幕| 在线观看视频免费一区二区三区| 国产性猛交xxxx免费看久久| 国产精品中文久久久久久| 日产福利视频在线观看| 国产精品久久久久一区二区三区共| 51成人做爰www免费看网站| 91在线看视频| 中文字幕av亚洲精品一部二部| 日韩久久免费电影| 一级黄色免费毛片| 高清av一区二区三区| 亚洲国产精品一区二区www在线| 新呦u视频一区二区| 日本黄色大片视频| 久久精品99久久久| 欧美在线免费观看| 国产av 一区二区三区| 国产精品一在线观看| 亚洲护士老师的毛茸茸最新章节| 玩弄japan白嫩少妇hd| heyzo高清国产精品| 综合自拍亚洲综合图不卡区| 日韩国产美国| 亚洲欧洲精品视频| 成人午夜激情在线| 亚洲专区在线视频| 亚洲在线视频播放| 日韩—二三区免费观看av| 97久久久久久| 久久成人国产精品入口| 亚洲精品网址| 日韩视频免费在线| 综合 欧美 亚洲日本| 最新国产精品视频| 日韩成人在线电影网| www.黄色网| 在线精品国产亚洲| 日韩视频不卡中文| 日本中文字幕在线不卡| 不卡精品视频| 在线成人免费观看| www.夜夜爽| 啪啪av大全导航福利综合导航| 色婷婷综合久久久久中文| 无码人妻精品一区二区三区在线| av在线资源| 黄色成人在线播放| 国内外成人激情视频| 亚洲欧洲日本韩国| 色视频一区二区| 免费大片在线观看| av成人在线看| 欧美日韩精品一区二区在线播放| 国产精品区在线| 日本成人在线网站| 欧美一级片在线看| 一边摸一边做爽的视频17国产| 超碰97成人| 日韩www在线| 波多野吉衣中文字幕| 国产欧美日韩精品高清二区综合区| 亚洲第一福利在线观看| 人妻丰满熟妇aⅴ无码| 欧美精美视频| 日韩视频欧美视频| 国产无套在线观看| 美女精品网站| 成人黄色av播放免费| 国产黄色小视频在线观看| 粉嫩13p一区二区三区| 国内视频一区| 成人性生交大片免费看午夜 | 黄色一区二区在线观看| 内射国产内射夫妻免费频道| 三级成人在线| 亚洲女人的天堂| 久久久亚洲午夜电影| 国产自产女人91一区在线观看| 日韩视频免费观看高清| 宅男噜噜噜66一区二区| 国产精品白丝jk喷水视频一区| 最新国产中文字幕| 国产一区二区伦理片| 国产精品v欧美精品v日韩| 日韩精品系列| 国产精品高清亚洲| 精品视频在线观看一区二区| 中文一区一区三区高中清不卡免费| 色呦呦国产精品| 国产欧美激情视频| 色综合久久中文| xxxxxxxxx欧美| 男人日女人网站| 国模娜娜一区二区三区| 蜜桃网站成人| 中文在线观看免费| 91电影在线观看| 911亚洲精选| 人人狠狠综合久久亚洲婷| 久久久久久久色| 国产一区二区小视频| 337p粉嫩大胆噜噜噜噜噜91av| 2021狠狠干| 欧美日韩女优| 日韩成人在线电影网| 欧美做爰爽爽爽爽爽爽| 久久国产成人| 国产精品久久久久久久小唯西川| 性开放的欧美大片| 精品国产乱码久久久久酒店 | 亚洲成人av综合| 国产精品女主播在线观看| 丰满少妇久久久| 亚洲不卡视频| 日韩在线观看网站| 亚洲av无码精品一区二区| 国产成人久久精品77777最新版本| 日韩在线电影一区| 一区二区三区电影大全| 亚洲国产成人久久综合一区| 久草综合在线视频| 久久99精品一区二区三区三区| 欧美日韩国产综合在线| 亚洲福利影院| 亚洲精品美女在线| 日本在线观看中文字幕| 成人高清视频免费观看| 蜜臀av性久久久久蜜臀av| 精品三级在线| 精品精品国产国产自在线| 久久永久免费视频| 久久精子c满五个校花| 97超碰青青草| 午夜精品福利影院| 欧美亚洲第一页| 五月天婷婷激情网| 天天免费综合色| 久久精品国产亚洲av麻豆| 鲁大师影院一区二区三区| 快播亚洲色图| 日韩国产网站| 色青青草原桃花久久综合| 一区二区日韩在线观看| 亚洲视频一区二区在线观看| 最新免费av网址| 中文字幕乱码亚洲无线精品一区| 亚洲专区中文字幕| 女同视频在线观看| 亚洲精品一区在线观看| 亚洲天堂视频网站| 国产日韩精品视频一区| 欧美婷婷精品激情| 婷婷亚洲图片| 91视频网页| 美女搞黄视频在线观看| 亚洲欧洲免费视频| 加勒比在线一区| 中文字幕人成不卡一区| 国产午夜在线一区二区三区| 日韩亚洲在线| 亚洲高清视频一区二区| 国产亚洲高清在线观看| 久久人人爽人人爽人人片av高请| 亚洲欧美日韩综合在线| 欧美图片一区二区三区| 69av视频在线| 久久午夜色播影院免费高清| 色综合色综合色综合色综合| 你懂的亚洲视频| 久久九九视频| 9.1麻豆精品| 国内精品400部情侣激情| 十九岁完整版在线观看好看云免费| 欧美在线观看一二区| 日韩影院一区二区| 久久久久久久网| 日韩av片免费观看| 国产精品久久久久9999高清| 亚洲精品国产精品国自产观看| 综合激情久久| 国产日韩综合一区二区性色av| 欧美6一10sex性hd| 尤物精品国产第一福利三区| www.桃色av嫩草.com| 91福利在线看| 日本一本高清视频| 中文字幕在线观看一区二区| 成熟妇人a片免费看网站| 另类小说一区二区三区| 日韩精品 欧美| 中文字幕免费一区二区三区| 日韩偷拍一区二区| 精品视频自拍| 1区1区3区4区产品乱码芒果精品| 色老太综合网| 午夜精品一区二区三区在线视 | 欧美乱大交xxxxx| 青青色在线视频| 欧美成人bangbros| 中文字幕免费在线看| 午夜精品福利一区二区蜜股av| 少妇被躁爽到高潮无码文| 久久久www成人免费毛片麻豆 | 久久久爽爽爽美女图片| 免费在线看a| 国产亚洲xxx| 天堂av在线7| 亚洲成人黄色网址| 国产免费黄色大片| 欧美日韩在线播放三区四区| 天天干天天干天天干天天| 一区二区三区免费| 亚洲精品久久久久久国| 国产欧美日本一区视频| 中出视频在线观看| 成人午夜伦理影院| 亚洲国产精品va在看黑人| 在线观看av日韩| 国产日韩亚洲| 日韩精品―中文字幕| 国内在线观看一区二区三区| 波多野结衣激情| 99久久亚洲精品蜜臀| 日韩亚洲不卡在线| 欧美日韩国产传媒| 日韩国产精品一区二区| 九九久久婷婷| 色噜噜狠狠一区二区三区| 亚洲小说图片| 欧洲亚洲一区二区| 国产日产精品_国产精品毛片| 精品日韩美女| 欧洲亚洲成人| 欧美日韩高清在线一区| 久久99高清| 日韩电影天堂视频一区二区| 精品久久成人| 亚洲电影一二三区| 久久影视一区| 伊人久久在线观看| 欧美va亚洲va日韩∨a综合色| 超碰超碰超碰超碰超碰| 亚洲黑丝一区二区| www.浪潮av.com| 久久一区亚洲| 色啦啦av综合| 国产高清成人在线| 成人在线视频免费播放| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 视频在线日韩| 国产日韩专区在线| 秋霞影院一区| 久久久久久高清| 成人在线亚洲| avove在线观看| 一区二区福利| 黄色成人免费看| 国产一区二区三区黄视频 | 日本最新高清不卡中文字幕| av成人在线观看| 91情侣在线视频| 香蕉人人精品| 中文字幕一区综合| 亚洲国产精品一区制服丝袜| 欧美精品第三页| 久久99国内精品| 伦理片一区二区| 国产欧美一区二区精品久导航| 2014亚洲天堂| 婷婷久久综合九色综合绿巨人| 一二三区免费视频| 日韩一级片在线播放| 深夜福利在线看| 在线免费看av不卡| 久久av色综合| 国产精品自产拍在线观看| 亚洲乱码一区| 日韩av一级大片| 136国产福利精品导航网址| www.xxx亚洲| 成人一二三区视频| 在线免费观看视频| 香蕉成人啪国产精品视频综合网| 91黑人精品一区二区三区| 日韩欧美一区中文| 成人午夜在线观看视频| 欧美精品成人在线| 精品三级在线| 免费观看成人在线| 欧美精选在线| www.99r| 91在线视频18| 青青草国产在线观看| 日本乱码高清不卡字幕| 亚洲精品一区二区三区不卡| 色七七影院综合| 欧美色片在线观看| 国产欧美日韩综合一区在线观看 | 国产欧美日韩久久| 青青操免费在线视频| 日韩欧美亚洲国产另类| 中国日本在线视频中文字幕| 91产国在线观看动作片喷水| 日韩欧美中文字幕在线视频| 亚洲人体一区| 欧美亚洲网站| 国产精品第七页| 亚洲国产婷婷综合在线精品| 国产人妖一区二区三区| 一区二区三区四区在线观看视频| 中文字幕一区久| 久久精品国产美女| 亚洲欧洲视频| fc2成人免费视频| 亚洲综合男人的天堂| 国产乱色精品成人免费视频| 中文字幕一区日韩电影| 成人看片网页| 亚洲va韩国va欧美va精四季| 日本午夜一本久久久综合| 成人免费无遮挡无码黄漫视频| 黑人极品videos精品欧美裸| 西西人体44www大胆无码| 欧美精品videosex性欧美| 超碰成人福利| 欧美大黑帍在线播放| 国产白丝网站精品污在线入口| 男人与禽猛交狂配| 91精品国产欧美日韩| www.在线视频| 2022国产精品| 一区在线观看| 精品人妻一区二区三区香蕉 | 亚洲一区二区色| 日韩亚洲综合在线| 日韩毛片免费看| 免费久久久久久| 国产成人精品一区二区三区四区 | 超碰97免费观看| 国产精品资源网站| 久久亚洲AV无码| 日韩av在线一区二区| 都市激情综合| 亚洲午夜精品一区二区三区| 久久99精品国产麻豆婷婷| 午夜免费激情视频| 精品国内片67194| 手机av在线| 色姑娘综合网| 国产一区 二区 三区一级| 精品爆乳一区二区三区无码av| 亚洲第一av在线| 午夜无码国产理论在线| 亚洲蜜桃在线| 国产不卡视频在线观看| 久久狠狠高潮亚洲精品| 亚洲视频视频在线| 婷婷丁香久久| 国产在线播放观看| 国产视频亚洲色图| 国产熟女一区二区丰满| 97免费在线视频| 成人影院在线| 无码人妻一区二区三区一| 一本色道a无线码一区v| 欧美69xxx| 国产精品夜夜夜一区二区三区尤| 久久在线精品| 久久久全国免费视频| 亚洲欧美中文字幕在线一区| 日本久久一区| 尤物av无码色av无码| 中文字幕在线一区| 日本xxxxwww| 成人欧美一区二区三区黑人| 激情久久婷婷| 亚洲一区电影在线观看| 亚洲国产欧美一区二区丝袜黑人 | 日本欧美一区二区| 九九视频在线观看| 亚洲欧洲一区二区三区在线观看| 四虎在线精品| 成年人小视频网站| 亚洲一区av在线| 日本中文字幕伦在线观看| 国产欧美一区二区在线播放| 久久看片网站| 国产精品suv一区二区| 色偷偷88888欧美精品久久久 | chinese国产精品|