Experimenting with B4XPreferencesDialog.b4xlib and using this in a B4XPages project.
In that B4XPages project I use a custom keyboard, so the normal default keyboard is disable with this code, which is in the main module.
This is called from B4XMainPage with this code:
All this works fine, but not sure where to put the Java code in a b4xlib.
I think the only place it would work in the B4XPages project was in Main, but a b4xlib doesn't have such module.
RBS
In that B4XPages project I use a custom keyboard, so the normal default keyboard is disable with this code, which is in the main module.
B4X:
#IF JAVA
import android.widget.EditText;
import android.os.Build;
import android.text.InputType;
public void disableSoftKeyboard(final EditText v) {
if (Build.VERSION.SDK_INT >= 11) {
v.setRawInputType(InputType.TYPE_CLASS_TEXT);
v.setTextIsSelectable(true);
v.setShowSoftInputOnFocus(false);
} else {
v.setRawInputType(InputType.TYPE_NULL);
v.setFocusable(true);
}
}
public static void enableSoftKeyboard(final EditText v, int iKeyBoardType) {
if (Build.VERSION.SDK_INT >= 11) {
v.setRawInputType(iKeyBoardType);
v.setTextIsSelectable(true);
v.setShowSoftInputOnFocus(true);
} else {
v.setRawInputType(iKeyBoardType);
v.setFocusable(true);
}
}
#END IF
This is called from B4XMainPage with this code:
B4X:
Sub Class_Globals
Public NativeMe As JavaObject
End Sub
Sub SetEditTextInput_Type(bDoCustomKeyboard As Boolean, oEditText As Object, iKeyBoardType As Int, bHandleAction As Boolean)
'Log("SetEditTextInput_Type, iKeyBoardType: " & iKeyBoardType)
If NativeMe.IsInitialized = False Then
NativeMe.InitializeContext
End If
If bDoCustomKeyboard Then
NativeMe.RunMethod("disableSoftKeyboard", Array As Object(oEditText))
Log("SetEditTextInput_Type")
oEditText.InputType = Bit.Or(oEditText.InputType, 0x00080000) '0x00080000 = 524288, this doesn't stop the Auto-fill popup if the edit text has no text yet
Else
Select Case iKeyBoardType
Case Enums.eKeyboardStates.LowerCase, Enums.eKeyboardStates.UpperCase, Enums.eKeyboardStates.UpperCaseFixed, _
Enums.eKeyboardStates.Symbols1, Enums.eKeyboardStates.Symbols2
NativeMe.RunMethod("enableSoftKeyboard", Array As Object(oEditText, (1 + 524288)))
Case Enums.eKeyboardStates.Numeric
NativeMe.RunMethod("enableSoftKeyboard", Array As Object(oEditText, 2))
ime.SetCustomFilter(oEditText, oEditText.INPUT_TYPE_NUMBERS, "0123456789")
Case Enums.eKeyboardStates.Decimals
NativeMe.RunMethod("enableSoftKeyboard", Array As Object(oEditText, (2 + 8192)))
ime.SetCustomFilter(oEditText, oEditText.INPUT_TYPE_NUMBERS, "0123456789.")
Case Enums.eKeyboardStates.NumericWithMinus
NativeMe.RunMethod("enableSoftKeyboard", Array As Object(oEditText, (2 + 4096)))
ime.SetCustomFilter(oEditText, oEditText.INPUT_TYPE_NUMBERS, "0123456789-")
Case Enums.eKeyboardStates.DecimalsWithMinus
NativeMe.RunMethod("enableSoftKeyboard", Array As Object(oEditText, (2 + 4096 + 8192)))
ime.SetCustomFilter(oEditText, oEditText.INPUT_TYPE_NUMBERS, "0123456789.-")
End Select
If bHandleAction Then
'will show Next button to handle the action
'will need to specify the action in ime_HandleAction
ime.AddHandleActionEvent(oEditText)
End If
End If
End Sub
All this works fine, but not sure where to put the Java code in a b4xlib.
I think the only place it would work in the B4XPages project was in Main, but a b4xlib doesn't have such module.
RBS