簡體   English   中英

如何更改Android軟鍵盤中任意鍵的關鍵背景

[英]how to change key background of any key in Android soft keyboard

我希望鍵盤上的一些鍵與其他鍵不同。

例如,如下圖中的shift,delete,space鍵:

在此輸入圖像描述

根據谷歌的參考文件。 我們可以通過在“ input.xml ”中使用“ android:keybackground=@drawable/xxx ”來更改密鑰的背景,但它會更改鍵盤中所有鍵的背景。

雖然qwerty.xml中的“android:keyicon”可以改變單個鍵,但它只替換標簽。 同時,使用“ android:keyicon ”,圖像無法覆蓋整個按鍵,圖像將比按鍵背景小一點。

更改某些鍵背景的正確方法是什么?

目前尚不清楚您是否了解如何創建自定義鍵盤。 如果你不這樣做, 這是一個小型可下載項目,可以創建一個自定義數字鍵盤。 對於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);
        }            
    }
}

有色鑰匙

在這種情況下,我沒有使用9-patch圖像,只是一些簡單的50%透明方形圖像,並且實現了現有按鈕僅僅用我想要的顏色着色的效果。 為了獲得更自定義的結果,我可以制作我的drawables 9-patch圖像並執行以下操作。 請注意,帶有圖標的兩個鍵無法正確渲染,因為它們未被定義為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);
        }
    }
}    

更換鑰匙

首先要注意的是,在XML中沒有簡單的方法可以做到這一點,你需要用Java來完成它。

您可以使用以下代碼獲取密鑰列表:

Keyboard keyboard = keyboardView.getKeyboard();
List<Key> keys = keyboard.getKeys();

獲得密鑰列表后,可以使用for循環遍歷它們以查找要更改的密鑰:

for (Key key : keys) {
    ...
}

有關Android中Keyboard.Key的屬性,請參閱此處的文檔。 您可能希望使用代碼來區分密鑰。

您會注意到沒有直接的方法來更改密鑰的背景顏色。 但是,有一種方法可以更改圖標,因此您可以使用它來模擬相同的行為。 您可以生成包含所需顏色的可繪制對象,並將其設置為圖標。 你可以使用NinePatchDrawable

您可以在onStartInputView()方法或onDraw()方法中添加此功能。 你可以看到一段據說可以在這里工作的代碼。

或者,您可以決定實施自己的鍵盤。 如果你想這樣做,你可以在這里看到Android實現。 您可以復制它並直接修改它以滿足您的需要。

我不能發表評論,所以我把一個類似的問題鏈接到我發現哪里有一個我覺得它很好的解決方案,通過代碼來做:

自定義<Key>的外觀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM