精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

www.久久av| 国产最新免费视频| 国内精品久久久久久久久久久 | 亚洲精品看片| 日韩精品福利网站| 成年人观看网站| 2017亚洲天堂1024| 国产成人精品一区二| 欧美亚洲国产精品| 手机av在线不卡| 91九色鹿精品国产综合久久香蕉| 狠狠躁天天躁日日躁欧美| 亚洲一区二区三区精品动漫| 免费观看毛片网站| 日本视频一区二区三区| 欧美夫妻性生活视频| 亚洲精品成人无码熟妇在线| 成人在线啊v| 色综合久久88色综合天天6| 香蕉精品视频在线| 亚洲区小说区图片区| 韩国av一区二区三区四区| 午夜精品久久久久久久99黑人| 国产7777777| 国产一级成人av| 777色狠狠一区二区三区| 国产中文字幕二区| 久cao在线| 久久伊人蜜桃av一区二区| 2014国产精品| 在线观看毛片网站| 国产视频一区在线观看一区免费| 日韩中文字幕视频在线观看| 黄色在线观看av| silk一区二区三区精品视频| 69久久夜色精品国产69蝌蚪网| 波多野结衣家庭教师视频| 在线免费观看污| 国产精品三级av在线播放| 久久综合中文色婷婷| www香蕉视频| 久草热8精品视频在线观看| 青青久久aⅴ北条麻妃| 久久无码精品丰满人妻| 99热在线成人| 中文字幕在线看视频国产欧美在线看完整| 国产精品一区二区人妻喷水| 激情综合婷婷| 欧美精品少妇一区二区三区| 手机看片福利日韩| 成人激情综合| 日韩欧美极品在线观看| 福利视频一二区| 日本在线观看大片免费视频| 日韩毛片视频在线看| 伊人av成人| 国产福利免费在线观看| 久久九九影视网| 麻豆精品传媒视频| 三级视频在线| 久久综合久久鬼色| 鲁丝一区鲁丝二区鲁丝三区| 天天综合天天色| 粉嫩av亚洲一区二区图片| 成人精品视频在线| 国产精品美女一区| 国内一区二区视频| 亚洲bt天天射| 亚洲性生活大片| 奇米色777欧美一区二区| 国产精品伦子伦免费视频| 中国女人一级一次看片| 麻豆精品视频在线观看视频| 国产精品美女视频网站| 91中文字幕在线视频| 精品一区二区三区免费观看 | 日韩一区二区三区精品| 欧美v国产在线一区二区三区| 日本黄色www| 国产香蕉精品| 亚洲人成欧美中文字幕| 日本少妇毛茸茸| 九九久久婷婷| 丝袜亚洲另类欧美重口| 中文字幕精品一区日韩| 午夜影院黄色片| 性欧美lx╳lx╳| 亚洲视频综合网| 国产三级aaa| 综合天堂久久久久久久| 久久久久久久久久久91| 国产精品午夜影院| 亚洲中字在线| 久久91亚洲人成电影网站| 国产一级在线免费观看| 丝袜亚洲另类欧美| 成人精品在线视频| 色婷婷在线视频| 欧美激情一区在线| 可以在线看黄的网站| 色是在线视频| 欧美色倩网站大全免费| 91成人在线观看喷潮蘑菇| 欧美成人专区| 俺去了亚洲欧美日韩| 精品少妇一二三区| 蜜桃av噜噜一区| 国产精品三区www17con| 91免费在线| 亚洲成在线观看| 91极品视频在线观看| 国产精品毛片视频| 中文字幕久热精品在线视频| 久久高清免费视频| 国内久久精品视频| 日本一区免费在线观看| 黄页网站大全在线免费观看| 欧美影院午夜播放| 中文字幕人妻一区二区三区| 久久久久久久久久久9不雅视频| 97精品久久久| 国产三区在线播放| 国产人成一区二区三区影院| 欧美精品久久久久久久久久久| 国产毛片精品久久| 精品视频在线播放免| 免费毛片在线播放免费| 久久精品国产色蜜蜜麻豆| 精品国产91亚洲一区二区三区www| 伊人免费在线| 一本大道av伊人久久综合| 欧洲成人午夜精品无码区久久| 久久一区91| 日产精品久久久一区二区福利| 欧美 日韩 国产 成人 在线 91| 1024精品合集| 天天综合网日韩| 亚洲丝袜啪啪| 91精品国产91| 亚洲精品一区二区三区不卡| 亚洲欧美日本在线| 极品粉嫩美女露脸啪啪| 日韩精品免费| 国产经典一区二区| 黄色片在线免费看| 一本色道久久综合亚洲aⅴ蜜桃| 欧美性生交xxxxx| 性xxxx欧美老肥妇牲乱| 成人乱色短篇合集| 色三级在线观看| 欧美日韩电影一区| 人妻无码一区二区三区免费| 日产国产欧美视频一区精品| 日韩电影免费观看在| 三级成人在线| 一本一道久久a久久精品逆3p| 中文字幕在线播| 久久综合久久久久88| 三级4级全黄60分钟| 欧美人与牛zoz0性行为| 国产精品99久久99久久久二8| 可以在线观看的黄色| 色婷婷精品久久二区二区蜜臀av| 久久久久久久久久久久| 老司机精品久久| 日韩欧美第二区在线观看| 成人国产精选| 精品国产依人香蕉在线精品| 国产精品-色哟哟| 亚洲欧美日韩成人高清在线一区| 国产成人av片| 亚洲毛片播放| 日本一区高清在线视频| jizz亚洲女人高潮大叫| 日韩一区二区欧美| 国产av无码专区亚洲a∨毛片| 洋洋av久久久久久久一区| 大尺度在线观看| 国产一区导航| 亚洲精品中文字幕乱码三区不卡| 热久久久久久| 欧美精品电影在线| 九色视频在线观看免费播放| 欧美性生活久久| 亚洲最大的黄色网址| 大美女一区二区三区| 日本中文字幕片| 欧美韩国日本在线观看 | 精品久久久久久久久久岛国gif| 久久成人18免费网站| 免费看黄网站在线观看| 欧美视频在线视频| 永久免费看片直接| 成人在线视频首页| 成人在线激情网| 亚洲精品久久久| 国产一区自拍视频| 成人久久网站| 欧美激情一级欧美精品| 国产在线超碰| 日韩一区二区三区电影在线观看| 欧美特黄aaaaaa| 亚洲欧洲在线观看av| 国产精品入口麻豆| 捆绑调教美女网站视频一区| 国产精品自拍合集| 成人影院在线| 国产亚洲欧美另类一区二区三区| 外国电影一区二区| 午夜精品福利电影| 国产理论在线观看| 亚洲精品一二区| www日本在线| 欧美性色黄大片手机版| 久久国产免费观看| 国产精品麻豆视频| 国产精品久久久免费观看| 免费精品视频在线| 尤物av无码色av无码| 欧美黄色精品| 亚洲欧洲日韩精品| 美女久久久久| 国产精品xxxx| 91麻豆精品| 国产精品成人播放| 老司机深夜福利在线观看| 欧美精品在线播放| 91在线看黄| 国产亚洲一区二区在线| 亚欧洲精品视频| 欧美va亚洲va香蕉在线| 一区二区www| 欧美中文字幕一区| 国产剧情在线视频| 精品国产乱码久久久久久婷婷| 无码人妻精品一区二区三区夜夜嗨| 国产色综合久久| 大又大又粗又硬又爽少妇毛片 | 狠狠综合久久av一区二区小说| 成人免费毛片东京热| 国产精品久久久久影院色老大 | 免费成人蒂法| 亚洲最大成人免费视频| 9999精品免费视频| 国产欧美婷婷中文| 国产美女久久| 国产在线视频不卡| 深夜日韩欧美| 91免费观看网站| 亚洲精品成a人ⅴ香蕉片| 国产精品久久久久秋霞鲁丝| 欧美三级精品| 国产精品91久久| 3d欧美精品动漫xxxx无尽| 国产va免费精品高清在线观看| 亚洲天堂手机| 欧美伊久线香蕉线新在线| 成人观看网址| 97香蕉久久夜色精品国产| 日本不卡网站| 日韩av高清不卡| 草民电影神马电影一区二区| 国产精品久久久久久久久久久久久久| 色婷婷综合久久久中字幕精品久久 | 成人影视亚洲图片在线| 亚洲人成网站在线播放2019| 91免费精品| 欧美另类videos| 在线欧美一区| 欧美丰满熟妇bbbbbb百度| 欧美专区在线| 99sesese| 国产成人在线色| 50一60岁老妇女毛片| 91蜜桃免费观看视频| www.99热| 亚洲激情图片小说视频| 国产精品6666| 日韩欧美高清视频| 亚洲熟妇av乱码在线观看| 欧美一区二视频| 开心激情综合网| 亚洲天堂男人的天堂| 麻豆视频网站在线观看| 久久久欧美一区二区| japanese23hdxxxx日韩| 亚洲自拍偷拍色片视频| 欧美三级电影在线| 亚洲人体一区| 亚洲精品少妇| 亚洲天堂网一区| 国产99一区视频免费| 亚洲专区区免费| 一色桃子久久精品亚洲| 一级aaa毛片| 精品1区2区3区| 亚洲精品一区二区三区蜜桃| 亚洲网站视频福利| 国模雨婷捆绑高清在线| 国产精品日本精品| 成人精品动漫一区二区三区| 日韩资源av在线| 亚洲欧美综合国产精品一区| 免费观看成人网| 成人午夜激情视频| 久久久久亚洲AV成人无在 | 亚洲精品1区2区3区| 欧美日本在线视频| 性xxxx18| 九九精品在线播放| 高清电影一区| 国产精品一区二区av| 日韩精品免费一区二区在线观看| 成人免费aaa| 国产呦精品一区二区三区网站| 三级网站在线免费观看| 亚洲综合激情小说| 中文区中文字幕免费看| 亚洲精品动漫100p| 亚洲婷婷噜噜| 国产欧美精品一区二区| 久久99蜜桃| 美脚丝袜脚交一区二区| 韩国av一区二区三区四区| 伊人影院综合网| 欧美日韩美女在线| 亚洲精品免费在线观看视频| 最近2019年好看中文字幕视频 | 国产精品视频久久| 欧美大胆视频| 黄色激情在线视频| 国产一区二区在线观看免费| 中文字幕有码在线播放| 色婷婷av一区二区三区之一色屋| 亚洲成人一级片| 久久久精品视频成人| 成人在线观看免费播放| 日本不卡免费新一二三区| 久久aⅴ乱码一区二区三区| 日本黄色录像片| 亚洲一区二区成人在线观看| 精品国产一级片| 久久影院资源网| 日本黄色成人| 性欧美.com| 日韩avvvv在线播放| 久久久久久亚洲中文字幕无码| 色综合天天在线| 日本亚洲欧美| 日本不卡免费高清视频| 你懂的一区二区三区| 国产福利视频在线播放| 91蝌蚪国产九色| 国产精品777777| 亚洲区一区二区| 国精产品一区一区三区四川| 日韩免费电影一区二区| 日本aⅴ亚洲精品中文乱码| 熟女俱乐部一区二区| 一本大道久久a久久综合婷婷| 国产资源在线观看| 日韩av男人的天堂| 日本久久一二三四| 超碰人人草人人| 亚洲男女毛片无遮挡| 不卡的日韩av| 午夜精品久久久久久久99黑人| 亚洲精品播放| 日韩肉感妇bbwbbwbbw| 国产精品国产三级国产| 国产视频一二三四区| 欧美二区在线播放| 日本成人中文| 中文字幕国产传媒| 亚洲欧美日韩国产中文在线| 欧美少妇bbw| 国产精品9999| 伊人青青综合网| 小毛片在线观看| 色悠悠亚洲一区二区| 欧美猛烈性xbxbxbxb| 成人xxxxx色| 首页欧美精品中文字幕| 国产在线观看免费视频软件| 日韩亚洲欧美一区| 亚洲优女在线| 亚欧精品在线| 国产v综合v亚洲欧| 欧美一级淫片免费视频黄| 久久久成人精品| 猫咪成人在线观看| 亚洲一级免费观看| 亚洲一二三区在线观看| 激情小视频在线| 亚洲精品女av网站| 美女被久久久| 久久国产精品波多野结衣| 亚洲欧洲在线免费| 亚洲一区二区三区中文字幕在线观看| 日本一本二本在线观看|