首页 > 编程语言 >B4X编程语言:B4X控件的尺寸大小属性(宽度/高度属性)

B4X编程语言:B4X控件的尺寸大小属性(宽度/高度属性)

时间:2024-11-30 21:01:35浏览次数:7  
标签:控件 例程 Label1 B4X Width Button1 PrefWidth 属性

        B4X控件的尺寸大小属性(宽度/高度属性)是指Width /Height属性(B4J中还有PrefWidth / PrefHeight属性)。

        1、Width

        设置或获取控件的宽度。
        用法示例:
        设置控件Label1的宽度:Label1.Width=200 或 Label1.Width=Label1.Width+50
        获取控件Label1的宽度:Dim w as Float=Label1.Width

        备注:
        
Width属性的值通常以像素为单位(B4A中一般以dip为单位)。某些控件可能有一个最小宽度,设置小于这个值的宽度可能会导致不可预见的行为。
        Width属性在B4J中对于大部分控件是只读的,只读属性下要设置控件宽度请用如下方法:
        Label1.As(B4XView).Width=200
        或Label1.PrefWidth=200

        2、Height

        设置或获取控件的高度。
        用法示例:
        设置控件Label1的高度:Label1.Height=50 或 Label1.Height=Label1.Height+10
        获取控件Label1的高度:Dim h as float=Label1.Height

        备注:
        
Height属性的值通常以像素为单位(B4A中一般以dip为单位)。某些控件可能有一个最小高度,设置小于这个值可能会导致不可预见的行为。
        Height属性在B4J中对于大部分控件是只读的,只读属性下要设置控件宽度请用如下方法:
        Label1.As(B4XView).Height=50
        或Label1.PrefHeight=50

        3、PrefWidth / PrefHeight(仅限B4J)

        设置或获取控件的预定义宽度/高度
        用法示例:
        设置控件Label1的预定义宽度/高度:
        Label1.PrefWidth=200 或 Label1.PrefWidth=Label1.PrefWidth+50
        Label1.PrefHeight=50 或 Label1.PrefHeight=Label1.PrefHeight+10
        获取控件Label1的预定义宽度/高度:
        Dim w as Float=Label1.PrefWidth
        Dim h as float=Label1.PrefHeight

        其实,Label1.As(B4XView).Height=50相当于Label1.PrefHeight=50

        在B4J中多了两个尺寸属性PrefWidth / PrefHeight,而且B4J中Width /Height属性是只读的。我们在调整控件尺寸的时候到底使用Width /Height还是PrefWidth / PrefHeight呢?让我们通过下面的示例感受一下不同:

        我们新建一个B4XPages项目,在项目模板的主页面布局中已有一个Button1按钮,在布局管理器中看到Button1的宽度是100,高度是60。我们打开B4XMainPage模块添加如下代码:
        ①在Sub Class_Globals例程添加:
                Private Button1 As Button
        ②在Sub B4XPage_Created例程添加:
                Log("B4XPage_Created例程中的宽度:"&Button1.Width)
                Log("B4XPage_Created例程中的预定义宽度:"&Button1.PrefWidth)
        ③在Sub Button1_Click例程注释掉原代码,添加:
                Button1.PrefWidth=200
                Log("Click事件中的宽度:"&Button1.Width)
                Log("Click事件中的预定义宽度:"&Button1.PrefWidth)
        ④添加Sub Button1_Resize例程,并添加代码:
                Log("Resize事件中的宽度:"&Button1.Width)
                Log("Resize事件中的预定义宽度:"&Button1.PrefWidth)

        这样,整个B4XMainPage模块的代码如下:

Sub Class_Globals
	Private Root As B4XView
	Private xui As XUI
	Private Button1 As Button
End Sub

Public Sub Initialize
'	B4XPages.GetManager.LogEvents = True
End Sub

Private Sub B4XPage_Created (Root1 As B4XView)
	Root = Root1
	Root.LoadLayout("MainPage")	
	Log("B4XPage_Created例程中的宽度:"&Button1.Width)
	Log("B4XPage_Created例程中的预定义宽度:"&Button1.PrefWidth)
End Sub

Private Sub Button1_Click
	' xui.MsgboxAsync("Hello world!", "B4X")
	Button1.PrefWidth=200
	Log("Click事件中的宽度:"&Button1.Width)
	Log("Click事件中的预定义宽度:"&Button1.PrefWidth)
End Sub

Private Sub Button1_Resize (Width As Double, Height As Double)
	Log("Resize事件中的宽度:"&Button1.Width)
	Log("Resize事件中的预定义宽度:"&Button1.PrefWidth)
End Sub

        存盘后调试运行,日志记录如下图:

        从日志记录可以看出:项目启动时调用了一次 Button1_Resize 例程,该例程获取了Button1的原定义尺寸;但B4XPage_Created例程在Button1_Resize例程之前运行,运行时还没有完成Button1的加载,没有获取到Button1的实际尺寸,仅获取到预定义尺寸。

        点击Button1按钮,得到如下日志记录:

        点击Button1按钮后,Button1的宽度发生了变化。从日志记录看出:点击按钮也调用了一次Button1_Resize事件。点击按钮时执行了Button1.PrefWidth=200语句,但此时Button1_Resize事件还没有完成,Click事件仅获取了新的预定义宽度,而获取的Button1实际宽度还是之前的。

        总结:
        B4J的UI操作通常需要在UI线程中执行。控件的初始化顺序一般晚于AppStart例程和B4XPage_Created例程。控件的大小和位置通常在UI初始化完成后才能被正确设置。
        在B4J中调整和获取控件大小不应在AppStart例程和B4XPage_Created例程,而应在Resize例程。
        在B4J中需要调整大小和外观的控件最好定义为B4XView类型,如果确实不想定义为B4XView类型,最好使用PrefWidth / PrefHeight调整或获取大小数据。
        B4XView类型的控件可直接使用Width /Height属性(没有PrefWidth / PrefHeight属性)调整或获取大小数据,即使在AppStart例程和B4XPage_Created例程也能正确完成相关操作。



 

标签:控件,例程,Label1,B4X,Width,Button1,PrefWidth,属性
From: https://blog.csdn.net/yshzsl1968/article/details/144160316

相关文章

  • Qt Design Studio常用组件及其属性
    入坑QtDesignStudio        笔者此前一直使用的是Qtcreator与其内置的Qtdesigner进行客户端界面设计和开发,采用的是qwidget+c++的设计方法,由于项目需要进行3D设计,转而学习使用QtDesignStudio,发现qml代码简单,布局直观,对新手更为友好,开发上手快速。因此,后续也会在......
  • 在使用 PowerShell 与 Excel COM 对象交互时,Get-Member 命令通常用于查看对象的成员(方
    在使用PowerShell与ExcelCOM对象交互时,Get-Member命令通常用于查看对象的成员(方法、属性等)。不过,Excel的COM对象可能会出现一些成员在使用Get-Member时无法完全显示的情况,尤其是在显示属性或方法时没有完全列出所有可用的成员。为了解决这个问题,可以使用以下几种方法来......
  • 用什么代替html5中不再支持table的cellspacing和cellpadding属性?
    在HTML5中,cellspacing和cellpadding属性确实不再被支持。要用CSS来实现相同的效果,主要依靠border-spacing和padding属性。1.cellspacing的替代方案:border-spacingcellspacing控制表格单元格之间的间距。在CSS中,可以使用border-spacing属性应用于<table>元素......
  • 说说你对iframe属性sandbox的理解,它有什么作用呢?
    sandbox属性是<iframe>元素的一个强大的安全特性,它允许你对嵌入的文档施加额外的限制,从而创建一个更安全的浏览环境。通过在<iframe>中添加sandbox属性,你实际上是将iframe内容放入了一个“沙盒”中,限制了它可以执行的操作。sandbox属性的作用是限制iframe中的代码的......
  • 面向对象--属性
    一、从猫类到对象:1.创建一个对象2.实例化一个对象3.把类实例化...上面的猫也可以是鱼、狗、人...java最大的特点就是面向对象把猫的特性取出来-->猫类Cat:属性、行为...自定义数据类型二、类与对象的关系类是抽象的,概念的,代表一类事物,比如人类,猫类..,即它是数据类型.对......
  • 在数据库字段命名格式和实体类属性命名格式不一致的情况下,通过配置 MyBatis 的通用 Ma
    MyBatis的通用Mapper支持使用@Column注解进行字段映射,但需要满足以下条件:项目中已集成MyBatis的通用Mapper(例如Mapper插件)。在通用Mapper的配置中启用了@Column注解支持。通用Mapper会根据实体类中字段的@Column注解值来映射数据库表的列名。使用@Colum......
  • 在数据库字段命名格式和实体类属性命名格式不一致的情况下,通过配置 MyBatis 的通用 Ma
    如果在MyBatis的通用Mapper中结合Example模式查询时,未自动使用实体类中@Column注解定义的字段映射,可能的原因是配置或使用方式上存在一些问题。以下是解决方案和注意事项:原因分析通用Mapper的@Column支持:通用Mapper支持通过@Column注解映射字段和数据库列,但......
  • 你对window的属性devicePixelRatio有了解吗?说说它有什么实际应用场景?
    window.devicePixelRatio属性表示设备的物理像素和CSS像素之间的比率。简单来说,它告诉你在一个CSS像素里包含了多少个实际的设备像素。在高清屏幕(例如Retina显示屏)上,这个值通常大于1,而在标准屏幕上,它通常等于1。实际应用场景主要集中在处理高清屏幕下的图像显示和can......
  • HTML5对元素内容进行拼写检查用的是什么属性呢?
    HTML5使用spellcheck属性来控制元素内容是否进行拼写检查。它是一个全局属性,这意味着它可以用于任何HTML元素。spellcheck属性接受以下值:true:启用拼写检查(这是许多浏览器的默认行为,特别是对于<textarea>和可编辑的<div>元素)。false:禁用拼写检查。default:......
  • HTML5中required属性有什么应用场景?
    HTML5的required属性主要用于表单验证,它指定了某个表单元素是必填的。用户提交表单时,如果带有required属性的元素没有填写值,浏览器会阻止表单提交并显示错误消息。以下是required属性的一些常见应用场景:确保关键信息的收集:例如注册表单中的用户名、密码、邮箱等字段......