Checkbox

Checkbox可以实现选中和取消选中的功能。

支持的XML属性

Checkbox的共有XML属性继承自:Text

Checkbox的自有XML属性见下表:

属性名称 中文描述 取值 取值说明 使用案例
marked 当前状态(选中或取消选中) boolean类型 可以直接设置true/false,也可以引用boolean资源。 ohos:marked="true"ohos:marked="$boolean:true"
text_color_on 处于选中状态的文本颜色 color类型 可以直接设置色值,也可以引用color资源。 ohos:text_color_on="#FFFFFFFF"ohos:text_color_on="$color:black"
text_color_off 处于未选中状态的文本颜色 color类型 可以直接设置色值,也可以引用color资源。 ohos:text_color_off="#FFFFFFFF"ohos:text_color_off="$color:black"
check_element 状态标志样式 Element类型 可直接配置色值,也可引用color资源或引用media/graphic下的图片资源。 ohos:check_element="#000000"ohos:check_element="$color:black"ohos:check_element="$media:media_src"ohos:check_element="$graphic:graphic_src"

创建Checkbox

在layout目录下的xml文件中创建一个Checkbox。

<Checkbox    ohos:id="$+id:check_box"    ohos:height="match_content"    ohos:width="match_content"    ohos:text="This is a checkbox"    ohos:text_size="20fp" />

图1 Checkbox效果 img

设置Checkbox

  • 在XML中配置Checkbox的选中和取消选中的状态标志样式。

    layout目录下XML文件的示例代码如下:

    <Checkbox    ...    ohos:check_element="$graphic:checkbox_check_element" />
    

    graphic目录下创建checkbox_check_element.xml、background_checkbox_checked.xml和background_checkbox_empty.xml三个文件。

    checkbox_check_element.xml示例代码:

    <?xml version="1.0" encoding="utf-8"?><state-container xmlns:ohos="http://schemas.huawei.com/res/ohos">    <item ohos:state="component_state_checked" ohos:element="$graphic:background_checkbox_checked"/>    <item ohos:state="component_state_empty" ohos:element="$graphic:background_checkbox_empty"/></state-container>
    

    background_checkbox_checked.xml示例代码:

    <?xml version="1.0" encoding="UTF-8" ?><shape xmlns:ohos="http://schemas.huawei.com/res/ohos"       ohos:shape="rectangle">    <solid        ohos:color="#00BFC9"/></shape>
    

    background_checkbox_empty.xml示例代码:

    <?xml version="1.0" encoding="UTF-8" ?><shape xmlns:ohos="http://schemas.huawei.com/res/ohos"       ohos:shape="rectangle">    <solid        ohos:color="#000000"/></shape>
    

    图2 在XML中配置选中和取消选中状态效果

    img

  • 设置Checkbox的文字在选中和取消选中时的颜色。

    <Checkbox    ...    ohos:text_color_on="#00AAEE"    ohos:text_color_off="#000000" />
    

    图3 设置Checkbox文字颜色的效果

    img

  • 设置Checkbox的选中状态。

    checkbox.setChecked(true);
    
  • 设置不同状态之间的切换:如果当前为选中状态,那么将变为未选中;如果当前是未选中状态,将变为选中状态。

    checkbox.toggle();
    
  • 设置响应Checkbox状态变更的事件。

    // state表示是否被选中checkbox.setCheckedStateChangedListener((component, state) -> {    // 状态改变的逻辑    ...});
    

场景实例

使用Checkbox实现多选题的选择效果。

