2013-08-14 4 views
7

Я работаю на заказ Клавиатура ПрименениеКак установить свой фон ключей для Android пользовательских клавиатуры

This is background color of key when user select blue

If user select green this should be background color

Это код цвета фона input.xml в softkeyboard: -

 @Override 
    public View onCreateInputView() { 


     Log.e("onStartInputView ","On StartInput View Called--"); 

     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
     String Backgroundcolour = preferences.getString("BackgroundColour",""); 

    Log.e("Brithnesss- -","----"+Backgroundcolour); 

    if(Backgroundcolour.equalsIgnoreCase("black")) 
    { 

    this.mInputView = (KeyboardView) getLayoutInflater().inflate(
      R.layout.input, null); 


    }else 
    { 
     this.mInputView = (KeyboardView) getLayoutInflater().inflate(
      R.layout.input1, null); 
     //this.mInputView.setB 
    } 

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

@Override public void onStartInputView(EditorInfo attribute, boolean restarting) { 
    super.onStartInputView(attribute, restarting); 
    // Apply the selected keyboard to the input view. 

    setInputView(onCreateInputView()); 

} 

Я не получаю, как установить фоновое изображение для определенного ключа.

+0

См. Это http://stackoverflow.com/questions/15789997/how-to-ch ange-background-color-of-key-for-android-soft-keyboard –

+0

Я не получаю эту форму, так что, пожалуйста, сообщите, как бы я установил разные цветовые клавиши? – user

+0

Мне нужно установить фон для конкретного ключевого фона вместо того же ключевого фонового изображения для всей клавиатуры. Мне нужно срочно – user

ответ

7

В качестве примера, есть small downloadable project, который создает пользовательский числовую клавиатуру. В класс CustomKeyboardView или собственный собственный класс клавиатуры добавьте следующий метод. Он переопределяет метод onDraw() и рисует фон ключа, определенного кодом 7 (в данном случае «0») красного цвета, а все остальные - синим.

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    List<Key> keys = getKeyboard().getKeys(); 
    for (Key key : keys) {    
     if (key.codes[0] == 7) { 
      Log.e("KEY", "Drawing key with code " + key.codes[0]); 
      Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.red_tint); 
      dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      dr.draw(canvas); 

     } else { 
      Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.blue_tint); 
      dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      dr.draw(canvas); 
     }    
    } 
} 

tinted keys

В этом случае я не использовал 9-патч изображения, но только некоторые простые 50% прозрачные квадратные изображения и достигается эффект, когда существующие кнопки просто окрашено в цвета я разыскивается. Чтобы получить более индивидуальный результат, я мог бы сделать мои фоновые рисунки 9-патч-изображениями и сделать следующее. Обратите внимание, что два ключа со значками не отображаются правильно, потому что значки не определены как 9-патч-изображения, и я не прилагал особых усилий, чтобы они хорошо масштабировались для этого примера. Я также не рассматривал использование разных изображений/эффектов для различных состояний для ключей; другие показали, как это сделать.

@Override 
public void onDraw(Canvas canvas) { 
    // super.onDraw(canvas); 

    List<Key> keys = getKeyboard().getKeys(); 
    for (Key key : keys) { 
     if (key.codes[0] == 7) { 
      NinePatchDrawable npd 
       = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.red_key); 
      npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      npd.draw(canvas); 

     } else { 
      NinePatchDrawable npd 
       = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.blue_key); 
      npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      npd.draw(canvas); 
     } 

     Paint paint = new Paint(); 
     paint.setTextAlign(Paint.Align.CENTER); 
     paint.setTextSize(48); 
     paint.setColor(Color.GRAY); 

     if (key.label != null) { 
      canvas.drawText(key.label.toString(), key.x + (key.width/2), 
          key.y + (key.height/2), paint); 
     } else { 
      key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      key.icon.draw(canvas); 
     } 
    } 
}  

replaced keys

+0

Как сменить всплывающее окно программно при длительном нажатии клавиши пользовательского просмотра клавиатуры? –

+0

Ссылка, предоставленная в ответе, не отвечает на вопрос. –

+0

@MaihanNijat, Он не должен был сам по себе; это просто удобство, которое обеспечивает стандартную стандартную клавиатуру. Код, явно добавленный в ответ, демонстрирует упрощенное изменение этого проекта (или аналогичный код, предоставленный в официальных документах и ​​других сообщениях S/O), чтобы ответить на вопрос OP. – scottt

1

Удерживая его простым, вы должны сделать класс MyKeyboardView и сделать некоторые взломы, похожие на это.

public class MyKeyboardView extends android.inputmethodservice.KeyboardView { 

    Context context; 
    public MyKeyboardView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
     this.context = context ; 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     Paint paint = new Paint(); 
     Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/Hippie.otf"); 
     paint.setTypeface(font); 
     paint.setTextSize(40); 

     List<Key> keys = getKeyboard().getKeys(); 
     for(Key key: keys) { // int i = 0 ; switch(i) and implement your logic 

     if(key.pressed){ 
      NinePatchDrawable npd = (NinePatchDrawable)context.getResources().getDrawable(R.drawable.glow); 
      npd.setBounds(key.x,key.y,key.x+key.width,key.y+key.height); 
      npd.draw(canvas); 
      if(key.label != null) 
       canvas.drawText(key.label.toString(), key.x + (key.width/2), key.y + 25, paint); 
     }else if(key.modifier){ // boolean that defines key is function key 
      NinePatchDrawable npd = (NinePatchDrawable)context.getResources().getDrawable(R.drawable.btn_keyboard_special); 
      npd.setBounds(key.x,key.y,key.x+key.width,key.y+key.height); 
      npd.draw(canvas); 
      if(key.label != null) 
       canvas.drawText(key.label.toString(), key.x + (key.width/2), key.y + 25, paint); 
     } 


     break; 
    } 
} 
2

Я создал приложение клавиатуры, в котором я использую KeyBackground недвижимость в KeyboardView, например, так:

<KeyboardView android:keyBackground="@drawable/buttonbgselector" .../> 

Чтобы сделать это динамически я использую следующий код:

@Override 
public View onCreateInputView() { 
    mInputView = (KeyboardView) getLayoutInflater().inflate(R.layout.input, null); 
    mInputView.setBackgroundResource(R.drawable.buttonbgselector); 
    mInputView.setOnKeyboardActionListener(this); 
    mInputView.setKeyboard(mQwertyKeyboard); 
    return mInputView; 
}