B4A Library [B4X] SD CustomKeyboard


THIS version is no longer updated and supported. You can continue to use it if you want.
Or try the
new version with rewritten methods and new features

IMPORTANT
  • depends on SD CreativeBackGround (0.06+) library which must be downloaded
  • MaterialIcon font for special characters must be loaded.
    Use: SD_Keyboard1.SpecialKeyFont = xui.CreateMaterialIcons (16)

SD_CustomKeyboard

Author:
Star-Dust
Version: 1.20
  • CustomKey
    • Fields:
      • CodeCanc As Int
      • CodeDel As Int
      • CodeEnter As Int
      • CodeEraseAll As Int
      • CodeEsc As Int
      • CodeNext As Int
      • CodeShift As Int
      • CodeTab As Int
    • Functions:
      • AddCustomKeyToLastRow (UpperText As String, UpperCode As Int, LowerText As String, LowerCode As Int, size As Int, BackgroundKeyColor As Int, TextKeyColor As Int) As String
        Ck.AddCustomKeyToLastRow("SPACE",32,"SPACE.",32,3,xui.Color_Red,xui.Color_White) ' space large 3 key
        Ck.AddCustomKeyToLastRow("Enter",ck.CodeEnter,"Enter",ck.CodeEnter,1, ,xui.Color_Green,xui.Color_White))
      • AddDoubleCharToLastRow (Keys As String()) As String
        Char or key: Shift, Canc, Del, Tab, Esc, Next,EraseAll
        CustomKey.AddRowDoubleCharToLastRow(array as string("Aa","Bb","Cc","Next","Tab","Canc"))
        CustomKey.AddRowDoubleCharToLastRow(Regex.Split(",","Aa,Bb,Cc,00,11,12,Enter"))
      • AddEmptyRow As String
      • AddEmptySpaceToLastRow As String
      • AddKeyToLastRow (UpperText As String, UpperCode As Int, LowerText As String, LowerCode As Int, size As Int) As String
        Ck.AddKeytoLastRow("SPACE",32,"SPACE.",32,3) ' space large 3 key
        Ck.AddKeytoLastRow("",0,"",0,1) ' Empty
        Ck.AddKeytoLastRow("Enter",ck.CodeEnter,"Enter",ck.CodeEnter,1)
      • AddRow (Keys As List) As String
        CustomKey.AddRow(ListOfSingleKey)
      • AddRowDoubleChar (Keys As String()) As String
        Char or key: Shift, Canc, Del, Tab, Esc, Next,EraseAll
        CustomKey.AddRowDoubleChar(array as string("Aa","Bb","Cc","Next","Tab","Canc"))
        CustomKey.AddRowDoubleChar(Regex.Split(",","Aa,Bb,Cc,00,11,12,Enter"))
      • AddRowSimpleChar (Keys As String()) As String
        Char or key: Shift, Canc, Del, Tab, Esc, Next, EraseAll
        CustomKey.AddRowSimpleChar(array as string("A","B","C","Next","Tab","Canc"))
        CustomKey.AddRowSimpleChar(Regex.Split(",","A,B,C,0,1,2,Enter"))
      • AddRowStringtoKey (Strings As String()) As String
        Don't insert special char: Shift, Canc, Del, Tab, Esc, Next
        CustomKey.AddRowStringtoKey(array as string("00","000","Hallo"))
        CustomKey.AddRowStringtoKey(Regex.Split(",","00,000,Hallo"))
      • AddSimpleCharToLastRow (Keys As String()) As String
        Char or key: Shift, Canc, Del, Tab, Esc, Next, EraseAll
        CustomKey.AddSimpleCharToLastRow(array as string("A","B","C","Next","Tab","Canc"))
        CustomKey.AddSimpleCharToLastRow(Regex.Split(",","A,B,C,0,1,2,Enter"))
      • cEmptyKey As Type_SingleKey
      • cKey (UpperText As String, UpperCode As Int, LowerText As String, LowerCode As Int) As Type_SingleKey
      • cKeyCustomized (UpperText As String, UpperCode As Int, LowerText As String, LowerCode As Int, size As Int, BackgroundKeyColor As Int, TextKeyColor As Int) As Type_SingleKey
      • cKeySized (UpperText As String, UpperCode As Int, LowerText As String, LowerCode As Int, size As Int) As Type_SingleKey
      • Class_Globals As String
      • Initialize As String
        Initializes the object. You can add parameters to this method if needed.
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • KeyBoard As List
  • SD_Keyboard
    • Fields:
      • InsertAlwaysAtEnd As Boolean
      • keyCanc As String
      • keyDel As String
      • keyEnter As String
      • keyEraseAll As String
      • keyNext As String
      • keyShiftDown As String
      • keyShiftLock As String
      • keyShiftUp As String
      • KeyStyle As Int [write only]
        0-Standard; 1-Comics; 2-Heart; 3-Flower; 4-Octagon
      • keyTab As String
      • mBase As B4XView
      • Tag As Object
      • TimeLapseMilliSec As Int
    • Functions:
      • Add (TextEditorView As B4XView, NativeEventName As String, CustomizeKeyboard As CustomKey, NextFocus As B4XView) As String
        --------------------------------- aggiuntivi ------------------------------------
      • Add2 (TextEditorView As B4XView, NativeEventName As String, CustomizeKeyboard As CustomKey, ShiftOn As Boolean, NextFocus As B4XView) As String
      • Class_Globals As String
      • ClearKeyboard As String
      • DesignerCreateView (Base As Object, Lbl As Label, Props As Map) As String
        Base type must be Object
      • DrawKeyboard (V As B4XView) As String
      • GetBase As B4XView
      • Initialize (Callback As Object, EventName As String) As String
      • Invalidate As String
      • IsInitialized As Boolean
        Verifica se l'oggetto sia stato inizializzato.
      • SetEvent (View As EditText, te As TypeED) As String
      • SetupColor (BackgroundColorKey As Int, TextColorKey As Int, BackgroundColorBoard As Int)
      • ShifOn (S As Boolean) As String
      • ShiftStatus As Boolean
      • Snapshot As B4XView
    • Properties:
      • DarkFactor As Float
        To set the intensity of the dark part of the shadow - normally = 0.85
      • Font
        Set Key Font
      • Height As Int
      • ImageBackground
      • Left As Int
      • LightFactor As Float
        To set the intensity of the light part of the shadow - normally = 1.15
      • ShowKeyboard As Boolean
      • SpecialKeyFont
        Set Font of SpecilKey - Standard: MaterialIcon
      • Top As Int
      • Visible As Boolean
      • Width As Int


____________________________________________________________________________________________________________________________________________________



B4A, B4J, B4I
1644858933600.png
1644858999113.png
1644859187138.png
1651651351138.png
1651651416509.png
1651651497482.png



log release
  • 1.03
    Added AddRowDouble method: allows you to enter the value in uppercase and lowercase for each key, for keys with special characters you can establish the character that will show in normal and with the shift
  • 1.04
    Added ClearKeyboard method to clear the keyboard with all the associations made with the views
    Added AddRowStringtoKey method that allows you to associate a complex key with multi-character text. With this method it is not possible to set special keys such as Shift, Canc, Del, Tab, Esc, Next.
  • 1.05
    Added Vibration option in design
  • 1.06
    Added new Key: EraseAll. Delete all text in the field
    Added: LightFactor and DarkFactor property
  • 1.07
    Now the special keys are created with the MaterialIcons font.
    It will be possible to change the font of the special characters and the text of the characters
    We have updated all the examples with the addition of the MaterialIcons font and added all the missing iOs examples
  • 1.08
    Customized keys with the possibility of establishing their size
    Ability to customize the background with an image
    Possibility to insert empty spaces between the keys
    Possibility to set the StartSelect always at the end
  • 1.09
    Added AddSimpleCharToLastRow and AddRowDoubleCharToLastRow methods.
    Added constants with the numeric code of the special keys: CodeCanc,CodeTab,CodeEnter,CodeEsc,CodeDel,CodeNext,CodeShift,CodeEraseAll
    Ability to add custom keys that raise an event other than TextChange
    Added new event to TextField or EditText view to handle custom keys that can have a negative value return code. Example: TextField1_CustomKey (Code As Int)
  • 1.10; 1.11
    Fix bugs
  • 1.12
    Added AddCustomKeyToLastRow method in CustomKey class to customize single key colors
    Added Add2 method in the SD_Keyboard class to set the SHIFT key when starting the keyboard
  • 1.13
    Set Shift key by code
    Fix bugs
  • 1.14
    Added AddEmptyKeyToLastRow method in CustomKey class
    Added cEmptyKey method in CustomKey class
  • 1.15
    Added AddEmptyRow method in CustomKey class
  • 1.16
    Fixed BUGS that gave false warning for missing MaterialIncons font
  • 1.17
    Updated to work with version 0.6 of SD_CreativeBackGround
  • 1.18
    Added the SetupColor method to change the color of the background, buttons and text from code
  • 1.19
    Added KeyStyle property
  • 1.20
    Fix bug

Important depends on SD CreativeBackGround library which must be downloaded
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User

Star-Dust

Expert
Licensed User
Longtime User
Hi I think "showkeyboard=true/false" and "visible" not work well. not work after several times
There is no flaw in the library. This method sets the Visible field of the base. Same as you would Keyboard.mBase.Visible = True / False
 

Blueforcer

Well-Known Member
Licensed User
Longtime User
I always get the error

B4X:
 *** MaterialIcons font is missing use this command:
SD_Keyboard1.SpecialKeyFont = xui.CreateMaterialIcons (16)

even if its already added.
 

Star-Dust

Expert
Licensed User
Longtime User
The compiler needs the font and can't find it. The reason is not related to the library but to the code you wrote.
Do the examples work for you?
 

Blueforcer

Well-Known Member
Licensed User
Longtime User
The compiler needs the font and can't find it. The reason is not related to the library but to the code you wrote.
Do the examples work for you?

no, tried sampleA and get the same log output.
Its just an optical thing, it still works.
But I get this message in the log although it should not be. And this comes of course from the libary
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
It's not an error, it's just a warning message to remind you to use this command. Errors are marked in red.
You can ignore it
 

Blueforcer

Well-Known Member
Licensed User
Longtime User
It's not an error, it's just a warning message to remind you to use this command. Errors are marked in red.
You can ignore it
i just want to have a clean log, because i log everything via loccat.
But why it tells me "MaterialIcons font is missing" if its not?
 

Star-Dust

Expert
Licensed User
Longtime User
i just want to have a clean log, because i log everything via loccat.
But why it tells me "MaterialIcons font is missing" if its not?
It is not easy for the library to understand what the assets contain. The method he uses does not always work and therefore if there is a doubt for safety he launches a warning
 

Blueforcer

Well-Known Member
Licensed User
Longtime User
It is not easy for the library to understand what the assets contain. The method he uses does not always work and therefore if there is a doubt for safety he launches a warning
maybe a flag in the lib to deactivate log outputs?
I know these are actually small things, but I am a little perfectionist:)
 

Star-Dust

Expert
Licensed User
Longtime User
I will see in the next updates if a solution is possible. It definitely won't be a flag to disable logs
 

Star-Dust

Expert
Licensed User
Longtime User
maybe a flag in the lib to deactivate log outputs?
I know these are actually small things, but I am a little perfectionist:)
SOLVED

Update 1.16
Fixed BUGS that gave false warning for missing MaterialIncons font​
 

Pesciolina

Active Member
Licensed User
Longtime User
Good morning,
I put SD Custom Keyboard library in my project and I get the following error:
if the field is longer than 9 characters, it carries over the previous value and passes to the next field
B4X:
    SD_Keyboard1.SpecialKeyFont=xui.CreateMaterialIcons(22)       
    SD_Keyboard1.keyDel = "׀←"
    SD_Keyboard1.keyEnter = "◄┘"
    
    Dim Ck As CustomKey
    Ck.Initialize
        
    Ck.AddRowSimpleChar(Regex.Split(",","1,2,3"))
    Ck.AddRowSimpleChar(Regex.Split(",","4,5,6"))
    Ck.AddRowSimpleChar(Regex.Split(",","7,8,9"))
    Ck.AddRowSimpleChar(Regex.Split(",","Canc,0,Enter" ))
    
    
    SD_Keyboard1.Add(TxtTempoMan,"TxtTempoMan" ,Ck,TxtNum)
    SD_Keyboard1.Add(TxtNum,"TxtNum" ,Ck,Null)
        
    SD_Keyboard1.LightFactor=1.30
B4X:
Private Sub TxtTempoMan_TextChanged (Old As String, New As String)
    
    
    If TxtTempoMan.Text.Length > 9 Then
        TxtTempoMan.Text = Old
        TxtNum.RequestFocus
        Else
        lblTempoMan.Text = FormattaTempo(New)
    End If

    
End Sub
B4X:
Unexpected event (missing RaiseSynchronousEvents): txttempoman_textchanged
Check the unfiltered logs for the full stack trace.
java.lang.IndexOutOfBoundsException: setSpan (10 ... 10) ends beyond length 0
 

Attachments

  • error.jpg
    error.jpg
    87.1 KB · Views: 178

Star-Dust

Expert
Licensed User
Longtime User
It's not a problem with my library. Follow this thread

 

Star-Dust

Expert
Licensed User
Longtime User
That code can cause problems even without the SD_CustomKeyboard. It is not predictable when and how they arise because it depends on many factors related to the execution of the event and the execution speed.

Follow Erel's suggestion he gave in that thread. Use IME.SetLengthFilter
 

Pesciolina

Active Member
Licensed User
Longtime User
I set the following command, as soon as I type the 10th digit I get the error
B4X:
IME.SetLengthFilter(TxtTempoMan, 9)

Private Sub TxtTempoMan_TextChanged (Old As String, New As String)
    
    If New.Length < = 9 Then
        lblTempoMan.Text = FormattaTempo(New)
    End If
    
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
By examining the source I had a more complete picture.
An error was that you change the TextTempoMan when there are still operations in the queue. I entered a sleep.
Also, the change event for TxtNum was missing.

I've attached a working example for you
 

Attachments

  • aSample2.zip
    10.3 KB · Views: 173
Top