图4 实现多选场景的效果 点击放大

  • XML代码示例:

    <?xml version="1.0" encoding="utf-8"?><DirectionalLayout    xmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_parent"    ohos:width="match_parent"    ohos:orientation="vertical"    ohos:left_padding="40vp"    ohos:top_padding="40vp">
        <DirectionalLayout        ohos:height="match_content"        ohos:width="match_parent"        ohos:orientation="horizontal">
            <Text            ohos:height="match_content"            ohos:width="match_content"            ohos:text_size="18fp"            ohos:text="Which of the following are fruits?"/>
            <Text            ohos:id="$+id:text_answer"            ohos:height="match_content"            ohos:width="match_content"            ohos:left_margin="20vp"            ohos:text_size="20fp"            ohos:text_color="#FF3333"            ohos:text="[]" />    </DirectionalLayout>
        <Checkbox        ohos:id="$+id:check_box_1"        ohos:top_margin="40vp"        ohos:height="match_content"        ohos:width="match_content"        ohos:text="A Apples"        ohos:text_size="20fp"        ohos:text_color_on="#FF3333"        ohos:text_color_off="#000000"/>
        <Checkbox        ohos:id="$+id:check_box_2"        ohos:top_margin="40vp"        ohos:height="match_content"        ohos:width="match_content"        ohos:text="B Bananas"        ohos:text_size="20fp"        ohos:text_color_on="#FF3333"        ohos:text_color_off="#000000"/>
        <Checkbox        ohos:id="$+id:check_box_3"        ohos:top_margin="40vp"        ohos:height="match_content"        ohos:width="match_content"        ohos:text="C Strawberries"        ohos:text_size="20fp"        ohos:text_color_on="#FF3333"        ohos:text_color_off="#000000" />
        <Checkbox        ohos:id="$+id:check_box_4"        ohos:top_margin="40vp"        ohos:height="match_content"        ohos:width="match_content"        ohos:text="D Potatoes"        ohos:text_size="20fp"        ohos:text_color_on="#FF3333"        ohos:text_color_off="black" /></DirectionalLayout>
    
  • Java代码示例:

    // 保存最终选中的结果private Set<String> selectedSet = new HashSet<>();
    
    // 初始化Checkboxprivate void initCheckbox() {    Checkbox checkbox1 = (Checkbox) findComponentById(ResourceTable.Id_check_box_1);    checkbox1.setButtonElement(elementButtonInit());    checkbox1.setCheckedStateChangedListener((component, state) -> {        if (state) {            selectedSet.add("A");        } else {            selectedSet.remove("A");        }        showAnswer();    });    Checkbox checkbox2 = (Checkbox) findComponentById(ResourceTable.Id_check_box_2);    checkbox2.setButtonElement(elementButtonInit());    checkbox2.setCheckedStateChangedListener((component, state) -> {        if (state) {            selectedSet.add("B");        } else {           selectedSet.remove("B");        }        showAnswer();    });    Checkbox checkbox3 = (Checkbox) findComponentById(ResourceTable.Id_check_box_3);    checkbox3.setButtonElement(elementButtonInit());    checkbox3.setCheckedStateChangedListener((component, state) -> {        if (state) {            selectedSet.add("C");        } else {            selectedSet.remove("C");        }        showAnswer();    });    Checkbox checkbox4 = (Checkbox) findComponentById(ResourceTable.Id_check_box_4);    checkbox4.setButtonElement(elementButtonInit());    checkbox4.setCheckedStateChangedListener((component, state) -> {        if (state) {            selectedSet.add("D");        } else {            selectedSet.remove("D");        }        showAnswer();    });}
    
    // 设置Checkbox背景private StateElement elementButtonInit() {    ShapeElement elementButtonOn = new ShapeElement();    elementButtonOn.setRgbColor(RgbPalette.RED);    elementButtonOn.setShape(ShapeElement.OVAL);
        ShapeElement elementButtonOff = new ShapeElement();    elementButtonOff.setRgbColor(RgbPalette.BLACK);    elementButtonOff.setShape(ShapeElement.OVAL);
        StateElement checkElement = new StateElement();    checkElement.addState(new int[]{ComponentState.COMPONENT_STATE_CHECKED}, elementButtonOn);    checkElement.addState(new int[]{ComponentState.COMPONENT_STATE_EMPTY}, elementButtonOff);
        return checkElement;}
    
    // 显示结果private void showAnswer() {    Text answerText = (Text) findComponentById(ResourceTable.Id_text_answer);    String answer = selectedSet.toString();    answerText.setText(answer);}
    

results matching ""

    No results matching ""