在安卓上創建虛擬鍵盤 - Tuts+ Code
文章推薦指數: 80 %
使用Android SDK,你可以快速創建一個虛擬鍵盤,其代碼行數很少, ... 創建一個名爲res / layout / keyboard.xml的文件,並將其內容替換爲以下內容: ...
Unlimited
Plugins,WordPressthemes,videos&courses!
Unlimitedassetdownloads!
From$16.50/m
DismissSignInHow-ToTutorialsDesign&IllustrationCodeWebDesignPhoto&VideoBusinessMusic&Audio3D&MotionGraphicsGameDevelopmentComputerSkillsCoursesDesign&IllustrationCodeWebDesignPhoto&VideoBusinessMusic&Audio3D&MotionGraphicsFreeCoursesGuidesDesign&IllustrationCodeWebDesignPhoto&VideoBusinessMusic&Audio3D&MotionGraphicsGameDevelopmentComputerSkillseBooksDesign&IllustrationCodeWebDesignPhoto&VideoBusinessMusic&Audio3D&MotionGraphicsStudentPricingEnvatoElementsEnvatoStudioCommunityHelpEnvatoElementsEnvatoStudioCommunityForumHelpSubscribeSignInHow-ToTutorialsDesign&IllustrationAdobePhotoshopAdobeIllustratorDrawingAdobeInDesignPhotoManipulationGraphicDesignTextEffectsVectorPhotoshopActionsIconDesignMoreCategories...LearningGuidesCodeJavaScriptWordPressMobileDevelopmentPHPLaravelCMSSwiftAndroidSDKReactAngular2+MoreCategories...LearningGuidesWebDesignCSSHTML&CSSAnimationUIDesignAdobePhotoshopSketchWorkflowDesignTheoryJavaScriptUXMoreCategories...LearningGuidesPhoto&VideoPhotographyVideoEditingHow-ToInspirationLightingAdobePhotoshopAdobeAfterEffectsAdobePremiereProAdobeLightroomMoreCategories...LearningGuidesBusinessSmallBusinessEntrepreneurshipFreelanceCareersMarketingFinanceProductivityPlanningCommunicationHow-ToMoreCategories...LearningGuidesMusic&AudioAudioProductionLogicProGeneralMixing&MasteringSoundDesignWorkshopsReasonRecordingAbletonLiveCubaseMoreCategories...LearningGuides3D&MotionGraphicsAdobeAfterEffects3D3DStudioMaxMotionGraphicsMayaCinema4DWorkflowBlenderVisualEffectsRoundupsMoreCategories...LearningGuidesGameDevelopmentGameDesignPlatformAgnosticGameMechanicsBusinessProgrammingGameArtLevelDesignFromScratchUnityHTML5MoreCategories...LearningGuidesComputerSkillsOSXAppTrainingProductivityHow-ToTips&ShortcutsCustomizationAutomationSecurityHardwareMicrosoftPowerpointMoreCategories...LearningGuidesCoursesDesign&IllustrationCodeWebDesignPhoto&VideoBusinessMusic&Audio3D&MotionGraphicsFreeCoursesNEWGuidesDesign&IllustrationCodeWebDesignPhoto&VideoBusinessMusic&Audio3D&MotionGraphicsGameDevelopmentComputerSkillseBooksDesign&IllustrationCodeWebDesignPhoto&VideoBusinessMusic&Audio3D&MotionGraphicsStudentPricingAdvertisementCodeAndroidSDK在安卓上創建虛擬鍵盤AdvertisementAdvertisementAdvertisementAdvertisementAdvertisementbyAshraffHathibelagalDec1,2014ReadTime:9minsLanguages:EnglishбеларускаямоваελληνικάEspañolHrvatskiBahasaIndonesiaPусскийукраїнськамоваTiếngViệt中文(简体)中文(繁體)AndroidSDKJavaMobileDevelopmentEclipseIDEs扫描,分享朋友圈Chinese(Traditional)(中文(繁體))translationbyFuhuan(youcanalsoviewtheoriginalEnglisharticle)WhatYou'llBeCreating
大多數安卓設備是沒有物理鍵盤的,又不是十年前的半智能機,略略略。
用戶多靠虛擬或軟鍵盤來輸入文字信息。
如果你很喜歡玩機,知道如何構建自定義的虛擬鍵盤的話,會有一大群人膜拜你的水平。
使用AndroidSDK,你可以快速創建一個虛擬鍵盤,其代碼行數很少,因爲SDK可以處理許多低級任務,例如識別鍵盤觸摸,繪制鍵盤以及建立鍵盤和鍵盤之間的連接輸入字段。
在本教程中,你將學習如何編寫可用作Android設備默認鍵盤的全功能虛擬鍵盤。
1.首提條件
你將需要安裝EclipseADTBundle。
你可以從AndroidDeveloper網站下載。
2.創建一個新項目
啓動Eclipse並創建一個新的AndroidAPP。
調用這個應用程序,SimpleKeyboard。
再來一個獨特的命名。
將所需的最低SDK版本設置爲Android2.2,並將目標SDK版本設置爲Android4.4。
因爲此應用程序將沒有運行,因此取消選擇“下一部”並單擊“完成”。
3.編輯清單
Android操作系統將軟鍵盤視爲輸入法編輯器(IME)。
IME在AndroidManifest.xml中聲明爲Service,它使用BIND_INPUT_METHOD權限並響應動作android.view.InputMethod。
將以下行代碼添加到清單的應用程序標記中:
如果沒有此文件,Android系統將無法將我們的服務識別爲有效的IME服務。
該文件包含有關輸入法及其子類型的詳細信息。
對于我們的鍵盤,我們爲en_US語言環境定義了一個子類型。
如果res/xml不存在,則創建目錄res/xml,並將文件method.xml添加到它。
該文件的內容應該是:
我們將需要三個字符串:
應用程序的名稱IME的標簽IME子類型的標簽
更新你的strings.xml,使其具有以下內容:
該layout_alignParentBottom屬性設置爲真,這樣鍵盤會出現在屏幕的底部。
創建一個名爲res/layout/keyboard.xml的文件,並將其內容替換爲以下內容:
它包含一個單獨的TextView。
創建一個名爲res/layout/preview.xml的文件並添加以下內容:
每個鍵都有以下屬性:
keyLabel:該屬性包含鍵上顯示的文本。
keyLabel:該屬性包含鍵上顯示的文本。
例如,以限定用于字母的關鍵甲,所述代碼屬性的值應爲97和keyLabel屬性應設置爲甲。
如果多個代碼與一個密鑰相關聯,那麽該密鑰所代表的字符將取決于密鑰所接收的數量。
例如,如果一個鍵具有代碼63,33,和58:
在關鍵字上點擊一下就會輸出63?快速連續兩次敲擊就會輸出33!快速連續三次敲擊就會輸出58!
一個密鑰也可以有一些可選的屬性:
keyEdgeFlags:該屬性可以將值左側或右側。
該屬性通常被添加到行的最左邊和最右邊的鍵上。
keyWidth:這個屬性定義了一個鍵的寬度。
通常將其定義爲百分比值。
isRepeatable:如果此屬性設置爲true,長按該鍵將多次重複該鍵的操作。
對于刪除鍵和空格鍵通常設置爲true。
鍵盤的鍵被分組爲行。
最好將一行上的按鍵數量限制爲最多十個,每個按鍵的寬度等于鍵盤的10%。
本教程中鍵的高度設置爲60dp。
該值可以調整,但不推薦使用小于48dp的值。
我們的鍵盤將有五行鍵。
我們現在可以繼續設計鍵盤。
創建一個名爲res/xml/qwerty.xml的新文件,並將其內容替換爲以下內容:
負值等于Keyboard類中的預定義常量。
例如,值-5等于Keyboard.KEYCODE_DELETE的值。
7.創建一個服務類
創建一個新的Java類並將其稱爲SimpleIME.java。
該類應該擴展InputMethodService類並實現OnKeyboardActionListener接口。
該OnKeyboardActionListener接口包含在軟鍵盤的按鍵敲擊或按下時調用的方法。
該SimpleIME類應該有三個變量:
一個KeyboardView引用布局中定義的視圖一個分配給KeyboardView的鍵盤實例一個布爾值告訴我們是否啓用了大寫字母鎖定
在聲明這些變量並添加OnKeyboardActionListener接口的方法之後,SimpleIME類應如下所示:
publicclassSimpleIMEextendsInputMethodService
implementsOnKeyboardActionListener{
privateKeyboardViewkv;
privateKeyboardkeyboard;
privatebooleancaps=false;
@Override
publicvoidonKey(intprimaryCode,int[]keyCodes){
}
@Override
publicvoidonPress(intprimaryCode){
}
@Override
publicvoidonRelease(intprimaryCode){
}
@Override
publicvoidonText(CharSequencetext){
}
@Override
publicvoidswipeDown(){
}
@Override
publicvoidswipeLeft(){
}
@Override
publicvoidswipeRight(){
}
@Override
publicvoidswipeUp(){
}
}
當鍵盤被創建時,onCreateInputView方法被調用。
所有成員變量服務都可以在這裏初始化。
更新onCreateInputView方法的實現,如下所示:
@Override
publicViewonCreateInputView(){
kv=(KeyboardView)getLayoutInflater().inflate(R.layout.keyboard,null);
keyboard=newKeyboard(this,R.xml.qwerty);
kv.setKeyboard(keyboard);
kv.setOnKeyboardActionListener(this);
returnkv;
}
接下來,我們創建一個按下按鍵時播放聲音的方法。
我們使用AudioManager類播放聲音。
AndroidSDK包含一些按鍵的默認聲音效果,以及playClick方法中使用的聲音效果。
privatevoidplayClick(intkeyCode){
AudioManageram=(AudioManager)getSystemService(AUDIO_SERVICE);
switch(keyCode){
case32:
am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR);
break;
caseKeyboard.KEYCODE_DONE:
case10:
am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN);
break;
caseKeyboard.KEYCODE_DELETE:
am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE);
break;
default:am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD);
}
}
AndroidSDK包含一些按鍵的默認聲音效果,以及playClick方法中使用的聲音效果。
該getCurrentInputConnection方法用于獲取到另一個應用程序的輸入字段中的連接。
一旦我們有了連接,我們可以使用以下方法:
commitText將一個或多個字符添加到輸入字段deleteSurroundingText刪除輸入字段的一個或多個字符sendKeyEvent將事件(如KEYCODE_ENTER)發送到外部應用程序
只要用戶按下軟鍵盤上的某個鍵,就會使用該鍵的unicode值作爲其參數之一調用onKey方法。
根據此值,鍵盤執行以下操作之一:
如果代碼爲KEYCODE_DELETE,則使用deleteSurroundingText方法刪除光標左側的一個字符。
如果代碼是KEYCODE_DONE,則觸發KEYCODE_ENTER鍵事件。
如果代碼是KEYCODE_SHIFT,則caps變量的值將更改,並且使用setShifted方法更新鍵盤的移位狀態。
當狀態改變時鍵盤需要重新繪制,以便更新鍵的標簽。
該invalidateAllKeys方法用于重繪所有密鑰。
對于所有其他代碼,代碼僅轉換爲字符並發送到輸入字段。
如果代碼表示字母表中的字母,並且caps變量設置爲true,則該字符將轉換爲大寫字母。
更新onKey方法,使其看起來像這樣:
@Override
publicvoidonKey(intprimaryCode,int[]keyCodes){
InputConnectionic=getCurrentInputConnection();
playClick(primaryCode);
switch(primaryCode){
caseKeyboard.KEYCODE_DELETE:
ic.deleteSurroundingText(1,0);
break;
caseKeyboard.KEYCODE_SHIFT:
caps=!caps;
keyboard.setShifted(caps);
kv.invalidateAllKeys();
break;
caseKeyboard.KEYCODE_DONE:
ic.sendKeyEvent(newKeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_ENTER));
break;
default:
charcode=(char)primaryCode;
if(Character.isLetter(code)&&caps){
code=Character.toUpperCase(code);
}
ic.commitText(String.valueOf(code),1);
}
}
8.測試鍵盤
軟鍵盤現在已准備好進行測試。
編譯並在Android設備上運行它。
此應用沒有“正在運行”,這意味著它不會顯示在啓動器中。
要使用它,應首先在設備的設置中激活它。
激活簡單IME後,打開任何允許輸入文本的應用程序(例如,任何消息應用程序),然後單擊其中一個輸入字段。
你應該在通知區域看到一個鍵盤圖標。
根據你的設備,你可以單擊該圖標或向下拖動通知欄,然後選擇簡單輸入法作爲輸入法。
你現在應該可以使用新鍵盤輸入。
結論
在本教程中,你學習了如何從頭開始創建自定義鍵盤應用程序。
要改變鍵盤的外觀和感覺,你只需在res/layout/keyboard.xml和res/layout/preview.xml文件中添加額外的樣式。
要更改密鑰的位置,請更新res/xml/qwerty.xml文件。
要向鍵盤添加更多功能,請參閱開發者文檔。
关注我们的公众号扫描,分享朋友圈AdvertisementAndroidSDKJavaMobileDevelopmentEclipseIDEs扫描,分享朋友圈AshraffHathibelagalHathibelagalisanindependentAndroidappdeveloperandbloggerwholovestinkeringwithnewframeworks,SDKs,anddevices.hathibelFeedLikeFollowWeeklyemailsummarySubscribebelowandwe’llsendyouaweeklyemailsummaryofallnewCodetutorials.Nevermissoutonlearningaboutthenextbigthing.UpdatemeweeklyAdvertisementViewonGitHubAdvertisementAdvertisementAdvertisement
Lookingforsomethingtohelpkickstartyournextproject?
EnvatoMarkethasarangeofitemsforsaletohelpgetyoustarted.
WordPressPluginsFrom$5PHPScriptsFrom$5JavaScriptFrom$3MobileAppTemplatesFrom$5
×1,200+coursesandebooksDesign,code,videoediting,business,andmuchmore.AdobePhotoshop,IllustratorandInDesignGraphic,LogoandPrintDesignSketch,AdobeXD&FigmaWordPressJavascript,PHP&PythonAdobeAfterEffects&PremiereProMuchMoreMillionsofcreativeassetsDesigntemplates,stockvideos,photos&audio,andmuchmore.GraphicTemplatesStockPhotosMusicTracksVideoTemplatesWebTemplatesDesignAssetsWordpressThemes&PluginsMuchMoreUnlimitedDownloadsFrom$16.50/monthGetaccesstooveronemillioncreativeassetsonEnvatoElements.Over9MillionDigitalAssetsEverythingyouneedforyournextcreativeproject.CreateBeautifulLogos,Designs&MockupsinSecondsDesignlikeaprofessionalwithoutPhotoshop.JointheCommunityShareideas.Hostmeetups.Leaddiscussions.Collaborate.QuickLinksExplorepopularcategoriesCuratedDesignAssetsBestCoolFontsInDesignMagazineTemplatesPhotoshopActionsInDesignNewsletterTemplatesInDesignTemplatesCuratedWebDesignAssetsResponsiveWordPressThemesWordPressThemesforConsultantsWireframeTemplatesBestShopifyThemesMasonryWordPressThemesWebThemes&TemplatesWPThemesHTMLTemplatesShopifyThemesBootstrapThemesFreeWordPressThemesVideoAfterEffectsTemplatesAppleMotionTemplatesVideoEffectsLowerThirdsStockFootagePlaceitLogoMakerVideoMakerDesignTemplatesFreeTemplatesMockupsCuratedVideoAssetsAfterEffectsSlideshowTemplatesPremiereProVideoIntroTemplatesFinalCutProTemplatesFinalCutProTitleTemplatesPremiereProVideoEffectsCuratedPresentationAssetsKeynotePitchDeckTemplatesGoogleSlidesBusinessTemplatesPowerPointPitchDeckTemplatesBestShopifyMobileThemesBestPresentationTemplatesFreeToolsImageResizerVideoCropperVideoToGifConverterElementsWordPressThemesStockImagesWebsiteTemplatesLogosFontsTuts+LearnJavaScriptPhotoshopTutorialsHowtoDrawHowtoUseWordPressHowtoUsePowerPoint
延伸文章資訊
- 1在安卓上創建虛擬鍵盤 - Tuts+ Code
使用Android SDK,你可以快速創建一個虛擬鍵盤,其代碼行數很少, ... 創建一個名爲res / layout / keyboard.xml的文件,並將其內容替換爲以下內容: ...
- 2Let's build a custom keyboard for Android
- 3How to create a custom keyboard with Xamarin Forms (Android)
Some time ago a client requested a special keyboard for his application, which had to have certai...
- 4How can you make a custom keyboard in Android? - Stack ...
System keyboard. This answer tells how to make a custom system keyboard that can be used in any a...
- 510 best Android keyboards for all kinds of typists
Hacker's Keyboard · Microsoft SwiftKey · Multiling O Keyboard · Simple Keyboard · Typewise Custom...