成人免费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

2022-01-06 09:55:19

鴻蒙HarmonyOS應用

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

2016-06-02 15:10:12

SwiftSelector

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

2010-03-10 11:11:16

Python編程

2009-01-16 13:17:16

AjaxASP.NET.NET

2010-07-27 12:28:56

Flex Remote

2023-09-26 22:37:16

C++const
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜视频在线观看视频 | 精品国产91| 二区精品 | 久久小视频 | 国产乱一区二区三区视频 | 激情久久网 | 成人久久18免费网站图片 | 97精品超碰一区二区三区 | 天天插天天狠天天透 | 亚洲精品日韩精品 | 91久久久久久久久久久久久 | 日日夜夜精品视频 | 五月香婷婷 | 久久久av| 伊人无码高清 | 日韩免费毛片 | 亚洲国产成人精品女人久久久 | 亚洲高清一区二区三区 | 性一交一乱一透一a级 | 亚洲视频二区 | 久久91精品国产 | 久久尤物免费一区二区三区 | 97av视频 | 性一爱一乱一交一视频 | 综合五月婷 | 日韩国产精品一区二区三区 | 欧美精品日韩精品国产精品 | 夜夜骑天天干 | www.4hu影院 | 亚洲手机视频在线 | 亚洲在线中文字幕 | 亚洲精品中文字幕在线观看 | 成人性视频免费网站 | 中文字幕在线三区 | 91精品国产一区二区在线观看 | 国产精品欧美一区二区三区不卡 | 国外成人在线视频网站 | 亚洲欧美精品久久 | 欧美视频三区 | aa级毛片毛片免费观看久 | 色888www视频在线观看 |