我有一个面向选项卡的Firemonkey多平台应用程序。我有一些可能有个别通知的标签。我知道移动应用的通知中心,但在我自己的应用内部,我不知道如何在标签项上做类似的指示。
例如,我有一个带有4个标签的TTabControl
。每个标签都有一个自定义图标。在图标旁边的每个选项卡上,我想显示一个通知指示器,类似于使用通知时应用程序图标上显示的指示。
这样的事情:
如何在iOS和Android的标签页上显示这样的指标?
我已经尝试在其上添加标签,但是在为不同平台重新调整/重新调整/重新排列表单时,无法知道如何以编程方式定位该标签。如果TTabItem
有Position
和Size
属性,我可以一起定位这样的标签。但如果没有它,我如何定位与此标签相关的任何内容?
答案 0 :(得分:0)
我想出了如何在标签项上定位标签。它有点草率,但它的确有效。首先,TTabControl.TabPosition
不得为PlatformDefault
。它必须是Top
或Bottom
。其次,标签必须与TTabControl
位于同一父控件中。然后,实现如下函数:
procedure TfrmMain.PositionNotifyLabel(ALabel: TLabel; ATabItem: TTabItem);
var
TabLeft, TabTop: Single;
X: Integer;
T: TTabItem;
TabControl: TTabControl;
begin
TabControl:= ATabItem.TabControl;
//Calculate left position of tab
TabLeft:= 0;
for X := 0 to TabControl.TabCount-1 do begin
T:= TabControl.Tabs[X];
if T = ATabItem then Break;
TabLeft:= TabLeft + T.Width;
end;
case TabControl.TabPosition of
TTabPosition.Top: begin
TabTop:= 0;
end;
TTabPosition.Bottom: begin
TabTop:= TabControl.Height - TabControl.TabHeight;
end;
else begin
//Not Supported
TabTop:= 0;
end;
end;
//Calculate label width based on tab width
ALabel.Width:= ATabItem.Width / 3;
//Position label to calculated Left/Top positions
ALabel.Position.X:= TabLeft + ATabItem.Width - ALabel.Width;
ALabel.Position.Y:= TabTop;
ALabel.BringToFront;
end;
在表单show和表单调整上调用此函数,如下所示:
PositionNotifyLabel(lblCartNotify, tabCart);