成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Selector在HarmonyOS中的使用

開發 OpenHarmony
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[389418]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

Selector其實就是一組狀態列表(StateList),可以將不同的狀態關聯不同的效果,主要用于設置控件背景和字體顏色等。控件一共有7種狀態,常用的有:空狀態empty,按下狀態pressed,獲取焦點focused,勾選狀態checked,不可用狀態disable。

鴻蒙中selector效果可以通過xml的state-container標簽或者在代碼中使用StateElement來實現,下面以button的背景選擇器舉例說明:

  1. // 表示當前控件處于被勾選狀態(check狀態),如控件Checkbox 
  2. public static final int COMPONENT_STATE_CHECKED = 64; 
  3. // 表示當前控件處于不可用狀態,如Button的setEnabled為false 
  4. public static final int COMPONENT_STATE_DISABLED = 32; 
  5. // 初始狀態 
  6. public static final int COMPONENT_STATE_EMPTY = 0; 
  7. // 表示當前控件處于獲取焦點的狀態,如TextField被點擊輸入文字時 
  8. public static final int COMPONENT_STATE_FOCUSED = 2; 
  9. // 表示光標移動到當前控件上的狀態 
  10. public static final int COMPONENT_STATE_HOVERED = 268435456; 
  11. // 當用戶點擊或者觸摸該控件的狀態,如Button點擊 
  12. public static final int COMPONENT_STATE_PRESSED = 16384; 
  13. // 表示控件被選擇地狀態,比如一個ListContainer獲得焦點(focus),而用方向鍵選擇了其中一個item(selecter) 
  14. public static final int COMPONENT_STATE_SELECTED = 4; 

實現以及使用:

1創建selector.xml

在resources/base/graphic自定義 shape,定義不同狀態的背景,然后將多個shape組合配置到state-container中生成一個新的selector_button.xml文件,提供給控件使用。

定義空狀態下的shape背景生成background_btn_empty.xml,其他狀態類似:

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <shape 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:shape="rectangle"
  5.  
  6.     <corners ohos:radius="5vp"/> 
  7.  
  8.     <solid ohos:color="#0000ff"/> 
  9. </shape> 

定義按下狀態下的背景生成background_btn_pressed.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <shape 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     ohos:shape="rectangle"
  5.  
  6.     <corners ohos:radius="5vp"/> 
  7.  
  8.     <solid 
  9.         ohos:color="#FF0000"/> 
  10. </shape> 

創建selector_button.xml,在ohos:element字段中配置shape背景, ohos:state配置控件狀態:

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <state-container 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.  
  5.     <item 
  6.         ohos:element="$graphic:background_btn_disabled" 
  7.         ohos:state="component_state_disabled"/> 
  8.  
  9.     <item 
  10.         ohos:element="$graphic:background_btn_pressed" 
  11.         ohos:state="component_state_pressed"/> 
  12.  
  13.     <item 
  14.         ohos:element="$graphic:background_btn_empty" 
  15.         ohos:state="component_state_empty"/> 
  16.  
  17. </state-container> 

也可以直接使用顏色:

  1. <state-container 
  2.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  3.  
  4.     <item 
  5.         ohos:element="#ff0000" 
  6.         ohos:state="component_state_disabled"/> 
  7.  
  8.     <item 
  9.         ohos:element="#00ff00" 
  10.         ohos:state="component_state_pressed"/> 
  11.  
  12.     <item 
  13.         ohos:element="#0000ff" 
  14.         ohos:state="component_state_empty"/> 
  15.  
  16. </state-container> 

2控件中使用

設置控件的背景background_element為狀態選擇器,并在狀態選擇器中按需添加不同的狀態和不同的狀態下的背景:

  1. <Button 
  2.     ohos:height="match_content" 
  3.     ohos:width="match_content" 
  4.     ohos:background_element="$graphic:selector_button" 
  5.     ohos:layout_alignment="horizontal_center" 
  6.     ohos:margin="5vp" 
  7.     ohos:text="Button xml" 
  8.     ohos:text_size="50" 
  9.     /> 

