鸿蒙App开发---Button组件

Posted 一天一篇Python库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鸿蒙App开发---Button组件相关的知识,希望对你有一定的参考价值。

鸿蒙App开发之Button

按钮是我们开发中最常见的组件之一,如果读者已经打开鸿蒙开发工具DevEco Studio,按住Ctrl添加Button类,会发现其继承自Text组件。

public class Button extends Text

所以,其在鸿蒙中是没有自有的XML属性的,其所有属性都继承自Text组件。

创建一个Button

这里,我们和Text组件一样,首先通过XML布局文件进行Button组件的创建。示例代码如下所示:

<Button
    ohos:id="$+id:test_button"
    ohos:height="match_content"
    ohos:width="match_content"
    ohos:element_left="$media:icon"
    ohos:layout_alignment="horizontal_center"
    ohos:top_margin="30vp"
    ohos:background_element="$graphic:background_ability_main"
    ohos:text="$string:test_button"
    ohos:text_size="40vp"
/>

这里,我们创建了一个长方形的按钮。graphic资源文件如下,仅仅设置了其背景的颜色为红色。

<shape xmlns:ohos="http://schemas.huawei.com/res/ohos"
       ohos:shape="rectangle">
    <solid
        ohos:color="#FF0000"/>
</shape>

运行之后,效果如下:
长方形按钮

圆形按钮

通过graphic资源文件的设置,我们还可以将按钮变换为圆形头像类似的圆形按钮。示例代码如下:

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

不过,需要注意的是,这里我们设置的按钮为oval椭圆形,而圆形也是椭圆形的一种,但圆形的宽高相等。所以,我们还需要将Button按钮宽高设置成一样。

<Button
    ohos:id="$+id:test_button"
    ohos:height="100vp"
    ohos:width="100vp"
    ohos:layout_alignment="horizontal_center"
    ohos:top_margin="30vp"
    ohos:background_element="$graphic:background_ability_main"
    ohos:text="+"
    ohos:text_size="40vp"
/>

运行之后,效果如下:
圆形按钮

至于椭圆,只要保证宽高不相等即是椭圆按钮。

无背景有边框的圆角按钮

这里,我们还是实现一个长方形的按钮,但其4个角是圆角过渡,且没有背景。示例代码如下:

<shape
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:shape="rectangle">
    <stroke
        ohos:width="2"
        ohos:color="#FF0000"/>
    <corners
        ohos:radius="100"/>
</shape>

这里,我们设置了边框的宽度为2,且为红色,同时设置圆角为100。而XML布局中的按钮代码如下所示:

<Button
    ohos:id="$+id:test_button"
    ohos:height="match_content"
    ohos:width="match_content"
    ohos:layout_alignment="horizontal_center"
    ohos:top_margin="30vp"
    ohos:padding="10vp"
    ohos:background_element="$graphic:background_ability_main"
    ohos:text="$string:test_button"
    ohos:text_size="40vp"
/>

运行之后,效果如下:
圆角按钮

按钮的点击事件(实战通话界面)

众所周知,我们很多手机的通话界面就是12个圆形按钮组成的按键。当我们点击按钮的时候,对应的数字就会输入到上面的文本框中形成电话号码。

拨号界面
下面,我们通过这个项目来实战按钮是否完全掌握。代码如下:

package com.liyuanjing.idacommunity.slice;
import com.liyuanjing.idacommunity.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Text;

