線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2651
推到 Plurk!
推到 Facebook!

如何關閉鍵盤顥示

答題得分者是:JamesJuan
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-02-02 19:53:30 IP:114.27.xxx.xxx 未訂閱
請問各位, 

1. 我設置一個 TEdit(或TSpinBox), 執行時點選, Android手機會算顯示鍵盤, 如何關閉不讓其自動拉出來?
2. xe5 有提供螢幕旋轉的功能, 果我設計的是橫式的畫面, 並不想讓手機直立時可以轉向, 但卻可以upside down (上下旋轉), 我試了這四種的組合,
如果不做 custom orientation 則可以自動旋轉, 可是如果指定不管那種方式(portrait, upside down, landscape home left, landscape home right), 或者四種都勾選,
螢幕都不會轉了, 有沒有什麼方法可以做到橫式可上下旋轉180度, 還是得用程式控制 rotationangle?
mypigbaby
高階會員


發表:11
回覆:168
積分:155
註冊:2006-07-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-02-02 22:34:06 IP:203.73.xxx.xxx 訂閱
豬寶寶有一段隱藏鍵盤的程式碼希望對你有幫助
這個按下去..如果虛擬鍵盤有顯示的話,會隱藏起來
[code delphi]
uses FMX.Platform,FMX.VirtualKeyboard;
procedure TForm1.Button1Click(Sender: TObject);
var
FService: IFMXVirtualKeyboardService;
begin
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
if (FService <> nil) and (vksVisible in FService.VirtualKeyBoardState) then
begin
FService.HideVirtualKeyboard;
end;
[/code]


===================引 用 P.D. 文 章===================
請問各位,

1. 我設置一個 TEdit(或TSpinBox), 執行時點選, Android手機會算顯示鍵盤, 如何關閉不讓其自動拉出來?
2. xe5 有提供螢幕旋轉的功能, 果我設計的是橫式的畫面, 並不想讓手機直立時可以轉向, 但卻可以upside down (上下旋轉), 我試了這四種的組合,
如果不做 custom orientation 則可以自動旋轉, 可是如果指定不管那種方式(portrait, upside down, landscape home left, landscape home right), 或者四種都勾選,
螢幕都不會轉了, 有沒有什麼方法可以做到橫式可上下旋轉180度, 還是得用程式控制 rotationangle?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-02-03 17:08:09 IP:114.27.xxx.xxx 未訂閱
感謝豬豬寶提供的資訊, 
我測試的結果, 不管把這段程式放在那裡 (on create, onclick....), 只要點到 spinbox , Android的鍵盤還是會出現
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-02-06 08:36:27 IP:112.104.xxx.xxx 訂閱
SpinBox1.CanFocus := False;

===================引 用 P.D. 文 章===================
我測試的結果, 不管把這段程式放在那裡 (on create, onclick....), 只要點到 spinbox , Android的鍵盤還是會出現
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2014-02-06 09:27:04 IP:118.160.xxx.xxx 未訂閱
這個我試過了, 在第一次點入 SpinBox 時, 我的 HTC 手機的鍵盤還是會出現
===================引 用 Main Chen 文 章===================
SpinBox1.CanFocus := False;

===================引 用 P.D. 文 章===================
我測試的結果, 不管把這段程式放在那裡 (on create, onclick....), 只要點到 spinbox , Android的鍵盤還是會出現
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2014-02-06 09:38:12 IP:112.104.xxx.xxx 訂閱
在 SpinBox1.OnEnter 裡加入一行程式, 再將焦點轉到其它元件, 如 Button1.SetFocus;
以上是我想的, 我沒試過.

===================引 用 P.D. 文 章===================
這個我試過了, 在第一次點入 SpinBox 時, 我的 HTC 手機的鍵盤還是會出現
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2014-02-06 11:48:31 IP:59.120.xxx.xxx 未訂閱
這個應該行不通, 因為通過按下的event, 就已經觸發了虛擬鍵盤的啟動, 事後在event 中寫其他的指令, 應該都是比這個動作要來的晚了, 
不過我可以試試看, 我也沒試過, 大概也沒有人會有這麼另類的想法吧!
===================引 用 Main Chen 文 章===================
在 SpinBox1.OnEnter 裡加入一行程式, 再將焦點轉到其它元件, 如 Button1.SetFocus;
以上是我想的, 我沒試過.

===================引 用 P.D. 文 章===================
這個我試過了, 在第一次點入 SpinBox 時, 我的 HTC 手機的鍵盤還是會出現
JamesJuan
中階會員


發表:2
回覆:76
積分:80
註冊:2003-04-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2014-02-06 13:14:14 IP:114.32.xxx.xxx 未訂閱
[code delphi]
uses
FMX.Platform.Android;

procedure TForm2.Edit1Enter(Sender: TObject);
begin
Timer1.Enabled := True;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
MainActivity.getTextEditorProxy.showSoftInput(False);
end;
[/code]

Timer1.Interval 可以設定短一點,比如 100 ms
編輯記錄
JamesJuan 重新編輯於 2014-02-06 13:15:38, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2014-02-07 03:19:16 IP:118.160.xxx.xxx 未訂閱
謝謝James的提供, 
我按所指示操作, 確實可以讓虛擬鍵盤不出現佔據畫面, 不過加 timer 的作法, 會有很短暫的時間秀出來再消失(即鍵盤會閃一下出現後不見),
所以, 我把MainActivity.getTextEditorProxy.showSoftInput(False) 放在on Click Event 中, 就不會有閃動的現象,
只是這樣每點選一次 Spinbox 就會觸發, 不知道會不會引發其他問題?

然而, 如果我把它放在 on Enter Event中, 也可達成不顯示的功能,
不知道是 on Enter 及 on Click 那一個比較恰當及穩定?
因為我第一次放在 on Enter 中沒有作用, 而這次就可以, 是運氣好嗎?

附帶一提, 必須把 Spinbox 的 canfocus 關閉才可以不顯示出來
===================引 用 JamesJuan 文 章===================
[code delphi]
uses
FMX.Platform.Android;

procedure TForm2.Edit1Enter(Sender: TObject);
begin
Timer1.Enabled := True;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
MainActivity.getTextEditorProxy.showSoftInput(False);
end;
[/code]

Timer1.Interval 可以設定短一點,比如 100 ms
編輯記錄
P.D. 重新編輯於 2014-02-07 03:24:25, 註解 無‧
P.D. 重新編輯於 2014-02-07 03:34:51, 註解 無‧
系統時間:2024-04-18 11:00:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!