SOUI控件之weight使用

SOUI控件在使用线性布局时可使用weight属性来达到子控件按比例分配父控件剩余空间的效果。通过灵活使用这个属性可以达到很多效果,下面通过一个例子来说明其使用。

首先上XML

<window size="-2,-2" layout="vbox" inset="22,60,22,0" interval="6">
		<text text="程序已用空间"/>
		<text colorText="@color/meused" font="adding:6">10.1G</text>
		<window size="-2,-1" layout="hbox">
			<window name="meused" size="0,14" colorBkgnd="@color/meused"/>
			<window name="dskused" size="0,-2" colorBkgnd="@color/dskused"/>
			<window name="dskfree" size="0,-2" colorBkgnd="@color/dskfree"/>
		</window>
		<window size="-1,-1" layout="hbox" interval="2" gravity="center">
			<window size="10,10" colorBkgnd="@color/meused"/>
			<text text="自己已用空间" colorText="@color/dskused"/>
			<window size="10,10" extend_left="20" colorBkgnd="@color/dskused"/>
			<text text="磁盘已用空间" colorText="@color/dskused"/>
			<window size="10,10" extend_left="20" colorBkgnd="@color/dskfree"/>
			<text text="磁盘可用空间" colorText="@color/dskused"/>
		</window>
	</window>

上面使用size=0再通过动态设置weight即可达到动态分配大小的效果。动态设置这里使用一个函数实现。

void CMainDlg::SetDsk(double meused, double dskused, double total)
{
	SWindow* pWndMeUsed = FindChildByName(L"meused");
	SWindow* pWndDskUsed = FindChildByName(L"dskused");
	SWindow* pWndDskFree = FindChildByName(L"dskfree");
	if (pWndMeUsed && pWndDskUsed && pWndDskFree)
	{
		pWndMeUsed->SetAttribute(L"weight",SStringT().Format(L"%d",int(meused)));
		pWndDskUsed->SetAttribute(L"weight", SStringT().Format(L"%d", int(dskused- meused)));
		pWndDskFree->SetAttribute(L"weight", SStringT().Format(L"%d", int(total- dskused)));
	}
}

当然这里仅仅演示weight用法,具体算法可以更精确一些。初使化时调用SetDsk(10.1, 60.1, 200);

运行效果如下:

 这也算SOUI的一种简洁之道,可以通过灵活的组合来达到减少造轮子的效果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值