Building Custom Components/建立自定义组件

本文介绍如何在Android中创建自定义组件,包括完全自定义组件、组合型组件的创建方法及应用场景。并列举了常用内置组件。

Building Custom Components/建立自定义组件

文章分类:移动开发

一、android除了内建的众多组件(widget/layout)外,还提供基于View和ViewGroup的成熟组件扩展模型,让你构建自已的组件。

 

二、常用的内建widget有:Button、TextView、EditText、ListView、CheckBox、RadioButton、Gallery、Spinner、AutoCompleteTextView、ImageSwitcher、TextSwitcher。常用的内建layout有:LinearLayout、FrameLayout、RelativeLayout。

 

三、需要新建自定义widget的情况有以下几种:完全自定义的功能及外观,像时钟、音量控制等;把多个内建widget组合在一起形成新的一个大组件;

 

四、简单的新建组件方法:新建一个类,继承自view或它的子类。重写父类的部份方法。

 

五、完全自定义组件的方法:继承view;重写onMeasure和onDraw方法。默认下onDraw不做任何事情,onMeasure设置控件大小为100*100。最后重写一些on方法及添加相关属性。

 

六、重写onDraw。onDraw方法会传入一个canvas对像。你可以用它来来设置控件的包观方面的事情,包括2d graphics。(如果要用3d graphics,请用SurfaceView代替View)。

 

七、重写onMeasure。在onMeasure方法中调用setMeasuredDimension(int width,int height)方法 ,告诉容器当前控件的大小。

 

八、创建组合型自定义组件。继承layout,然后用xml或编程方式放置各种组件;从构造方法中得到相关参数,并传递给各组件;按需要,重写一些事件方法(onXXX);在创建组合型自定义组件时重写onDraw与onMeasure不是必需的。

 

九、在xml中调用自定义组件。组件为内部类:根据类型,标签写View/ViewGroup。然后在class属性中填写具体的类,例如 <View class="com.humanmonth.CusComp$MyComp。组件为一般类:标签直接写全类名。

