Привет люди на StackOverflow,Применить тему динамически для Android Keyboard
я столкнулся с проблемой при программировании экранной клавиатуры:
Что я хочу добиться того, что мягкие нагрузки клавиатуры динамически тему/стиль оптимизирован для ввода в ночное время и темы/стиля для ввода солнечного света. Стили уже определены, и я уже могу легко их переключать, только изменяя стиль в input.xml.
import ... /*Not quite relevant (yet)*/
public class LatinKeyboardView extends KeyboardView {
public LatinKeyboardView(Context context, AttributeSet attrs) {
this(context, attrs, loadColor());
}
public LatinKeyboardView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public static int loadColor() {
String dbg = android.os.Debug.isDebuggerConnected() ? "Y" : "N";
android.util.Log.d("loadColor", "Debugger connected: " + dbg);
android.os.Debug.waitForDebugger();
int temp = 0;
int id = 0;
if (temp == 1)
{
id = R.style.KeyStyle_Day;
}
else
{
id = R.style.KeyStyle_Night;
}
android.util.Log.d("loadColor", Integer.toString(id));
return id;
}
Когда я переадресовать вызов из первого конструктора ко второму конструктору (как показано в исходной клавиатуре кода Хакера), мягкие клавиатуры нагрузку успешно идентификатор стиля в loadColor(), но после этого, там происходит внутри исключение, которое я не удается проследить, даже с трассировки стека:
03-19 08:32:48.313 18630-18630/com.alphanerd.eztype.keyboard E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.alphanerd.eztype.keyboard, PID: 18630
android.view.InflateException: Binary XML file line #21: Error inflating class com.alphanerd.eztype.keyboard.LatinKeyboardView
at android.view.LayoutInflater.createView(LayoutInflater.java:626)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
at android.view.LayoutInflater.inflate(LayoutInflater.java:470)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
at com.alphanerd.eztype.keyboard.EZTypeKeyboard.onCreateInputView(EZTypeKeyboard.java:125)
at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:1594)
at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:2220)
at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:2179)
at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:712)
at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:214)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:40)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5335)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:600)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
at android.view.LayoutInflater.inflate(LayoutInflater.java:470)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
at com.alphanerd.eztype.keyboard.EZTypeKeyboard.onCreateInputView(EZTypeKeyboard.java:125)
at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:1594)
at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:2220)
at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:2179)
at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:712)
at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:214)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:40)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5335)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.inputmethodservice.KeyboardView.<init>(KeyboardView.java:370)
at com.alphanerd.eztype.keyboard.LatinKeyboardView.<init>(LatinKeyboardView.java:53)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:600)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
at android.view.LayoutInflater.inflate(LayoutInflater.java:470)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
at com.alphanerd.eztype.keyboard.EZTypeKeyboard.onCreateInputView(EZTypeKeyboard.java:125)
at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:1594)
at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:2220)
at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:2179)
at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:712)
at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:214)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:40)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5335)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Я надеюсь, вы можете помочь мне с этим. Код для динамической загрузки цвета в настоящее время так же динамичен, как и int temp; , Но в дальнейшем я буду реализовывать логику для загрузки цвета от sharedpreferences (клавиатура на самом деле предназначена для интеграции (оптический) с другим приложения мой АМФ развивается)
Заранее спасибо за любую помощь :)