日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Selector在HarmonyOS中的使用

想了解更多內(nèi)容,請訪問:

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的金鳳網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.

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

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

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

實現(xiàn)以及使用:

1創(chuàng)建selector.xml

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

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

 
 
 
 
  1.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  2.     ohos:shape="rectangle">
  3.     
  4.     

定義按下狀態(tài)下的背景生成background_btn_pressed.xml:

 
 
 
 
  1.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  2.     ohos:shape="rectangle">
  3.     
  4.     
  5.         ohos:color="#FF0000"/>

創(chuàng)建selector_button.xml,在ohos:element字段中配置shape背景, ohos:state配置控件狀態(tài):

 
 
 
 
  1.     xmlns:ohos="http://schemas.huawei.com/res/ohos">
  2.     
  3.         ohos:element="$graphic:background_btn_disabled"
  4.         ohos:state="component_state_disabled"/>
  5.     
  6.         ohos:element="$graphic:background_btn_pressed"
  7.         ohos:state="component_state_pressed"/>
  8.     
  9.         ohos:element="$graphic:background_btn_empty"
  10.         ohos:state="component_state_empty"/>

也可以直接使用顏色:

 
 
 
 
  1.     xmlns:ohos="http://schemas.huawei.com/res/ohos">
  2.     
  3.         ohos:element="#ff0000"
  4.         ohos:state="component_state_disabled"/>
  5.     
  6.         ohos:element="#00ff00"
  7.         ohos:state="component_state_pressed"/>
  8.     
  9.         ohos:element="#0000ff"
  10.         ohos:state="component_state_empty"/>

2控件中使用

設(shè)置控件的背景background_element為狀態(tài)選擇器,并在狀態(tài)選擇器中按需添加不同的狀態(tài)和不同的狀態(tài)下的背景:

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

3代碼中使用

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

3.1 Button

 
 
 
 
  1. /**
  2.  * 添加一個Button
  3.  */
  4. private void initButton() {
  5.     // Button在presses狀態(tài)的element
  6.     ShapeElement elementButtonPressed = new ShapeElement();
  7.     elementButtonPressed.setRgbColor(RgbPalette.RED);
  8.     elementButtonPressed.setShape(ShapeElement.RECTANGLE);
  9.     elementButtonPressed.setCornerRadius(10);
  10.     // Button在Disabled狀態(tài)下的element
  11.     ShapeElement elementButtonDisable = new ShapeElement();
  12.     elementButtonDisable.setRgbColor(RgbPalette.GREEN);
  13.     elementButtonDisable.setShape(ShapeElement.RECTANGLE);
  14.     elementButtonDisable.setCornerRadius(10);
  15.     // Button在Empty狀態(tài)下的element
  16.     ShapeElement elementButtonEmpty = new ShapeElement();
  17.     elementButtonEmpty.setRgbColor(RgbPalette.BLUE);
  18.     elementButtonEmpty.setShape(ShapeElement.RECTANGLE);
  19.     elementButtonEmpty.setCornerRadius(10);
  20.     // Button在Hoveered狀態(tài)下的element
  21.     ShapeElement elementButtonHovered = new ShapeElement();
  22.     elementButtonHovered.setRgbColor(RgbPalette.GRAY);
  23.     elementButtonHovered.setShape(ShapeElement.RECTANGLE);
  24.     elementButtonHovered.setCornerRadius(10);
  25.     // 將各種狀態(tài)下不同的背景添加到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.     // 新建一個button并將其添加到布局中
  32.     Button button = new Button(this);
  33.     button.setMarginTop(20);
  34.     button.setText("Button");
  35.     button.setTextSize(50);
  36.     // 設(shè)置按鈕的狀態(tài),若為false,則表示狀態(tài)為COMPONENT_STATE_DISABLED
  37.     // button.setEnabled(false);
  38.     button.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.     button.setLayoutConfig(layoutConfig);
  44.     dlSelector.addComponent(button);
  45. }

3.2 TextField

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

3.3 Checkbox

 
 
 
 
  1. /**
  2.  * 添加一個Checkbox
  3.  */
  4. private void initCheckbox() {
  5.     // Checkbox在presses狀態(tài)的element
  6.     ShapeElement elementCheckboxPressed = new ShapeElement();
  7.     elementCheckboxPressed.setRgbColor(RgbPalette.RED);
  8.     elementCheckboxPressed.setShape(ShapeElement.RECTANGLE);
  9.     elementCheckboxPressed.setCornerRadius(10);
  10.     // Checkbox在Disabled狀態(tài)下的element
  11.     ShapeElement elementCheckboxDisable = new ShapeElement();
  12.     elementCheckboxDisable.setRgbColor(RgbPalette.GREEN);
  13.     elementCheckboxDisable.setShape(ShapeElement.RECTANGLE);
  14.     elementCheckboxDisable.setCornerRadius(10);
  15.     // Checkbox在Empty狀態(tài)下的element
  16.     ShapeElement elementCheckboxEmpty = new ShapeElement();
  17.     elementCheckboxEmpty.setRgbColor(RgbPalette.BLUE);
  18.     elementCheckboxEmpty.setShape(ShapeElement.RECTANGLE);
  19.     elementCheckboxEmpty.setCornerRadius(10);
  20.     // Checkbox在Checked狀態(tài)下的element
  21.     ShapeElement elementCheckboxChecked = new ShapeElement();
  22.     elementCheckboxChecked.setRgbColor(RgbPalette.GRAY);
  23.     elementCheckboxChecked.setShape(ShapeElement.RECTANGLE);
  24.     elementCheckboxChecked.setCornerRadius(10);
  25.     //將各種狀態(tài)下不同的背景添加到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.     //新建一個button并將其添加到布局中
  32.     Checkbox checkbox = new Checkbox(this);
  33.     checkbox.setText("Checkbox");
  34.     checkbox.setTextSize(50);
  35.     // 設(shè)置按鈕的狀態(tài),若為false,則表示狀態(tài)為COMPONENT_STATE_DISABLED
  36.     // checkbox.setEnabled(false);
  37.     checkbox.setButtonElement(stateElement);
  38.     // checkbox點擊也會有狀態(tài)變化
  39.     // checkbox.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.     checkbox.setLayoutConfig(layoutConfig);
  45.     dlSelector.addComponent(checkbox);
  46. }

本文作者:Zhang Heng 來自鴻蒙三方庫聯(lián)合特戰(zhàn)隊

想了解更多內(nèi)容,請訪問:

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.


網(wǎng)頁題目:Selector在HarmonyOS中的使用
分享地址:http://www.dlmjj.cn/article/cdcijhj.html