3代碼中使用

新建不同的狀態下的ShapeElement后將其添加到State Element中,并將需要設置狀態選擇器的部分設置為添加了狀態的StateElement,如Button的setBackground、Checkbox的setButtonElement,設置之后相關的控件就會有狀態選擇器的效果。

3.1 Button

  1. /** 
  2.  * 添加一個Button 
  3.  */ 
  4. private void initButton() { 
  5.     // Button在presses狀態的element 
  6.     ShapeElement elementButtonPressed = new ShapeElement(); 
  7.     elementButtonPressed.setRgbColor(RgbPalette.RED); 
  8.     elementButtonPressed.setShape(ShapeElement.RECTANGLE); 
  9.     elementButtonPressed.setCornerRadius(10); 
  10.     // Button在Disabled狀態下的element 
  11.     ShapeElement elementButtonDisable = new ShapeElement(); 
  12.     elementButtonDisable.setRgbColor(RgbPalette.GREEN); 
  13.     elementButtonDisable.setShape(ShapeElement.RECTANGLE); 
  14.     elementButtonDisable.setCornerRadius(10); 
  15.     // Button在Empty狀態下的element 
  16.     ShapeElement elementButtonEmpty = new ShapeElement(); 
  17.     elementButtonEmpty.setRgbColor(RgbPalette.BLUE); 
  18.     elementButtonEmpty.setShape(ShapeElement.RECTANGLE); 
  19.     elementButtonEmpty.setCornerRadius(10); 
  20.     // Button在Hoveered狀態下的element 
  21.     ShapeElement elementButtonHovered = new ShapeElement(); 
  22.     elementButtonHovered.setRgbColor(RgbPalette.GRAY); 
  23.     elementButtonHovered.setShape(ShapeElement.RECTANGLE); 
  24.     elementButtonHovered.setCornerRadius(10); 
  25.     // 將各種狀態下不同的背景添加到StateElement中 
  26.     StateElement stateElement = new StateElement(); 
  27.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_PRESSED}, elementButtonPressed); 
  28.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_DISABLED}, elementButtonDisable); 
  29.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_HOVERED}, elementButtonHovered); 
  30.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_EMPTY}, elementButtonEmpty); 
  31.  
  32.     // 新建一個button并將其添加到布局中 
  33.     Button button = new Button(this); 
  34.     button.setMarginTop(20); 
  35.     button.setText("Button"); 
  36.     button.setTextSize(50); 
  37.     // 設置按鈕的狀態,若為false,則表示狀態為COMPONENT_STATE_DISABLED 
  38.     // button.setEnabled(false); 
  39.     button.setBackground(stateElement); 
  40.     DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig( 
  41.             ComponentContainer.LayoutConfig.MATCH_CONTENT, ComponentContainer.LayoutConfig.MATCH_CONTENT); 
  42.     layoutConfig.alignment = LayoutAlignment.CENTER; 
  43.     layoutConfig.setMargins(20, 20, 20, 20); 
  44.     button.setLayoutConfig(layoutConfig); 
  45.     dlSelector.addComponent(button); 

