2013-08-14 7 views
7

ich arbeite auf Benutzerdefinierte Tastatur AnwendungWie anders Hintergrund des Schlüssels für Android Benutzerdefinierte Tastatur einstellen

This is background color of key when user select blue

If user select green this should be background color

Dies ist Code für die Hintergrundfarbe von input.xml in 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()); 

} 

Ich bekomme nicht, wie man Hintergrundbild für spezifischen Schlüssel einstellt.

+0

Siehe http://stackoverflow.com/questions/15789997/how-to-ch Ange-Hintergrund-Farbe-der-Taste-für-Android-Soft-Tastatur –

+0

Ich bin nicht so viel richtig Formular können Sie bitte sagen, wie ich verschiedene Farbtasten setzen würde? – user

+0

Ich muss Hintergrund für spezifischen Schlüsselhintergrund anstelle des gleichen Schlüsselhintergrundbildes für vollständige Tastatur einstellen. Ich brauche dringend – user

Antwort

7

Als Beispiel gibt es eine small downloadable project, die eine benutzerdefinierte numerische Tastatur erzeugt. Fügen Sie der CustomKeyboardView-Klasse dort oder zu Ihrer eigenen benutzerdefinierten Tastaturklasse eine Methode wie die folgende hinzu. Sie überschreibt die onDraw() -Methode und zeichnet den Hintergrund des Schlüssels, der mit Code 7 (in diesem Fall die "0") definiert ist, rot und alle anderen Schlüssel blau.

@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

In diesem Fall habe ich 9-Patch-Bilder nicht, sondern nur ein paar einfachen 50% transparent quadratische Bilder und erzielen einen Effekt, bei dem die vorhandenen Tasten sind nur mit den Farben getönt I gewollt. Um ein benutzerdefinierteres Ergebnis zu erhalten, könnte ich meinen Hintergrund mit 9-Patch-Bildern versehen und folgendes tun. Beachten Sie, dass die beiden Schlüssel mit Symbolen nicht korrekt dargestellt werden, da die Symbole nicht als 9-Patch-Bilder definiert sind und ich keine besonderen Anstrengungen unternommen habe, damit sie für dieses Beispiel gut skalieren können. Ich habe auch nicht die Verwendung von verschiedenen Bildern/Effekten für die verschiedenen Zustände für die Tasten angesprochen; andere haben gezeigt, wie man das macht.

@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

Wie man den Popup-Hintergrund programmatisch ändert, wenn man lange auf die Taste der benutzerdefinierten Tastaturansicht drückt? –

+0

Der Link in der Antwort beantwortet die Frage nicht. –

+0

@MaihanNijat, Es sollte nicht für sich allein sein; es ist nur eine Bequemlichkeit, die eine ziemlich standardmäßige kundenspezifische Tastatur zur Verfügung stellt. Der explizit in der Antwort hinzugefügte Code zeigt eine einfache Änderung an diesem Projekt (oder dem ähnlichen Code, der in den offiziellen Dokumenten und anderen S/O-Posts bereitgestellt wird), um die Frage des OP zu beantworten. – scottt

1

Halten Sie es einfach, sollten Sie Klasse MyKeyboardView machen und einige Hacks ähnlich machen.

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

Ich habe eine Tastatur App, in dem ich die KeyBackground Eigenschaft in KeyboardView, etwa so:

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

Um dies zu tun, dynamisch verwende ich den folgenden Code:

@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; 
}