3

我正在开发自定义键盘应用程序,我需要在我的应用程序中设置或更改键盘的背景主题或颜色 .their setting.xml 视图,用户可以在其中为键行选择不同的背景主题和不同的颜色。在第一次启动应用程序时它工作正常,但下次自定义键盘显示主题时不会更改。

我正在使用这段代码:

public class SoftKeyboard extends InputMethodService 
    implements KeyboardView.OnKeyboardActionListener {
static final boolean DEBUG = false;

/**
 * This boolean indicates the optional example code for performing
 * processing of hard keys in addition to regular text generation
 * from on-screen interaction.  It would be used for input methods that
 * perform language translations (such as converting text entered on 
 * a QWERTY keyboard to Chinese), but may not be used for input methods
 * that are primarily intended to be used for on-screen text entry.
 */
static final boolean PROCESS_HARD_KEYS = true;

private static final int SELECT_PICTURE = 101;

private KeyboardView mInputView;
private CandidateView mCandidateView;
private CompletionInfo[] mCompletions;
private Context context = SoftKeyboard.this;
private StringBuilder mComposing = new StringBuilder();
private boolean mPredictionOn;
private boolean mCompletionOn;
private int mLastDisplayWidth;
private boolean mCapsLock;
private long mLastShiftTime;
private long mMetaState;

private LatinKeyboard mSymbolsKeyboard;
private LatinKeyboard mSymbolsShiftedKeyboard;
private LatinKeyboard mQwertyKeyboard;
private LatinKeyboard mSmilyKeyboard;
private LatinKeyboard mSmilyKeyboard1;

private LatinKeyboard mCurKeyboard;

private String mWordSeparators;

/**
 * Main initialization of the input method component.  Be sure to call
 * to super class.
 */

@Override 
   public void onCreate() {
    super.onCreate();

    mWordSeparators = getResources().getString(R.string.word_separators);      
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    String name = preferences.getString("Name","");


    Log.e("SoftKeyboard - ",""+name+"OnCreate Method Called--");



    if(!name.equalsIgnoreCase(""))
    {
      name = name+"  Sethi";  /* Edit the value here*/
    }
}

这是我设置或选择颜色或主题的设置类:

public class Setting extends Activity implements OnClickListener {

    LinearLayout roar, edge, burst, impact, blue_theme, orange_theme,
            green_theme, black_brigthness, white_brightness;

    Bundle bundle;

    public static boolean isblackBrightness = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.setting);

        // ----------UI intilisation---------------------
        uiInitilisation();

    }

    public void uiInitilisation() {

        roar = (LinearLayout) findViewById(R.id.ror_LL);
        edge = (LinearLayout) findViewById(R.id.edge_LL);
        burst = (LinearLayout) findViewById(R.id.burst_LL);
        impact = (LinearLayout) findViewById(R.id.impact_LL);

        // -------------Themes------------------------------
        blue_theme = (LinearLayout) findViewById(R.id.blue_theme_LL);
        orange_theme = (LinearLayout) findViewById(R.id.orange_theme_LL);
        green_theme = (LinearLayout) findViewById(R.id.green_theme_LL);

        // ------------Brightness----------------------------
        black_brigthness = (LinearLayout) findViewById(R.id.black_brigthness_LL);
        white_brightness = (LinearLayout) findViewById(R.id.white_brigthness_LL);

        // --------------On Click Events-------------------

        roar.setOnClickListener(this);
        edge.setOnClickListener(this);
        burst.setOnClickListener(this);
        impact.setOnClickListener(this);

        // -----------Theme-------------------------------------
        blue_theme.setOnClickListener(this);
        orange_theme.setOnClickListener(this);
        green_theme.setOnClickListener(this);

        // ------------------Brightness--------------------------
        black_brigthness.setOnClickListener(this);
        white_brightness.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.ror_LL:

            startActivity(new Intent(Setting.this, MainActivity.class));

            break;

        case R.id.edge_LL:

            startActivity(new Intent(Setting.this, MainActivity.class));




            break;
        case R.id.burst_LL:

            startActivity(new Intent(Setting.this, MainActivity.class));

            break;

        case R.id.impact_LL:

            startActivity(new Intent(Setting.this, MainActivity.class));

            break;  

        case R.id.blue_theme_LL:

            Intent i = new Intent(Setting.this,
                    MainActivity.class);
                i.putExtra("color", "blue");

            startActivity(i);


            break;

        case R.id.orange_theme_LL:
            Intent i2 = new Intent(Setting.this,
                    MainActivity.class);
                i2.putExtra("color", "orange");

            startActivity(i2);

            break;

        case R.id.green_theme_LL:
            Intent i3 = new Intent(Setting.this,
                    MainActivity.class);
                i3.putExtra("color", "green");

            startActivity(i3);

            break;
        case R.id.black_brigthness_LL:

            Intent black_britness = new Intent(Setting.this,
                    MainActivity.class);
            black_britness.putExtra("bright", "black");
            startActivity(black_britness);

              SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
              SharedPreferences.Editor editor = preferences.edit();
              editor.putString("Name","Harneet");
              editor.commit();


            isblackBrightness = true ; 
            Log.e("Black--","Black=="+isblackBrightness);

            break;
        case R.id.white_brigthness_LL:
            Intent white_britness = new Intent(Setting.this,
                    MainActivity.class);
            white_britness.putExtra("bright", "white");
            startActivity(white_britness);
            isblackBrightness = false;
            Log.e("white--","White=="+isblackBrightness);

            SharedPreferences preferences1 = PreferenceManager.getDefaultSharedPreferences(this);
              SharedPreferences.Editor editor1 = preferences1.edit();
              editor1.putString("Name","Arun");
              editor1.commit();


            break;

         }
    }
}

无论我是否必须设置小部件,我都没有得到如何做到这一点。

4

2 回答 2

5

当显示键盘时,框架调用onStartInputView. 您可以对该函数进行编程以查看共享首选项的值并在键盘视图上适当地设置颜色/主题。

于 2013-08-12T06:10:24.577 回答
2

获取更改自定义键盘布局的解决方案。

当键盘第一次加载 onCreateInputView() 被调用。之后,每次打开键盘时都会调用 onStartInputView(EditorInfo 属性,布尔重新启动)。

所以,现在必须在Like Thiskeyboard(Theme)中定义布局onCreateInputView()

public KeyboardView mInputView;
public View onCreateInputView() {

    SharedPreferences pre = getSharedPreferences("test", 1);
    int theme = pre.getInt("theme", 1);

    if(theme == 1)
    {
        this.mInputView = (KeyboardView) this.getLayoutInflater().inflate(R.layout.input, null);
    }else
    {
        this.mInputView = (KeyboardView) this.getLayoutInflater().inflate(R.layout.input_2, null);

    }
    this.mInputView.setOnKeyboardActionListener(this);
    this.mInputView.setKeyboard(this.mQwertyKeyboard);
    return this.mInputView;
}

并在 onStartInputView 中执行此操作

public void onStartInputView(EditorInfo attribute, boolean restarting) {
    super.onStartInputView(attribute, restarting);

    setInputView(onCreateInputView());
}
于 2014-12-18T09:02:10.460 回答