Android实例-TTabControl的使用(XE8+小米2)

Android实例-TTabControl的使用(XE8+小米2)_编程

结果: 

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 > 0 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 - 1 then
 91   begin
 92     ChangeTabAction1.Tab := TTabItem(Form1.FindComponent('TabItem' + IntToStr(TabControl1.TabIndex + 2)));
 93     ChangeTabAction1.ExecuteTarget(Self);
 94   end;
 95 end;
 96 
 97 //Tab上一页
 98 procedure TForm1.Button1Click(Sender: TObject);
 99 begin
100   if TabControl1.TabIndex > 0 then
101   begin
102     TabControl1.TabIndex := TabControl1.TabIndex - 1;
103   end;
104 end;
105 
106 //Tab下一页
107 procedure TForm1.Button2Click(Sender: TObject);
108 begin
109   if TabControl1.TabIndex < TabControl1.TabCount - 1 then
110   begin
111     TabControl1.TabIndex := TabControl1.TabIndex + 1;
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     0: TabControl1.TabPosition := TTabPosition.PlatformDefault;
131     1: TabControl1.TabPosition := TTabPosition.Top;
132     2: TabControl1.TabPosition := TTabPosition.Bottom;
133     3: TabControl1.TabPosition := TTabPosition.None;
134     4: 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 > 0 then
145     begin
146       TabControl1.TabIndex := TabControl1.TabIndex - 1 mod TabControl1.TabCount;
147       Key := 0;
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         0: ChangeTabAction2.ExecuteTarget(self);
161         1: ChangeTabAction3.ExecuteTarget(self);
162         2: ChangeTabAction4.ExecuteTarget(self);
163       end;
164     end;
165     sgiRight:
166     begin
167       case TabControl1.TabIndex of
168         3: ChangeTabAction3.ExecuteTarget(self);
169         2: ChangeTabAction2.ExecuteTarget(self);
170         1: ChangeTabAction1.ExecuteTarget(self);
171       end;
172     end;
173   end;
174   Handled := True;
175 end;
176 
177 end.