结果: 

1.如果直接改变Tab的TabIndex,那样是没有动态效果的。如果想要动态效果需要用到ChangeTabAction1;

2.ChangeTabAction1可以直接为按钮指定Action这样不写代码,也可以支持动态效果。

3.ExecuteTarget是执行跳转功能,查看源代码,没有找到参数是做什么的。所以真心不明白里面的参数是什么意思。希望哪位前辈指点。

4.有人可能感觉出来了,为什么Android上的QQ、微信什么的手势都那么好用,而Delphi的有时不好使。其实不是这样的。那是因为Delphi中是直线向左、向右才识别。有关手势的我会重写文章说明,此文只是对Tab控件的功能介绍。

实例代码:

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  7. FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  8. FMX.Controls.Presentation, FMX.StdCtrls, FMX.ListBox, FMX.Layouts,
  9. FMX.TabControl, System.Actions, FMX.ActnList, FMX.NumberBox, FMX.Edit,
  10. FMX.EditBox, FMX.SpinBox, FMX.Gestures;
  11.  
  12. type
  13. TForm1 = class(TForm)
  14. TabControl1: TTabControl;
  15. Layout1: TLayout;
  16. ComboBox1: TComboBox;
  17. Label1: TLabel;
  18. TabItem1: TTabItem;
  19. TabItem2: TTabItem;
  20. TabItem3: TTabItem;
  21. TabItem4: TTabItem;
  22. Button1: TButton;
  23. Button2: TButton;
  24. ActionList1: TActionList;
  25. ChangeTabAction1: TChangeTabAction; //手动增加的Action
  26. ChangeTabAction2: TChangeTabAction; //手动增加的Action
  27. ChangeTabAction3: TChangeTabAction; //手动增加的Action
  28. ChangeTabAction4: TChangeTabAction; //手动增加的Action
  29. Button3: TButton;
  30. Button4: TButton;
  31. Button5: TButton;
  32. Button6: TButton;
  33. Button7: TButton;
  34. Button8: TButton;
  35. Button11: TButton;
  36. Button12: TButton;
  37. GestureManager1: TGestureManager; //手动增加的控件
  38. Label2: TLabel;
  39. Label3: TLabel;
  40. Label4: TLabel;
  41. Label5: TLabel;
  42. procedure Button1Click(Sender: TObject);
  43. procedure Button2Click(Sender: TObject);
  44. procedure Button7Click(Sender: TObject);
  45. procedure Button8Click(Sender: TObject);
  46. procedure Button11Click(Sender: TObject);
  47. procedure Button12Click(Sender: TObject);
  48. procedure ComboBox1Change(Sender: TObject);
  49. procedure TabControl1Gesture(Sender: TObject;
  50. const EventInfo: TGestureEventInfo; var Handled: Boolean);
  51. procedure FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  52. Shift: TShiftState);
  53. procedure FormCreate(Sender: TObject);
  54. private
  55. { Private declarations }
  56. public
  57. { Public declarations }
  58. end;
  59.  
  60. var
  61. Form1: TForm1;
  62.  
  63. implementation
  64.  
  65. {$R *.fmx}
  66. {$R *.NmXhdpiPh.fmx ANDROID}
  67.  
  68. //为了实现手势必须做的设置
  69. procedure TForm1.FormCreate(Sender: TObject);
  70. begin
  71. //为Tab指定一个手势控件
  72. TabControl1.Touch.GestureManager := GestureManager1;
  73. //设置Tab控件支持的手势有哪些(如果这一项不设置,手势是没有反映的)
  74. TabControl1.Touch.StandardGestures := [TStandardGesture.sgLeft, TStandardGesture.sgRight];
  75. end;
  76.  
  77. //Action上一页
  78. procedure TForm1.Button11Click(Sender: TObject);
  79. begin
  80. if TabControl1.TabIndex > then
  81. begin
  82. ChangeTabAction1.Tab := TTabItem(Form1.FindComponent('TabItem' + IntToStr(TabControl1.TabIndex)));
  83. ChangeTabAction1.ExecuteTarget(Self);
  84. end;
  85. end;
  86.  
  87. //Action下一页
  88. procedure TForm1.Button12Click(Sender: TObject);
  89. begin
  90. if TabControl1.TabIndex < TabControl1.TabCount - then
  91. begin
  92. ChangeTabAction1.Tab := TTabItem(Form1.FindComponent('TabItem' + IntToStr(TabControl1.TabIndex + )));
  93. ChangeTabAction1.ExecuteTarget(Self);
  94. end;
  95. end;
  96.  
  97. //Tab上一页
  98. procedure TForm1.Button1Click(Sender: TObject);
  99. begin
  100. if TabControl1.TabIndex > then
  101. begin
  102. TabControl1.TabIndex := TabControl1.TabIndex - ;
  103. end;
  104. end;
  105.  
  106. //Tab下一页
  107. procedure TForm1.Button2Click(Sender: TObject);
  108. begin
  109. if TabControl1.TabIndex < TabControl1.TabCount - then
  110. begin
  111. TabControl1.TabIndex := TabControl1.TabIndex + ;
  112. end;
  113. end;
  114.  
  115. //ExecuteTarget方法1
  116. procedure TForm1.Button7Click(Sender: TObject);
  117. begin
  118. ChangeTabAction1.ExecuteTarget(self);
  119. end;
  120.  
  121. //ExecuteTarget方法2
  122. procedure TForm1.Button8Click(Sender: TObject);
  123. begin
  124. ChangeTabAction1.ExecuteTarget(TabControl1);
  125. end;
  126.  
  127. procedure TForm1.ComboBox1Change(Sender: TObject);
  128. begin
  129. case ComboBox1.ItemIndex of
  130. : TabControl1.TabPosition := TTabPosition.PlatformDefault;
  131. : TabControl1.TabPosition := TTabPosition.Top;
  132. : TabControl1.TabPosition := TTabPosition.Bottom;
  133. : TabControl1.TabPosition := TTabPosition.None;
  134. : TabControl1.TabPosition := TTabPosition.Dots;
  135. end;
  136. end;
  137.  
  138. //利用手机的返回键实现Tab跳转
  139. procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  140. Shift: TShiftState);
  141. begin
  142. if Key = vkHardwareBack then
  143. begin
  144. if TabControl1.TabIndex > then
  145. begin
  146. TabControl1.TabIndex := TabControl1.TabIndex - mod TabControl1.TabCount;
  147. Key := ;
  148. end;
  149. end;
  150. end;
  151.  
  152. //利用手势实现Tab跳转
  153. procedure TForm1.TabControl1Gesture(Sender: TObject;
  154. const EventInfo: TGestureEventInfo; var Handled: Boolean);
  155. begin
  156. case EventInfo.GestureID of
  157. sgiLeft:
  158. begin
  159. case TabControl1.TabIndex of
  160. : ChangeTabAction2.ExecuteTarget(self);
  161. : ChangeTabAction3.ExecuteTarget(self);
  162. : ChangeTabAction4.ExecuteTarget(self);
  163. end;
  164. end;
  165. sgiRight:
  166. begin
  167. case TabControl1.TabIndex of
  168. : ChangeTabAction3.ExecuteTarget(self);
  169. : ChangeTabAction2.ExecuteTarget(self);
  170. : ChangeTabAction1.ExecuteTarget(self);
  171. end;
  172. end;
  173. end;
  174. Handled := True;
  175. end;
  176.  
  177. end.