public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
    private Button button0;
    private Button button1;
    private Button button2;
    private Button button3;
    private Button button4;
    private Button button5;
    private Button button6;
    private Button button7;
    private Button button8;
    private Button button9;
    private Button button10;
    private Button button11;
    private Text phone_text;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        this.button0=(Button)findComponentById(ResourceTable.Id_button_0);
        this.button1=(Button)findComponentById(ResourceTable.Id_button_1);
        this.button2=(Button)findComponentById(ResourceTable.Id_button_2);
        this.button3=(Button)findComponentById(ResourceTable.Id_button_3);
        this.button4=(Button)findComponentById(ResourceTable.Id_button_4);
        this.button5=(Button)findComponentById(ResourceTable.Id_button_5);
        this.button6=(Button)findComponentById(ResourceTable.Id_button_6);
        this.button7=(Button)findComponentById(ResourceTable.Id_button_7);
        this.button8=(Button)findComponentById(ResourceTable.Id_button_8);
        this.button9=(Button)findComponentById(ResourceTable.Id_button_9);
        this.button10=(Button)findComponentById(ResourceTable.Id_button_10);
        this.button11=(Button)findComponentById(ResourceTable.Id_button_11);
        this.phone_text=(Text)findComponentById(ResourceTable.Id_phone_number_text);

        this.phone_text.setClickedListener(this);
        this.button0.setClickedListener(this);
        this.button1.setClickedListener(this);
        this.button2.setClickedListener(this);
        this.button3.setClickedListener(this);
        this.button4.setClickedListener(this);
        this.button5.setClickedListener(this);
        this.button6.setClickedListener(this);
        this.button7.setClickedListener(this);
        this.button8.setClickedListener(this);
        this.button9.setClickedListener(this);
        this.button10.setClickedListener(this);
        this.button11.setClickedListener(this);
    }
    @Override
    public void onClick(Component component) {
        switch (component.getId()){
            case ResourceTable.Id_button_0:
                this.phone_text.setText(this.phone_text.getText()+"0");
                break;
            case ResourceTable.Id_button_1:
                this.phone_text.setText(this.phone_text.getText()+"1");
                break;
            case ResourceTable.Id_button_2:
                this.phone_text.setText(this.phone_text.getText()+"2");
                break;
            case ResourceTable.Id_button_3:
                this.phone_text.setText(this.phone_text.getText()+"3");
                break;
            case ResourceTable.Id_button_4:
                this.phone_text.setText(this.phone_text.getText()+"4");
                break;
            case ResourceTable.Id_button_5:
                this.phone_text.setText(this.phone_text.getText()+"5");
                break;
            case ResourceTable.Id_button_6:
                this.phone_text.setText(this.phone_text.getText()+"6");
                break;
            case ResourceTable.Id_button_7:
                this.phone_text.setText(this.phone_text.getText()+"7");
                break;
            case ResourceTable.Id_button_8:
                this.phone_text.setText(this.phone_text.getText()+"8");
                break;
            case ResourceTable.Id_button_9:
                this.phone_text.setText(this.phone_text.getText()+"9");
                break;
            case ResourceTable.Id_button_10:
                this.phone_text.setText(this.phone_text.getText()+"*");
                break;
            case ResourceTable.Id_button_11:
                this.phone_text.setText(this.phone_text.getText()+"#");
                break;
            case ResourceTable.Id_phone_number_text:
                this.phone_text.setText("");
        }
    }
    @Override
    public void onActive() {
        super.onActive();
    }
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

这里我们使用最基本获取控件的方式,后面讲解ResourceTable时,教大家如何使用循环体获取名称相近的组件。

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">
    <Text
        ohos:id="$+id:phone_number_text"
        ohos:height="match_content"
        ohos:weight="1"
        ohos:text_size="30vp"
        ohos:layout_alignment="horizontal_center"
        ohos:width="match_content"/>
    <!--第1排按钮 -->
    <DirectionalLayout
        ohos:height="match_content"
        ohos:width="match_parent"
        ohos:weight="1"
        ohos:margin="10vp"
        ohos:orientation="horizontal">

        <Button
            ohos:id="$+id:button_1"
            ohos:height="100vp"
            ohos:width="100vp"
            ohos:text="1"
            ohos:text_size="30vp"
            ohos:left_margin="10vp"
            ohos:background_element="$graphic:background_ability_main"/>

        <Button
            ohos:id="$+id:button_2"
            ohos:height="100vp"
            ohos:width="100vp"
            ohos:text="2"
            ohos:text_size="30vp"
            ohos:left_margin="10vp"
            ohos:background_element="$graphic:background_ability_main"/>

        <Button
            ohos:id="$+id:button_3"
            ohos:height="100vp"
            ohos:width="100vp"
            ohos:text="3"
            ohos:text_size="30vp"
            ohos:left_margin="10vp"
            ohos:background_element="$graphic:background_ability_main"/>
    </DirectionalLayout>
    <!--第2排按钮 -->
    <DirectionalLayout
        ohos:height="match_content"
        ohos:width="match_parent"
        ohos:weight="1"
        ohos:margin="10vp"
        ohos:orientation="horizontal">

        <Button
            ohos:id="$+id:button_4"
            ohos:height="100vp"
            ohos:width="100vp"
            ohos:text="4"
            ohos:text_size="30vp"
            ohos:left_margin="10vp"
            ohos:background_element="$graphic:background_ability_main"/>

        <Button
            ohos:id="$+id:button_5"
            ohos:height="100vp"
            ohos:width="100vp"
            ohos:text="5"
            ohos:text_size="30vp"
            ohos:left_margin="10vp"
            ohos:background_element="$graphic:background_ability_main"鸿蒙App开发---TextField组件

鸿蒙App开发---TextField组件

鸿蒙开发|Button组件

鸿蒙开发|Button组件

鸿蒙开发|Button组件

鸿蒙App开发---Text组件