2013-08-14 17 views
7

pracuję nad niestandardowa klawiatura AplikacjaJak ustawić inne tło klawiszy dla Androida niestandardowa klawiatura

This is background color of key when user select blue

If user select green this should be background color

Jest to kod koloru tła input.xml w 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()); 

} 

Nie wiem, jak ustawić obraz tła dla określonego klucza.

+0

Skorzystaj z tego http://stackoverflow.com/questions/15789997/how-to-ch ange-color-of-key-for-android-soft-keyboard –

+0

Nie otrzymuję tak dużo poprawnie, czy możesz powiedzieć, jak ustawić różne klawisze kolorów? – user

+0

Potrzebuję ustawić tło dla określonego tła klawisza zamiast tego samego obrazu tła dla całej klawiatury. Potrzebuję pilnie – user

Odpowiedz

7

Jako przykład, istnieje small downloadable project że tworzy klawiaturę numeryczną zwyczaj. Do klasy CustomKeyboardView tam lub do własnej niestandardowej klasy klawiatury dodaj metodę podobną do poniższej. Zastępuje on metodę onDraw() i rysuje tło klucza zdefiniowanego kodem 7 (w tym przypadku "0") czerwonym, a pozostałe klawisze niebieskim.

@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

W tym przypadku, nie użyć wizerunki 9-płatkowe, ale po prostu kilka prostych 50% przezroczyste kwadratowych obrazów i osiągnąć efekt gdzie istniejące przyciski są tylko przydymione z kolorami I chciał. Aby uzyskać bardziej niestandardowy wynik, mógłbym zrobić moje obrazy tła w postaci dziewięciu łatek i wykonać następujące czynności. Zwróć uwagę, że dwa klawisze z ikonami nie są wyświetlane poprawnie, ponieważ ikony nie są zdefiniowane jako obrazy 9-plasterkowe i nie zrobiłem żadnego specjalnego wysiłku, aby umożliwić im skalowanie również w tym przykładzie. Nie zajmowałem się również użyciem różnych obrazów/efektów dla różnych stanów dla kluczy; inni pokazali, jak to zrobić.

@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

jak zmienić tło wyskakujące programowo po długim naciśnięciu klawisza niestandardowego widoku klawiatury? –

+0

Link podany w odpowiedzi nie odpowiada na pytanie. –

+0

@MaihanNijat, To nie miało być samo; to tylko wygoda, która zapewnia dość niestandardową klawiaturę. Kod jawnie dodany w odpowiedzi demonstruje uproszczoną zmianę tego projektu (lub podobny kod podany w oficjalnych dokumentach i innych postach S/O), aby odpowiedzieć na pytanie OP. – scottt

1

Utrzymując to prosto, powinieneś zrobić klasę MyKeyboardView i zrobić coś podobnego do tego.

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

I stworzył aplikację klawiatury w których używam właściwość KeyBackground w KeyboardView, tak:

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

Aby to zrobić dynamicznie używam następujący kod:

@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; 
} 
Powiązane problemy