3.2 TextField

  1. /** 
  2.  * 添加一個TextField 
  3.  */ 
  4. private void initTextField() { 
  5.     // TextField在presses狀態的element 
  6.     ShapeElement elementTextFieldPressed = new ShapeElement(); 
  7.     elementTextFieldPressed.setRgbColor(RgbPalette.RED); 
  8.     elementTextFieldPressed.setShape(ShapeElement.RECTANGLE); 
  9.     elementTextFieldPressed.setCornerRadius(10); 
  10.     // TextField在Disabled狀態下的element 
  11.     ShapeElement elementTextFieldDisable = new ShapeElement(); 
  12.     elementTextFieldDisable.setRgbColor(RgbPalette.GRAY); 
  13.     elementTextFieldDisable.setShape(ShapeElement.RECTANGLE); 
  14.     elementTextFieldDisable.setCornerRadius(10); 
  15.     // TextField在Empty狀態下的element 
  16.     ShapeElement elementTextFieldEmpty = new ShapeElement(); 
  17.     elementTextFieldEmpty.setRgbColor(RgbPalette.BLUE); 
  18.     elementTextFieldEmpty.setShape(ShapeElement.RECTANGLE); 
  19.     elementTextFieldEmpty.setCornerRadius(10); 
  20.     // TextField在Focused狀態下的element 
  21.     ShapeElement elementTextFieldFocused = new ShapeElement(); 
  22.     elementTextFieldFocused.setRgbColor(RgbPalette.GREEN); 
  23.     elementTextFieldFocused.setShape(ShapeElement.RECTANGLE); 
  24.     elementTextFieldFocused.setCornerRadius(10); 
  25.     //將各種狀態下不同的背景添加到StateElement中 
  26.     StateElement stateElement = new StateElement(); 
  27.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_PRESSED}, elementTextFieldPressed); 
  28.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_DISABLED}, elementTextFieldDisable); 
  29.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_FOCUSED}, elementTextFieldFocused); 
  30.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_EMPTY}, elementTextFieldEmpty); 
  31.  
  32.     //新建一個TextField并將其添加到布局中 
  33.     TextField textField = new TextField(this); 
  34.     textField.setText("TextField"); 
  35.     textField.setTextSize(50); 
  36.     // 設置textfield的狀態,若為false,則表示狀態為COMPONENT_STATE_DISABLED 
  37.     // textField.setEnabled(false); 
  38.     textField.setBackground(stateElement); 
  39.     DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig( 
  40.             ComponentContainer.LayoutConfig.MATCH_CONTENT, ComponentContainer.LayoutConfig.MATCH_CONTENT); 
  41.     layoutConfig.alignment = LayoutAlignment.CENTER; 
  42.     layoutConfig.setMargins(20, 20, 20, 20); 
  43.     textField.setLayoutConfig(layoutConfig); 
  44.     dlSelector.addComponent(textField); 

3.3 Checkbox

  1. /** 
  2.  * 添加一個Checkbox 
  3.  */ 
  4. private void initCheckbox() { 
  5.     // Checkbox在presses狀態的element 
  6.     ShapeElement elementCheckboxPressed = new ShapeElement(); 
  7.     elementCheckboxPressed.setRgbColor(RgbPalette.RED); 
  8.     elementCheckboxPressed.setShape(ShapeElement.RECTANGLE); 
  9.     elementCheckboxPressed.setCornerRadius(10); 
  10.     // Checkbox在Disabled狀態下的element 
  11.     ShapeElement elementCheckboxDisable = new ShapeElement(); 
  12.     elementCheckboxDisable.setRgbColor(RgbPalette.GREEN); 
  13.     elementCheckboxDisable.setShape(ShapeElement.RECTANGLE); 
  14.     elementCheckboxDisable.setCornerRadius(10); 
  15.     // Checkbox在Empty狀態下的element 
  16.     ShapeElement elementCheckboxEmpty = new ShapeElement(); 
  17.     elementCheckboxEmpty.setRgbColor(RgbPalette.BLUE); 
  18.     elementCheckboxEmpty.setShape(ShapeElement.RECTANGLE); 
  19.     elementCheckboxEmpty.setCornerRadius(10); 
  20.     // Checkbox在Checked狀態下的element 
  21.     ShapeElement elementCheckboxChecked = new ShapeElement(); 
  22.     elementCheckboxChecked.setRgbColor(RgbPalette.GRAY); 
  23.     elementCheckboxChecked.setShape(ShapeElement.RECTANGLE); 
  24.     elementCheckboxChecked.setCornerRadius(10); 
  25.     //將各種狀態下不同的背景添加到StateElement中 
  26.     StateElement stateElement = new StateElement(); 
  27.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_PRESSED}, elementCheckboxPressed); 
  28.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_DISABLED}, elementCheckboxDisable); 
  29.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_CHECKED}, elementCheckboxChecked); 
  30.     stateElement.addState(new int[]{ComponentState.COMPONENT_STATE_EMPTY}, elementCheckboxEmpty); 
  31.  
  32.     //新建一個button并將其添加到布局中 
  33.     Checkbox checkbox = new Checkbox(this); 
  34.     checkbox.setText("Checkbox"); 
  35.     checkbox.setTextSize(50); 
  36.     // 設置按鈕的狀態,若為false,則表示狀態為COMPONENT_STATE_DISABLED 
  37.     // checkbox.setEnabled(false); 
  38.     checkbox.setButtonElement(stateElement); 
  39.     // checkbox點擊也會有狀態變化 
  40.     // checkbox.setBackground(stateElement); 
  41.     DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig( 
  42.             ComponentContainer.LayoutConfig.MATCH_CONTENT, ComponentContainer.LayoutConfig.MATCH_CONTENT); 
  43.     layoutConfig.alignment = LayoutAlignment.CENTER; 
  44.     layoutConfig.setMargins(20, 20, 20, 20); 
  45.     checkbox.setLayoutConfig(layoutConfig); 
  46.     dlSelector.addComponent(checkbox); 

