自学鸿蒙应用开发(11)- RadioButton和RadioContainer

2021-01-13 11:18:40 浏览数 (1)

本文介绍在鸿蒙应用中RadioButton和RadioContainer组件的基本用法。

增加RadioButton和RadioContainer组件

如下代码中46行~66行所示,在布局中增加RadioButton和RadioContainer组件。

代码语言:javascript复制
<?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">
    <Component
        ohos:height="0vp"
        ohos:weight="3"
        ohos:width="match_parent"
        />
    <DirectionalLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:layout_alignment="center"
        ohos:orientation="vertical">
        <Image
            ohos:id="$ id:image"
            ohos:width="match_content"
            ohos:height="match_content"
            ohos:layout_alignment="center"
            ohos:image_src="$media:DevEco"
        />
        <TextField
            ohos:id="$ id:text_field"
            ohos:width="match_parent"
            ohos:height="30vp"
            ohos:text_size="20fp"
            ohos:text_alignment="center"
            ohos:hint="Please input text and press [Click me!] button."
            ohos:background_element="$graphic:background_text_field"
        />
        <Button
            ohos:id="$ id:hello_button"
            ohos:width="match_content"
            ohos:height="match_content"
            ohos:text_size="27fp"
            ohos:text="Click me!"
            ohos:layout_alignment="center"
            ohos:background_element="$graphic:background_button"
            ohos:margin="15vp"
            ohos:right_padding="8vp"
            ohos:left_padding="8vp"
            />
        <RadioContainer
            ohos:id="$ id:radio_container"
            ohos:height="match_content"
            ohos:width="match_content"
            ohos:top_margin="32vp"
            ohos:layout_alignment="horizontal_center"
            ohos:orientation="horizontal">
            <RadioButton
                ohos:id="$ id:r24h"
                ohos:height="40vp"
                ohos:width="match_content"
                ohos:text="24H"
                ohos:marked="true"
                ohos:text_size="20fp"/>
            <RadioButton
                ohos:id="$ id:r12h"
                ohos:height="40vp"
                ohos:width="match_content"
                ohos:text="12H"
                ohos:text_size="20fp"/>
        </RadioContainer>
        <TimePicker
            ohos:id="$ id:time_picker"
            ohos:24_hour_mode="false"
            ohos:height="match_content"
            ohos:width="match_parent"
            ohos:layout_alignment="horizontal_center"
            ohos:text_am="AM"
            ohos:text_pm="PM"
            ohos:normal_text_size="20fp"
            ohos:selected_text_size="25fp"/>
    </DirectionalLayout>
    <Component
        ohos:height="0vp"
        ohos:weight="5"
        ohos:width="match_parent"
        />
</DirectionalLayout>

代码中组件id被指定为radio_container,会在下面的响应代码中用到。

在代码中使用RadioButton和RadioContainer组件

下面代码中的第18行获取RadioContainer组件后,在第22行根据RadioContainer的状态更新TimePicker的形式,然后在第40行~43行为RadioContainer增加响应处理,其内容是同样是根据选中的RadioButton的索引更新TimePicker的形式。

代码语言:javascript复制
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.*;
import ohos.agp.window.dialog.ToastDialog;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

public class ComponentAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_component);
        //获取textfield输入组件
        TextField tf = (TextField) findComponentById(ResourceTable.Id_text_field);
        //获取button组件
        Button button = (Button) findComponentById(ResourceTable.Id_hello_button);
        //获取RedioContainer组件
        RadioContainer rcontainer = (RadioContainer)findComponentById(ResourceTable.Id_radio_container);
        //获取TimePicker组件
        TimePicker picker = (TimePicker) findComponentById(ResourceTable.Id_time_picker);
        //根据RadioContainer的状态设定TimePicker的形式。
        picker.set24Hour(rcontainer.getMarkedButtonId()==0);
        // 为按钮设置点击事件回调
        button.setClickedListener(new Component.ClickedListener() {
            public void onClick(Component v) {
                LocalTime rightNow = LocalTime.now();
                LocalTime pickTime = LocalTime.of(picker.getHour(), picker.getMinute(), picker.getSecond());
                String msg;
                if(pickTime.isBefore(rightNow))
                    msg = "所选时间比现在时刻早"   pickTime.until(rightNow, ChronoUnit.SECONDS)   "秒";
                else if(pickTime.isAfter(rightNow))
                    msg = "所选时间比现在时刻晚"   rightNow.until(pickTime, ChronoUnit.SECONDS)   "秒";
                else
                    msg = "所选时间和现在时刻一样";
                new ToastDialog(getContext())
                        .setText(msg)
                        .show();
            }
        });
        //为RadioContainer设置事件响应
        rcontainer.setMarkChangedListener((radioContainer1, index) -> {
            picker.set24Hour(index == 0);
        });
        //为TimePicker设定事件响应
        picker.setTimeChangedListener(
            new TimePicker.TimeChangedListener() {
                @Override
                public void onTimeChanged(TimePicker timePicker, int hour, int minute, int second) {
                    tf.setText(hour   ":"   minute   ":"   second);
                }
            }
        );
    }
    @Override
    public void onActive() {
        super.onActive();
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}
代码语言:javascript复制

参考文档

RadioContainer组件:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-radiocontainer-0000001063470429

RadioContainer类:

https://developer.harmonyos.com/cn/docs/documentation/doc-references/radiocontainer-0000001054678720

RadioButton组件

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-radiobutton-0000001060647792

RadioButton类

https://developer.harmonyos.com/cn/docs/documentation/doc-references/radiobutton-0000001054518732

0 人点赞