Android实例-TTabControl的使用(XE8+小米2)的更多相关文章

  1. Android实例-OrientationSensor方向传感器(XE8+小米2)

    相关资料: <修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题>:http://www.cnblogs.com/onechen/p/4497282. ...

  2. Android实例-读取设备联系人(XE8+小米2)

    相关资料: http://www.colabug.com/thread-1071065-1-1.html 结果: 1.将权限打开Read contacts设置为True,不然报图一的错误. 2.搜索空 ...

  3. Android实例-设置消息提醒(XE8+小米2)

    相关资料: 1.官网实例:http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using_the_Notification ...

  4. Android实例-闪光灯的控制(XE8+小米2)

    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Var ...

  5. Android实例-获取程序版本号(XE10+小米2)

    相关资料: 383675978群号 实例源码: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, Sy ...

  6. Android实例-调用系统APP(XE10+小米2)

    相关资料:群号383675978 实例源码: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, Sys ...

  7. Android实例-红外线操作(XE10.2+小米5)

    相关资料: http://blog.csdn.net/qq_21752153/article/details/50244717https://developer.xamarin.com/api/typ ...

  8. Android实例-实现扫描二维码并生成二维码(XE8+小米5)

    相关资料: 第三方资料太大没法写在博文上,请下载CSDN的程序包. 程序包下载: http://download.csdn.net/detail/zhujianqiangqq/9657186 注意事项 ...

  9. 45个android实例源码

    分享45个android实例源码,很好很强大http://www.apkbus.com/android-20978-1-1.html andriod闹钟源代码http://www.apkbus.com ...

随机推荐

  1. HeadFirst设计模式之装饰者模式

    一. 1.The Decorator Pattern attaches additional responsibilities to an object dynamically.Decorators ...

  2. POJ1942——Paths on a Grid(组合数学)

    Paths on a Grid DescriptionImagine you are attending your math lesson at school. Once again, you are ...

  3. 排查Java线上服务故障的方法和实例分析

    前言 作为在线系统负责人或者是一个技术专家,你可能刚刚接手一个项目就需要处理紧急故障,或者被要求帮忙处理一些紧急的故障,这个时候的情景是: (1)你可能对这个业务仅仅是听说过,而不怎么真正了解: (2 ...

  4. python学习笔记六--用户自定义类

    一.类: 1. 面向对象. 2. 定义了新的对象类型. 定义了两个属性:name,pay 定义了两个方法:lastName,giveRaise

  5. Vim Gtags插件

    01.Gtags func:查看定义处 02.Gtags -r func:查看引用处 03.Gtags -s text:查看未被数据库定义的tags 04.copen:打开quick fix显示窗口 ...

  6. Fast scroller styles

    <!-- Fast scroller styles --> <!-- Drawable to use as the fast scroll thumb. --> <att ...

  7. Linux下修改PATH的方法

    Linux下修改PATH的方法 1.直接在命令行里敲 PATH=$PATH:/path1:/path2:/pathN用户登出之后PATH恢复原样. 只是临时起作用. 2.修改~目录下bash_prof ...

  8. poj1149

    非常好的网络流 每个顾客分别用一个结点来表示. 对于每个猪圈的第一个顾客,从源点向他连一条边,容量就是该猪圈里的猪的初始数量 对于每个猪圈,假设有n个顾客打开过它,则对所有整数i∈[1, n),从该猪 ...

  9. [转] struts.xml配置详解

    转自:http://www.cnblogs.com/fmricky/archive/2010/05/20/1740479.html struts.xml是我们在开发中利用率最高的文件,也是Struts ...

  10. 陈正冲老师讲c语言void关键字

    1. void a void的字面意思是“空类型”,void *则为“空类型指针”,void *可以指向任何类型的数据. void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量 ...