本文作者:Zhang Heng 來自鴻蒙三方庫聯合特戰隊

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2011-06-01 14:20:06

Android Selector

2022-02-22 08:00:48

JavaNIOBuffer

2011-06-16 14:08:20

JSONAjax

2010-08-31 19:42:21

DHCPdhcpd

2016-06-02 15:10:12

SwiftSelector

2011-06-15 15:16:54

Session

2010-06-21 13:52:20

AODV路由協議

2010-12-27 15:45:34

Exchange 20

2009-06-04 20:36:03

CheckStyle的Eclipse中的集成

2018-12-24 12:40:03

大數據IT互聯網

2023-11-05 12:20:10

匿名函數Golang

2025-02-28 09:14:09

JavaNIO機制

2019-12-03 10:00:19

awkLinux循環

2017-05-24 09:43:42

2011-06-17 14:16:21

ListBoxWindows Pho

2009-07-23 16:44:51

AdRotator控件ASP.NET

2022-01-06 09:55:19

鴻蒙HarmonyOS應用

2010-03-10 11:11:16

Python編程

2010-03-11 15:39:01

Python編程語言

2009-01-16 13:17:16

AjaxASP.NET.NET
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品免费观看 | 天天夜夜操 | 91麻豆精品国产91久久久更新资源速度超快 | 爱综合| 中文av网站 | 久久在线看 | 国产伦一区二区三区 | 天天宗合网 | 日韩av在线播 | 日韩资源| 色视频网站在线观看 | 久久精品亚洲成在人线av网址 | 欧美亚洲另类丝袜综合网动图 | 日韩精品在线免费观看 | ririsao久久精品一区 | 羞羞的视频在线看 | 玖玖操| 欧美又大粗又爽又黄大片视频 | 午夜精品久久久久久久 | av天天操| 91中文字幕在线观看 | 亚洲精品一区在线观看 | 精品一区在线 | 看av片网站 | 久久日韩精品一区二区三区 | 亚洲久草视频 | 美女黄18岁以下禁止观看 | 热99精品视频 | 在线看国产 | 成人免费一区二区三区牛牛 | www.狠狠干| 久久精品国产免费 | 永久网站 | 日韩黄色av | 成人影 | 日韩精品一区二 | 精品www| 久久久久久久久久久久久久av | 91亚洲精 | 91精品久久久久久久久久 | 黄一级|