PS D:\ESP_IDF\project-name> idf.py menuconfig Executing action: menuconfig Running cmake in directory D:\ESP_IDF\project-name\build Executing "cmake -G Ninja -DPYTHON_DEPS_CHECKED=1 -DPYTHON=D:\ESP_IDF\espressif\python_env\idf5.4_py3.11_env\Scripts\python.exe -DESP_PLATFORM=1 -DCCACHE_ENABLE=1 D:\ESP_IDF\project-name"... -- ccache will be used for faster recompilation -- git rev-parse returned 'fatal: not a git repository (or any of the parent directories): .git' -- Could not use 'git describe' to determine PROJECT_VER. -- Building ESP-IDF components for target esp32s3 -- Project sdkconfig file D:/ESP_IDF/project-name/sdkconfig -- Compiler supported targets: xtensa-esp-elf -- USING O3 -- App "project-name" version: 1 -- Adding linker script D:/ESP_IDF/project-name/build/esp-idf/esp_system/ld/memory.ld -- Adding linker script D:/ESP_IDF/project-name/build/esp-idf/esp_system/ld/sections.ld.in -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.api.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.bt_funcs.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.libgcc.ld-- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.wdt.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.version.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.ble_master.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.ble_50.ld-- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.ble_smp.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.ble_dtm.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.ble_test.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.ble_scan.ld -- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom/esp32s3/ld/esp32s3.rom.newlib.ld-- Adding linker script D:/ESP_IDF/v5.4.3/esp-idf/components/soc/esp32s3/ld/esp32s3.peripherals.ld -- Components: app_trace app_update bootloader bootloader_support bt cmock console cxx driver efuse esp-tls esp_adc esp_app_format esp_bootloader_format esp_coex esp_common esp_driver_ana_cmpr esp_driver_cam esp_driver_dac esp_driver_gpio esp_driver_gptimer esp_driver_i2c esp_driver_i2s esp_driver_isp esp_driver_jpeg esp_driver_ledc esp_driver_mcpwm esp_driver_parlio esp_driver_pcnt esp_driver_ppa esp_driver_rmt esp_driver_sdio esp_driver_sdm esp_driver_sdmmc esp_driver_sdspi esp_driver_spi esp_driver_touch_sens esp_driver_tsens esp_driver_uart esp_driver_usb_serial_jtag esp_eth esp_event esp_gdbstub esp_hid esp_http_client esp_http_server esp_https_ota esp_https_server esp_hw_support esp_lcd esp_local_ctrl esp_mm esp_netif esp_netif_stack esp_partition esp_phy esp_pm esp_psram esp_ringbuf esp_rom esp_security esp_system esp_timer esp_vfs_console esp_wifi espcoredump esptool_py fatfs freertos hal heap http_parser idf_test ieee802154 json log lwip main mbedtls mqtt newlib nvs_flash nvs_sec_provider openthread partition_table perfmon protobuf-c protocomm pthread rt sdmmc soc spi_flash spiffs tcp_transport touch_element ulp unity usb vfs wear_levelling wifi_provisioning wpa_supplicant xtensa -- Component paths: D:/ESP_IDF/v5.4.3/esp-idf/components/app_trace D:/ESP_IDF/v5.4.3/esp-idf/components/app_update D:/ESP_IDF/v5.4.3/esp-idf/components/bootloader D:/ESP_IDF/v5.4.3/esp-idf/components/bootloader_support D:/ESP_IDF/v5.4.3/esp-idf/components/bt D:/ESP_IDF/v5.4.3/esp-idf/components/cmock D:/ESP_IDF/v5.4.3/esp-idf/components/console D:/ESP_IDF/v5.4.3/esp-idf/components/cxx D:/ESP_IDF/v5.4.3/esp-idf/components/driver D:/ESP_IDF/v5.4.3/esp-idf/components/efuse D:/ESP_IDF/v5.4.3/esp-idf/components/esp-tls D:/ESP_IDF/v5.4.3/esp-idf/components/esp_adc D:/ESP_IDF/v5.4.3/esp-idf/components/esp_app_format D:/ESP_IDF/v5.4.3/esp-idf/components/esp_bootloader_format D:/ESP_IDF/v5.4.3/esp-idf/components/esp_coex D:/ESP_IDF/v5.4.3/esp-idf/components/esp_common D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_ana_cmpr D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_cam D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_dac D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_gpio D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_gptimer D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_i2c D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_i2s D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_isp D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_jpeg D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_ledc D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_mcpwm D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_parlio D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_pcnt D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_ppa D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_rmt D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_sdio D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_sdm D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_sdmmc D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_sdspi D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_spi D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_touch_sens D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_tsens D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_uart D:/ESP_IDF/v5.4.3/esp-idf/components/esp_driver_usb_serial_jtag D:/ESP_IDF/v5.4.3/esp-idf/components/esp_eth D:/ESP_IDF/v5.4.3/esp-idf/components/esp_event D:/ESP_IDF/v5.4.3/esp-idf/components/esp_gdbstub D:/ESP_IDF/v5.4.3/esp-idf/components/esp_hid D:/ESP_IDF/v5.4.3/esp-idf/components/esp_http_client D:/ESP_IDF/v5.4.3/esp-idf/components/esp_http_server D:/ESP_IDF/v5.4.3/esp-idf/components/esp_https_ota D:/ESP_IDF/v5.4.3/esp-idf/components/esp_https_server D:/ESP_IDF/v5.4.3/esp-idf/components/esp_hw_support D:/ESP_IDF/v5.4.3/esp-idf/components/esp_lcd D:/ESP_IDF/v5.4.3/esp-idf/components/esp_local_ctrl D:/ESP_IDF/v5.4.3/esp-idf/components/esp_mm D:/ESP_IDF/v5.4.3/esp-idf/components/esp_netif D:/ESP_IDF/v5.4.3/esp-idf/components/esp_netif_stack D:/ESP_IDF/v5.4.3/esp-idf/components/esp_partition D:/ESP_IDF/v5.4.3/esp-idf/components/esp_phy D:/ESP_IDF/v5.4.3/esp-idf/components/esp_pm D:/ESP_IDF/v5.4.3/esp-idf/components/esp_psram D:/ESP_IDF/v5.4.3/esp-idf/components/esp_ringbuf D:/ESP_IDF/v5.4.3/esp-idf/components/esp_rom D:/ESP_IDF/v5.4.3/esp-idf/components/esp_security D:/ESP_IDF/v5.4.3/esp-idf/components/esp_system D:/ESP_IDF/v5.4.3/esp-idf/components/esp_timer D:/ESP_IDF/v5.4.3/esp-idf/components/esp_vfs_console D:/ESP_IDF/v5.4.3/esp-idf/components/esp_wifi D:/ESP_IDF/v5.4.3/esp-idf/components/espcoredump D:/ESP_IDF/v5.4.3/esp-idf/components/esptool_py D:/ESP_IDF/v5.4.3/esp-idf/components/fatfs D:/ESP_IDF/v5.4.3/esp-idf/components/freertos D:/ESP_IDF/v5.4.3/esp-idf/components/hal D:/ESP_IDF/v5.4.3/esp-idf/components/heap D:/ESP_IDF/v5.4.3/esp-idf/components/http_parser D:/ESP_IDF/v5.4.3/esp-idf/components/idf_test D:/ESP_IDF/v5.4.3/esp-idf/components/ieee802154 D:/ESP_IDF/v5.4.3/esp-idf/components/json D:/ES(Top) Espressif IoT Development Framework Configuration Build type ---> Bootloader config ---> Security features ---> Application manager ---> Boot ROM Behavior ---> Serial flasher config ---> Partition Table ---> Compiler options ---> Component config ---> [ ] Make experimental features visible [Space/Enter] Toggle/enter [ESC] Leave menu [S] Save [O] Load [?] Symbol info [/] Jump to symbol [F] Toggle show-help mode [C] Toggle show-name mode [A] Toggle show-all mode [Q] Quit (prompts for save) [D] Save minimal config (advanced)
11-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值