Wie können Sie eine benutzerdefinierte Tastatur in Android erstellen?

105

Ich möchte eine benutzerdefinierte Tastatur erstellen. Ich weiß nicht, wie es mit XML und Java geht. Das folgende Bild ist ein Modell der Tastatur, die ich erstellen möchte. Es braucht nur Zahlen.

Geben Sie hier die Bildbeschreibung ein

XX_Bruder
quelle
6
[Erstellen Sie Ihre eigene benutzerdefinierte Tastatur mit XML-Layouts für Android-Geräte] ( tutorials-android.blogspot.com/2011/06/… )
Jorgesys
1
Es gibt ein gutes Tutorial bei Tuts: Link
Hamed Ghadirian
Google hat ein Beispiel "SoftKeyboard" -Projekt, oder es sind ziemlich viele Ressourcen hier verlinkt: customkeyboarddetails.blogspot.com/2019/02/…
oliversisson

Antworten:

83

Zunächst benötigen Sie eine keyboard.xmlDatei, die im res/xmlOrdner abgelegt wird (falls der Ordner nicht vorhanden ist, erstellen Sie ihn).

<?xml version="1.0" encoding="utf-8"?> 
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="15%p"
    android:keyHeight="15%p" >

    <Row>
        <Key android:codes="1"    android:keyLabel="1" android:horizontalGap="4%p"/>
        <Key android:codes="2"    android:keyLabel="2" android:horizontalGap="4%p"/>
        <Key android:codes="3"    android:keyLabel="3" android:horizontalGap="4%p" />
        <Key android:codes="4"    android:keyLabel="4" android:horizontalGap="4%p" />
        <Key android:codes="5"    android:keyLabel="5" android:horizontalGap="4%p" />
    </Row>
    <Row>
        <Key android:codes="6"    android:keyLabel="6" android:horizontalGap="4%p"/>
        <Key android:codes="7"    android:keyLabel="7" android:horizontalGap="4%p"/>
        <Key android:codes="8"    android:keyLabel="8" android:horizontalGap="4%p" />
        <Key android:codes="9"    android:keyLabel="9" android:horizontalGap="4%p" />
        <Key android:codes="0"    android:keyLabel="0" android:horizontalGap="4%p" />
    </Row>

    <Row>
        <Key android:codes="-1"    android:keyIcon="@drawable/backspace" android:keyWidth="34%p" android:horizontalGap="4%p"/>
        <Key android:codes="100"    android:keyLabel="Enter" android:keyWidth="53%p" android:horizontalGap="4%p"/>
    </Row>
 </Keyboard>

** Beachten Sie, dass Sie das backspaceZeichenelement erstellen und mit einer sehr kleinen Größe (z. B. 18 x 18 Pixel) im Ordner res / drawable-ldpi ablegen müssen.

Dann sollten Sie in der XML-Datei, in der sie verwendet werden soll (wo sich Ihre TextView befindet), den folgenden Code hinzufügen:

<RelativeLayout
 ...
>

        .....


        <android.inputmethodservice.KeyboardView
             android:id="@+id/keyboardview"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
             android:layout_centerHorizontal="true"
             android:focusable="true"
             android:focusableInTouchMode="true"
             android:visibility="gone" 
         />

        ......


</RelativeLayout>

** Beachten Sie, dass die XML-Datei, in die Sie die Datei einfügen android.inputmethodservice.KeyboardView, vorhanden sein muss, um die Datei RelativeLayoutfestlegen zu könnenalignParentBottom="true" die Tastatur vornehmen (normalerweise werden die Tastaturen am unteren Bildschirmrand angezeigt).

Anschließend müssen Sie den folgenden Code in die onCreateFunktion einfügen Activity, mit der TextViewSie die Tastatur anbringen möchten

    // Create the Keyboard
    mKeyboard= new Keyboard(this,R.xml.keyboard);

    // Lookup the KeyboardView
    mKeyboardView= (KeyboardView)findViewById(R.id.keyboardview);
    // Attach the keyboard to the view
    mKeyboardView.setKeyboard( mKeyboard );

    // Do not show the preview balloons
    //mKeyboardView.setPreviewEnabled(false);

    // Install the key handler
    mKeyboardView.setOnKeyboardActionListener(mOnKeyboardActionListener);

** Beachten Sie, dass mKeyboardund mKeyboardViewprivate Klassenvariablen sind, die Sie erstellen müssen.

Dann benötigen Sie die folgende Funktion zum Öffnen der Tastatur (Sie müssen sie über die onClickxml-Eigenschaft mit TextView verknüpfen ).

    public void openKeyboard(View v)
    {
       mKeyboardView.setVisibility(View.VISIBLE);
       mKeyboardView.setEnabled(true);
       if( v!=null)((InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
    }

Und schließlich brauchen Sie das OnKeyboardActionListener, was Ihre Ereignisse behandelt

private OnKeyboardActionListener mOnKeyboardActionListener = new OnKeyboardActionListener() {
    @Override public void onKey(int primaryCode, int[] keyCodes) 
    {
         //Here check the primaryCode to see which key is pressed 
         //based on the android:codes property
         if(primaryCode==1)
         {
            Log.i("Key","You just pressed 1 button");
         }
    }

    @Override public void onPress(int arg0) {
    }

    @Override public void onRelease(int primaryCode) {
    }

    @Override public void onText(CharSequence text) {
    }

    @Override public void swipeDown() {
    }

    @Override public void swipeLeft() {
    }

    @Override public void swipeRight() {
    }

    @Override public void swipeUp() {
    }
};

Hoffentlich hilft das!!!

Der größte Teil des Codes wurde hier gefunden

Pontios
quelle
1
Was ist, wenn die Tastatur nicht am unteren Bildschirmrand angezeigt werden soll? (zB möchte ich, dass der Benutzer es ziehen kann). Kann ich das über meine Tastatur-App steuern oder wird es vom Android-System verwaltet?
user3294126
Die Tastaturbreite füllt den Bildschirm nicht aus. Was soll ich tun, damit er alle Bildschirme ausfüllt?
George Thomas
In welchem ​​übergeordneten Layout befindet sich die Tastaturansicht? Haben Sie auch die layout_width der KeyboardView überprüft?
Pontios
1
Bitte beachten Sie, dass die KeyboardView- und Keyboard-Klassen seit API-Level 29 von Google nicht mehr unterstützt werden. Daher funktioniert diese Lösung in Zukunft nicht mehr, wenn Sie auf ein neueres API-Level abzielen müssen.
Maex
keyboardView wird von Google nicht mehr unterstützt. Was ist eine neue Lösung?
tohidmahmoudvand
78

Systemtastatur

In dieser Antwort erfahren Sie, wie Sie eine benutzerdefinierte Systemtastatur erstellen, die in jeder App verwendet werden kann, die ein Benutzer auf seinem Telefon installiert hat. Wenn Sie eine Tastatur erstellen möchten, die nur in Ihrer eigenen App verwendet wird, lesen Sie meine andere Antwort .

Das folgende Beispiel sieht folgendermaßen aus. Sie können es für jedes Tastaturlayout ändern.

Geben Sie hier die Bildbeschreibung ein

Die folgenden Schritte zeigen, wie Sie eine funktionierende benutzerdefinierte Systemtastatur erstellen. So viel wie möglich habe ich versucht, unnötigen Code zu entfernen. Wenn Sie weitere Funktionen benötigen, habe ich am Ende Links zu weiterer Hilfe bereitgestellt.

1. Starten Sie ein neues Android-Projekt

Ich habe mein Projekt "Custom Keyboard" genannt. Nennen Sie es wie Sie wollen. Hier gibt es nichts Besonderes. Ich werde einfach die MainActivityund "Hallo Welt!" Layout wie es ist.

2. Fügen Sie die Layoutdateien hinzu

Fügen Sie dem res/layoutOrdner Ihrer App die folgenden zwei Dateien hinzu:

  • keyboard_view.xml
  • key_preview.xml

keyboard_view.xml

Diese Ansicht ist wie ein Container, der unsere Tastatur enthält. In diesem Beispiel gibt es nur eine Tastatur, aber Sie können auch andere Tastaturen hinzufügen und diese ein- und austauschen KeyboardView.

<?xml version="1.0" encoding="utf-8"?>
<android.inputmethodservice.KeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:keyPreviewLayout="@layout/key_preview"
    android:layout_alignParentBottom="true">

</android.inputmethodservice.KeyboardView>

key_preview.xml

Die Tastenvorschau ist ein Layout, das beim Drücken einer Tastaturtaste angezeigt wird. Es zeigt nur, welche Taste Sie drücken (falls Ihre großen, fetten Finger sie bedecken). Dies ist kein Multiple-Choice-Popup. Schauen Sie sich dazu die Kandidatenansicht an .

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="@android:color/white"
    android:textColor="@android:color/black"
    android:textSize="30sp">
</TextView>

3. Fügen Sie unterstützende XML-Dateien hinzu

Erstellen Sie einen xmlOrdner in Ihrem resOrdner. (Klicken Sie mit der rechten Maustaste resund wählen Sie Neu> Verzeichnis .)

Fügen Sie dann die folgenden zwei XML-Dateien hinzu. (Klicken Sie mit der rechten Maustaste auf den xmlOrdner und wählen Sie Neu> XML-Ressourcendatei .)

  • number_pad.xml
  • method.xml

number_pad.xml

Hier wird es immer interessanter. Dies Keyboarddefiniert das Layout der Tasten .

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="20%p"
    android:horizontalGap="5dp"
    android:verticalGap="5dp"
    android:keyHeight="60dp">

    <Row>
        <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
        <Key android:codes="50" android:keyLabel="2"/>
        <Key android:codes="51" android:keyLabel="3"/>
        <Key android:codes="52" android:keyLabel="4"/>
        <Key android:codes="53" android:keyLabel="5" android:keyEdgeFlags="right"/>
    </Row>

    <Row>
        <Key android:codes="54" android:keyLabel="6" android:keyEdgeFlags="left"/>
        <Key android:codes="55" android:keyLabel="7"/>
        <Key android:codes="56" android:keyLabel="8"/>
        <Key android:codes="57" android:keyLabel="9"/>
        <Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
    </Row>

    <Row>
        <Key android:codes="-5"
             android:keyLabel="DELETE"
             android:keyWidth="40%p"
             android:keyEdgeFlags="left"
             android:isRepeatable="true"/>
        <Key android:codes="10"
             android:keyLabel="ENTER"
             android:keyWidth="60%p"
             android:keyEdgeFlags="right"/>
    </Row>

</Keyboard>

Hier sind einige Dinge zu beachten:

  • keyWidth: Dies ist die Standardbreite jedes Schlüssels. Die 20%pbedeutet , dass jeder Schlüssel sollte 20% der Breite des einnehmen p Arent. Es kann jedoch von einzelnen Tasten überschrieben werden, wie Sie mit den Tasten Löschen und Eingeben in der dritten Zeile sehen können.
  • keyHeight: Es ist hier fest codiert, aber Sie können es verwenden @dimen/key_height, um es dynamisch für verschiedene Bildschirmgrößen einzustellen.
  • Gap: Die horizontale und vertikale Lücke gibt an, wie viel Platz zwischen den Tasten verbleibt. Auch wenn Sie es einstellen, 0pxgibt es immer noch eine kleine Lücke.
  • codes: Dies kann ein Unicode- oder benutzerdefinierter Codewert sein, der bestimmt, was passiert oder was eingegeben wird, wenn die Taste gedrückt wird. Überprüfen keyOutputTextSie, ob Sie eine längere Unicode-Zeichenfolge eingeben möchten.
  • keyLabel: Dies ist der Text, der auf der Taste angezeigt wird.
  • keyEdgeFlags: Dies gibt an, an welcher Kante der Schlüssel ausgerichtet werden soll.
  • isRepeatable: Wenn Sie die Taste gedrückt halten, wird die Eingabe wiederholt.

method.xml

Diese Datei teilt dem System die verfügbaren Untertypen der Eingabemethode mit. Ich füge hier nur eine Minimalversion hinzu.

<?xml version="1.0" encoding="utf-8"?>
<input-method
    xmlns:android="http://schemas.android.com/apk/res/android">

    <subtype
        android:imeSubtypeMode="keyboard"/>

</input-method>

4. Fügen Sie den Java-Code hinzu, um die Schlüsseleingabe zu verarbeiten

Erstellen Sie eine neue Java-Datei. Nennen wir es MyInputMethodService. Diese Datei verbindet alles miteinander. Es verarbeitet die von der Tastatur empfangenen Eingaben und sendet sie an die Ansicht weiter, die sie empfängt ( EditTextz. B.).

public class MyInputMethodService extends InputMethodService implements KeyboardView.OnKeyboardActionListener {

    @Override
    public View onCreateInputView() {
        // get the KeyboardView and add our Keyboard layout to it
        KeyboardView keyboardView = (KeyboardView) getLayoutInflater().inflate(R.layout.keyboard_view, null);
        Keyboard keyboard = new Keyboard(this, R.xml.number_pad);
        keyboardView.setKeyboard(keyboard);
        keyboardView.setOnKeyboardActionListener(this);
        return keyboardView;
    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {

        InputConnection ic = getCurrentInputConnection();
        if (ic == null) return;
        switch (primaryCode) {
            case Keyboard.KEYCODE_DELETE:
                CharSequence selectedText = ic.getSelectedText(0);
                if (TextUtils.isEmpty(selectedText)) {
                    // no selection, so delete previous character
                    ic.deleteSurroundingText(1, 0);
                } else {
                    // delete the selection
                    ic.commitText("", 1);
                }
                break;
            default:
                char code = (char) primaryCode;
                ic.commitText(String.valueOf(code), 1);
        }
    }

    @Override
    public void onPress(int primaryCode) { }

    @Override
    public void onRelease(int primaryCode) { }

    @Override
    public void onText(CharSequence text) { }

    @Override
    public void swipeLeft() { }

    @Override
    public void swipeRight() { }

    @Override
    public void swipeDown() { }

    @Override
    public void swipeUp() { }
}

Anmerkungen:

  • Das OnKeyboardActionListenerwartet auf Tastatureingaben. In diesem Beispiel sind auch alle diese leeren Methoden erforderlich.
  • Das InputConnectionist das, was verwendet wird , Eingabe in einer anderen Ansicht wie ein zu senden EditText.

5. Aktualisieren Sie das Manifest

Ich habe dies eher als letztes als als erstes gesetzt, da es sich auf die Dateien bezieht, die wir bereits oben hinzugefügt haben. Um Ihre benutzerdefinierte Tastatur als Systemtastatur zu registrieren, müssen serviceSie Ihrer Datei AndroidManifest.xml einen Abschnitt hinzufügen . Setzen Sie es in den applicationAbschnitt nach activity.

<manifest ...>
    <application ... >
        <activity ... >
            ...
        </activity>

        <service
            android:name=".MyInputMethodService"
            android:label="Keyboard Display Name"
            android:permission="android.permission.BIND_INPUT_METHOD">
            <intent-filter>
                <action android:name="android.view.InputMethod"/>
            </intent-filter>
            <meta-data
                android:name="android.view.im"
                android:resource="@xml/method"/>
        </service>

    </application>
</manifest>

Das ist es! Sie sollten Ihre App jetzt ausführen können. Sie werden jedoch nicht viel sehen, bis Sie Ihre Tastatur in den Einstellungen aktivieren.

6. Aktivieren Sie die Tastatur in den Einstellungen

Jeder Benutzer, der Ihre Tastatur verwenden möchte, muss sie in den Android-Einstellungen aktivieren. Ausführliche Anweisungen dazu finden Sie unter folgendem Link:

Hier ist eine Zusammenfassung:

  • Gehen Sie zu Android-Einstellungen> Sprachen und Eingabe> Aktuelle Tastatur> Tastaturen auswählen.
  • Sie sollten Ihre benutzerdefinierte Tastatur in der Liste sehen. Aktivieren Sie es.
  • Gehen Sie zurück und wählen Sie erneut Aktuelle Tastatur. Sie sollten Ihre benutzerdefinierte Tastatur in der Liste sehen. Wählen Sie.

Jetzt sollten Sie Ihre Tastatur überall dort verwenden können, wo Sie Android eingeben können.

Weitere Studie

Die obige Tastatur ist verwendbar, aber um eine Tastatur zu erstellen, die andere Benutzer verwenden möchten, müssen Sie wahrscheinlich weitere Funktionen hinzufügen. Lesen Sie die folgenden Links, um zu erfahren, wie.

Weiter geht's

Gefällt dir nicht, wie der Standard KeyboardViewaussieht und sich verhält? Ich sicherlich nicht. Es sieht so aus, als ob es seit Android 2.0 nicht mehr aktualisiert wurde. Wie wäre es mit all diesen benutzerdefinierten Tastaturen im Play Store? Sie sehen nicht wie die hässliche Tastatur oben aus.

Die gute Nachricht ist, dass Sie das Aussehen und Verhalten Ihrer eigenen Tastatur vollständig anpassen können. Sie müssen die folgenden Dinge tun:

  1. Erstellen Sie Ihre eigene benutzerdefinierte Tastaturansicht, die Unterklassen enthält ViewGroup. Sie können es mit Buttons füllen oder sogar Ihre eigenen benutzerdefinierten Schlüsselansichten für diese Unterklasse erstellen View. Wenn Sie Popup-Ansichten verwenden, beachten Sie dies .
  2. Fügen Sie Ihrer Tastatur eine benutzerdefinierte Ereignis-Listener- Oberfläche hinzu. Nennen Sie seine Methoden für Dinge wie onKeyClicked(String text)oder onBackspace().
  3. Sie haben nicht die hinzugefügt werden muss keyboard_view.xml, key_preview.xmloder number_pad.xmlbeschrieben in den Richtungen oben , da diese alle für den Standard KeyboardView. Sie werden alle diese UI-Aspekte in Ihrer benutzerdefinierten Ansicht behandeln.
  4. In Ihrer MyInputMethodServiceKlasse implementieren die benutzerdefinierte Tastatur Hörer , dass Sie in Ihrer Tastatur - Klasse definiert. Dies ist anstelle von KeyboardView.OnKeyboardActionListener, was nicht mehr benötigt wird.
  5. Erstellen Sie in MyInputMethodServiceder onCreateInputView()Methode Ihrer Klasse eine Instanz Ihrer benutzerdefinierten Tastatur und geben Sie sie zurück. Vergessen Sie nicht, den benutzerdefinierten Listener der Tastatur auf einzustellen this.
Suragch
quelle
35

In-App-Tastatur

In dieser Antwort erfahren Sie, wie Sie eine benutzerdefinierte Tastatur erstellen, die ausschließlich in Ihrer App verwendet wird. Wenn Sie eine Systemtastatur erstellen möchten, die in jeder App verwendet werden kann, lesen Sie meine andere Antwort .

Das Beispiel wird so aussehen. Sie können es für jedes Tastaturlayout ändern.

Geben Sie hier die Bildbeschreibung ein

1. Starten Sie ein neues Android-Projekt

Ich habe mein Projekt benannt InAppKeyboard. Rufen Sie Ihre an, wie Sie wollen.

2. Fügen Sie die Layoutdateien hinzu

Tastaturbelegung

Fügen Sie dem res/layoutOrdner eine Layoutdatei hinzu. Ich habe meine angerufen keyboard. Die Tastatur ist eine benutzerdefinierte zusammengesetzte Ansicht , die wir aus dieser XML-Layoutdatei aufblasen. Sie können ein beliebiges Layout verwenden, um die Tasten anzuordnen, aber ich verwende ein LinearLayout. Beachten Sie die mergeTags.

res / layout / keyboard.xml

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button_1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="1"/>

            <Button
                android:id="@+id/button_2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="2"/>

            <Button
                android:id="@+id/button_3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="3"/>

            <Button
                android:id="@+id/button_4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="4"/>

            <Button
                android:id="@+id/button_5"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="5"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button_6"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="6"/>

            <Button
                android:id="@+id/button_7"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="7"/>

            <Button
                android:id="@+id/button_8"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="8"/>

            <Button
                android:id="@+id/button_9"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="9"/>

            <Button
                android:id="@+id/button_0"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="0"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button_delete"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:text="Delete"/>

            <Button
                android:id="@+id/button_enter"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="3"
                android:text="Enter"/>

        </LinearLayout>
    </LinearLayout>

</merge>

Aktivitätslayout

Zu Demonstrationszwecken hat unsere Aktivität eine einzige EditTextund die Tastatur befindet sich unten. Ich habe meine benutzerdefinierte Tastaturansicht aufgerufen MyKeyboard. (Wir werden diesen Code bald hinzufügen, ignorieren Sie den Fehler also vorerst.) Der Vorteil, wenn Sie unseren gesamten Tastaturcode in einer einzigen Ansicht zusammenfassen, besteht darin, dass die Wiederverwendung in einer anderen Aktivität oder App vereinfacht wird.

res / layout / activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.inappkeyboard.MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#c9c9f1"
        android:layout_margin="50dp"
        android:padding="5dp"
        android:layout_alignParentTop="true"/>

    <com.example.inappkeyboard.MyKeyboard
        android:id="@+id/keyboard"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_alignParentBottom="true"/>

</RelativeLayout>

3. Fügen Sie die Tastatur-Java-Datei hinzu

Fügen Sie eine neue Java-Datei hinzu. Ich habe meine angerufen MyKeyboard.

Das Wichtigste dabei ist, dass es keine feste Verbindung zu einem EditTextoder gibt Activity. Dies macht es einfach, es an jede App oder Aktivität anzuschließen, die es benötigt. Diese benutzerdefinierte Tastaturansicht verwendet auch eine InputConnection, die die Art und Weise nachahmt, wie eine Systemtastatur mit einer kommuniziert EditText. So vermeiden wir die harten Verbindungen.

MyKeyboard ist eine zusammengesetzte Ansicht, die das oben definierte Ansichtslayout aufbläst.

MyKeyboard.java

public class MyKeyboard extends LinearLayout implements View.OnClickListener {

    // constructors
    public MyKeyboard(Context context) {
        this(context, null, 0);
    }

    public MyKeyboard(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyKeyboard(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    // keyboard keys (buttons)
    private Button mButton1;
    private Button mButton2;
    private Button mButton3;
    private Button mButton4;
    private Button mButton5;
    private Button mButton6;
    private Button mButton7;
    private Button mButton8;
    private Button mButton9;
    private Button mButton0;
    private Button mButtonDelete;
    private Button mButtonEnter;

    // This will map the button resource id to the String value that we want to 
    // input when that button is clicked.
    SparseArray<String> keyValues = new SparseArray<>();

    // Our communication link to the EditText
    InputConnection inputConnection;

    private void init(Context context, AttributeSet attrs) {

        // initialize buttons
        LayoutInflater.from(context).inflate(R.layout.keyboard, this, true);
        mButton1 = (Button) findViewById(R.id.button_1);
        mButton2 = (Button) findViewById(R.id.button_2);
        mButton3 = (Button) findViewById(R.id.button_3);
        mButton4 = (Button) findViewById(R.id.button_4);
        mButton5 = (Button) findViewById(R.id.button_5);
        mButton6 = (Button) findViewById(R.id.button_6);
        mButton7 = (Button) findViewById(R.id.button_7);
        mButton8 = (Button) findViewById(R.id.button_8);
        mButton9 = (Button) findViewById(R.id.button_9);
        mButton0 = (Button) findViewById(R.id.button_0);
        mButtonDelete = (Button) findViewById(R.id.button_delete);
        mButtonEnter = (Button) findViewById(R.id.button_enter);

        // set button click listeners
        mButton1.setOnClickListener(this);
        mButton2.setOnClickListener(this);
        mButton3.setOnClickListener(this);
        mButton4.setOnClickListener(this);
        mButton5.setOnClickListener(this);
        mButton6.setOnClickListener(this);
        mButton7.setOnClickListener(this);
        mButton8.setOnClickListener(this);
        mButton9.setOnClickListener(this);
        mButton0.setOnClickListener(this);
        mButtonDelete.setOnClickListener(this);
        mButtonEnter.setOnClickListener(this);

        // map buttons IDs to input strings
        keyValues.put(R.id.button_1, "1");
        keyValues.put(R.id.button_2, "2");
        keyValues.put(R.id.button_3, "3");
        keyValues.put(R.id.button_4, "4");
        keyValues.put(R.id.button_5, "5");
        keyValues.put(R.id.button_6, "6");
        keyValues.put(R.id.button_7, "7");
        keyValues.put(R.id.button_8, "8");
        keyValues.put(R.id.button_9, "9");
        keyValues.put(R.id.button_0, "0");
        keyValues.put(R.id.button_enter, "\n");
    }

    @Override
    public void onClick(View v) {

        // do nothing if the InputConnection has not been set yet
        if (inputConnection == null) return;

        // Delete text or input key value
        // All communication goes through the InputConnection
        if (v.getId() == R.id.button_delete) {
            CharSequence selectedText = inputConnection.getSelectedText(0);
            if (TextUtils.isEmpty(selectedText)) {
                // no selection, so delete previous character
                inputConnection.deleteSurroundingText(1, 0);
            } else {
                // delete the selection
                inputConnection.commitText("", 1);
            }
        } else {
            String value = keyValues.get(v.getId());
            inputConnection.commitText(value, 1);
        }
    }

    // The activity (or some parent or controller) must give us 
    // a reference to the current EditText's InputConnection
    public void setInputConnection(InputConnection ic) {
        this.inputConnection = ic;
    }
}

4. Zeigen Sie mit der Tastatur auf den EditText

Bei Systemtastaturen verwendet Android einen InputMethodManager , um die Tastatur auf den Fokus zu richtenEditText . In diesem Beispiel wird die Aktivität an ihre Stelle treten, indem der Link von EditTextzu unserer benutzerdefinierten Tastatur zu bereitgestellt wird .

Da wir die Systemtastatur nicht verwenden, müssen wir sie deaktivieren, damit sie beim Berühren der nicht auftaucht EditText. Zweitens müssen wir das InputConnectionvon der bekommen EditTextund es unserer Tastatur geben.

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText editText = (EditText) findViewById(R.id.editText);
        MyKeyboard keyboard = (MyKeyboard) findViewById(R.id.keyboard);

        // prevent system keyboard from appearing when EditText is tapped
        editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
        editText.setTextIsSelectable(true);

        // pass the InputConnection from the EditText to the keyboard
        InputConnection ic = editText.onCreateInputConnection(new EditorInfo());
        keyboard.setInputConnection(ic);
    }
}

Wenn Ihre Aktivität mehrere EditTexts enthält, müssen Sie Code schreiben, um die richtigen EditText-Dateien InputConnectionan die Tastatur zu übergeben. (Sie können dies tun, indem Sie ein OnFocusChangeListenerund OnClickListenerzu den EditTexts hinzufügen. Weitere Informationen hierzu finden Sie in diesem Artikel .) Möglicherweise möchten Sie Ihre Tastatur auch zu geeigneten Zeiten ausblenden oder anzeigen .

Fertig

Das ist es. Sie sollten jetzt in der Lage sein, die Beispiel-App auszuführen und Text wie gewünscht einzugeben oder zu löschen. Ihr nächster Schritt besteht darin, alles an Ihre eigenen Bedürfnisse anzupassen. In einigen meiner Tastaturen habe ich beispielsweise TextViews anstelle von Schaltflächen verwendet, da es einfacher ist, sie anzupassen.

Anmerkungen

  • In der XML-Layoutdatei können Sie auch ein TextViewa verwenden, Buttonwenn die Schlüssel besser aussehen sollen. Machen Sie dann einfach den Hintergrund zu einem Zeichenobjekt, das den Status des Erscheinungsbilds beim Drücken ändert.
  • Erweiterte benutzerdefinierte Tastaturen: Für mehr Flexibilität beim Erscheinungsbild der Tastatur und beim Umschalten der Tastatur erstelle ich jetzt benutzerdefinierte Tastenansichten für Unterklassen Viewund benutzerdefinierte Tastaturen für Unterklassen ViewGroup. Die Tastatur legt alle Tasten programmgesteuert an. Die Tasten verwenden eine Schnittstelle zur Kommunikation mit der Tastatur (ähnlich wie Fragmente mit einer Aktivität kommunizieren). Dies ist nicht erforderlich, wenn Sie nur ein einziges Tastaturlayout benötigen, da das XML-Layout dafür einwandfrei funktioniert. Aber wenn Sie ein Beispiel sehen wollen , was ich gearbeitet haben, überprüfen Sie alle Key*und Keyboard*Klassen hier . Beachten Sie, dass ich dort auch eine Containeransicht verwende, deren Funktion es ist, Tastaturen ein- und auszutauschen.
Suragch
quelle
Ihre Antwort ist großartig, aber wie können wir zwischen einer Originaltastatur und dieser neuen Tastatur wechseln?
Kishan Donga
@KishanDonga, Auf Ihrer Tastatur können Sie eine Taste zum Wechseln der Tastatur hinzufügen. Wenn der Benutzer drückt, rufen Sie an InputMethodManager#showInputMethodPicker(). Wenn die ursprüngliche Tastatur jedoch nicht über eine solche Taste verfügt, können Benutzer nur manuell in den Systemeinstellungen zu Ihrer Tastatur wechseln. Apple ist Android in diesem Bereich überlegen, da Apple für alle Tastaturen eine Tastaturumschalttaste benötigt.
Suragch
@KishanDonga, ich habe gerade festgestellt, dass es sich bei dieser Antwort um eine In-App-Tastatur handelt, nicht um die Systemtastatur. Wenn Sie zwischen zwei benutzerdefinierten Tastaturen wechseln möchten, können Sie diese programmgesteuert in eine Containeransicht ein- und auswechseln. Fügen Sie einfach eine Tastaturtausch-Taste auf beiden Tastaturen hinzu. Siehe meine Anmerkung und den Link "Erweiterte benutzerdefinierte Tastaturen" in der obigen Antwort.
Suragch
Wenn Sie zwischen Ihrer Tastatur und der Systemtastatur wechseln möchten, blenden Sie die Systemtastatur aus und zeigen Sie Ihre Tastatur zu den entsprechenden Zeiten an (und umgekehrt).
Suragch
1
@MarekTakac, Sie müssen die Systemtastatur deaktivieren und bei jeder Aktivität Ihre benutzerdefinierte Tastatur hinzufügen. Wenn eine Aktivität mehrere EditTexts hat, müssen Sie ihnen eine hinzufügen onFocusChangedListener, damit Sie, wenn sie den Fokus erhalten, die InputConnectionvon der aktuellen EditTextzu Ihrer benutzerdefinierten Tastatur zuweisen können .
Suragch
31

Verwendung KeyboardView:

KeyboardView kbd = new KeyboardView(context);
kbd.setKeyboard(new Keyboard(this, R.xml.custom));

kbd.setOnKeyboardActionListener(new OnKeyboardActionListener() {
    ....
}

Jetzt haben Sie kbdeine normale Ansicht.

Das Schöne daran ist, dass es R.xml.customsich um /res/xml/custom.xmldas Layout der Tastatur handelt, das in XML definiert. Weitere Informationen zu dieser Datei finden Sie hier: Tastatur , Keyboard.Row , Keyboard.Key .

Bigstones
quelle
2
Ich verwende die KeyboardView-Klasse, aber ab API 29 ist sie jetzt veraltet.
Abhijit
14

Hier ist ein Beispielprojekt für eine Softtastatur.

https://developer.android.com/guide/topics/text/creating-input-method.html

Ihre sollten in den gleichen Zeilen mit einem anderen Layout sein.

Bearbeiten: Wenn Sie die Tastatur nur in Ihrer Anwendung benötigen, ist es sehr einfach! Erstellen Sie ein lineares Layout mit vertikaler Ausrichtung und erstellen Sie darin 3 lineare Layouts mit horizontaler Ausrichtung. Platzieren Sie dann die Schaltflächen jeder Zeile in jedem dieser horizontalen linearen Layouts und weisen Sie den Schaltflächen die Eigenschaft weight zu. Verwenden Sie android: layout_weight = 1 für alle, damit sie gleich weit voneinander entfernt sind.

Dies wird lösen. Wenn Sie nicht das bekommen haben, was erwartet wurde, posten Sie bitte den Code hier und wir sind hier, um Ihnen zu helfen!

nithinreddy
quelle
Die Bearbeitung ist tatsächlich schlecht, da dies bedeuten würde, dass die Tastatur immer angezeigt wird und sich nicht wie eine Standard-Android-Tastatur verhält.
m0skit0
4

Ich bin kürzlich auf diesen Beitrag gestoßen, als ich versucht habe zu entscheiden, mit welcher Methode ich meine eigene benutzerdefinierte Tastatur erstellen möchte. Ich fand die Android-System-API sehr eingeschränkt und entschied mich daher, meine eigene In-App-Tastatur zu erstellen. Mit Suragch Antwort als Grundlage für meine Forschung, ging ich auf entwerfen meine eigene Tastatur Komponente . Es ist auf GitHub mit einer MIT-Lizenz veröffentlicht. Hoffentlich spart dies jemand anderem viel Zeit und Kopfschmerzen.

Die Architektur ist ziemlich flexibel. Es gibt eine Hauptansicht (CustomKeyboardView), die Sie mit jedem gewünschten Tastaturlayout und Controller einfügen können.

Sie müssen nur die CustomKeyboardView in Ihrer Aktivitäts-XML deklarieren (Sie können dies auch programmgesteuert tun):

    <com.donbrody.customkeyboard.components.keyboard.CustomKeyboardView
    android:id="@+id/customKeyboardView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" />

Registrieren Sie dann Ihre EditText-Dateien und teilen Sie ihr mit, welche Art von Tastatur sie verwenden sollen:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val numberField: EditText = findViewById(R.id.testNumberField)
    val numberDecimalField: EditText = findViewById(R.id.testNumberDecimalField)
    val qwertyField: EditText = findViewById(R.id.testQwertyField)

    keyboard = findViewById(R.id.customKeyboardView)
    keyboard.registerEditText(CustomKeyboardView.KeyboardType.NUMBER, numberField)
    keyboard.registerEditText(CustomKeyboardView.KeyboardType.NUMBER_DECIMAL, numberDecimalField)
    keyboard.registerEditText(CustomKeyboardView.KeyboardType.QWERTY, qwertyField)
}

Das CustomKeyboardView erledigt den Rest!

Ich habe den Ball mit einer Number-, NumberDecimal- und QWERTZ-Tastatur ins Rollen gebracht. Laden Sie es herunter und erstellen Sie Ihre eigenen Layouts und Controller. Es sieht aus wie das:

Android benutzerdefinierte Tastatur GIF-Landschaft

Geben Sie hier die Bildbeschreibung ein

Auch wenn dies nicht die Architektur ist, für die Sie sich entscheiden, ist es hoffentlich hilfreich, den Quellcode für eine funktionierende In-App-Tastatur anzuzeigen.

Hier ist wieder der Link zum Projekt: Benutzerdefinierte In-App-Tastatur

Don Brody
quelle
2

Nun, Suragch gab bisher die beste Antwort, aber er übersprang einige kleinere Dinge, die für die Kompilierung der App wichtig waren.

Ich hoffe, eine bessere Antwort als Suragch zu geben, indem ich seine Antwort verbessere. Ich werde alle fehlenden Elemente hinzufügen, die er nicht gesetzt hat.

Ich habe meine apk mit der android app APK Builder 1.1.0 kompiliert. Also fangen wir an.

Um eine Android-App zu erstellen, benötigen wir einige Dateien und Ordner, die in einem bestimmten Format organisiert und entsprechend groß geschrieben sind.

res layout -> xml-Dateien, die zeigen, wie die App auf dem Telefon aussehen wird. Ähnlich wie HTML das Aussehen der Webseite im Browser beeinflusst. Ermöglichen, dass Ihre App entsprechend auf Bildschirme passt.

Werte -> konstante Daten wie Farben.xml, Zeichenfolgen.xml, Stile.xml. Diese Dateien müssen richtig geschrieben sein.

zeichnbar -> Bilder {jpeg, png, ...}; Nennen Sie sie irgendetwas.

mipmap -> mehr bilder. für App-Symbol verwendet?

xml -> mehr xml Dateien.

src -> verhält sich wie JavaScript in HTML. Layoutdateien initiieren die Startansicht und Ihre Java-Datei steuert dynamisch die Tag-Elemente und löst Ereignisse aus. Ereignisse können ebenso wie in HTML direkt in der layout.xml aktiviert werden.

AndroidManifest.xml -> Diese Datei registriert, worum es in Ihrer App geht. Anwendungsname, Programmtyp, erforderliche Berechtigungen usw. Dies scheint Android ziemlich sicher zu machen. Programme können buchstäblich nicht das tun, wonach sie im Manifest nicht gefragt haben.

Jetzt gibt es 4 Arten von Android-Programmen, eine Aktivität, einen Dienst, einen Inhaltsanbieter und einen Rundfunkempfänger. Unsere Tastatur wird ein Dienst sein, der es ermöglicht, sie im Hintergrund auszuführen. Es wird nicht in der Liste der zu startenden Apps angezeigt. aber es kann deinstalliert werden.

Um Ihre App zu kompilieren, müssen Sie gradle und apk signieren. Sie können dies erforschen oder APK Builder für Android verwenden. Es ist super einfach.

Nachdem wir die Android-Entwicklung verstanden haben, können wir die Dateien und Ordner erstellen.

  1. Erstellen Sie die Dateien und Ordner wie oben beschrieben. Mein Verzeichnis sieht wie folgt aus:

    • NumPad
      • AndroidManifest.xml
      • src
        • Saragch
          • num_pad
            • MyInputMethodService.java
      • res
        • zeichnbar
          • Suragch_NumPad_icon.png
        • Layout
          • key_preview.xml
          • keyboard_view.xml
        • xml
          • method.xml
          • number_pad.xml
        • Werte
          • Farben.xml
          • string.xml
          • styles.xml

Denken Sie daran, wenn Sie eine Idee wie Android Studio verwenden, enthält diese möglicherweise eine Projektdatei.

  1. Dateien schreiben.

A: NumPad / res / layout / key_preview.xml

<?xml version="1.0" encoding="utf-8"?>
   <TextView
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:gravity="center"
      android:background="@android:color/white"
      android:textColor="@android:color/black"
      android:textSize="30sp">
</TextView>

B: NumPad / res / layout / keyboard_view.xml

<?xml version="1.0" encoding="utf-8"?>
<android.inputmethodservice.KeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:keyPreviewLayout="@layout/key_preview"
    android:layout_alignParentBottom="true">

</android.inputmethodservice.KeyboardView>

C: NumPad / res / xml / method.xml

<?xml version="1.0" encoding="utf-8"?>
<input-method  xmlns:android="http://schemas.android.com/apk/res/android">
    <subtype  android:imeSubtypeMode="keyboard"/>
</input-method>

D: Numpad / res / xml / number_pad.xml

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="20%p"
    android:horizontalGap="5dp"
    android:verticalGap="5dp"
    android:keyHeight="60dp">

    <Row>
        <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
        <Key android:codes="50" android:keyLabel="2"/>
        <Key android:codes="51" android:keyLabel="3"/>
        <Key android:codes="52" android:keyLabel="4"/>
        <Key android:codes="53" android:keyLabel="5" android:keyEdgeFlags="right"/>
    </Row>

    <Row>
        <Key android:codes="54" android:keyLabel="6" android:keyEdgeFlags="left"/>
        <Key android:codes="55" android:keyLabel="7"/>
        <Key android:codes="56" android:keyLabel="8"/>
        <Key android:codes="57" android:keyLabel="9"/>
        <Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
    </Row>

    <Row>
        <Key android:codes="-5"
             android:keyLabel="DELETE"
             android:keyWidth="40%p"
             android:keyEdgeFlags="left"
             android:isRepeatable="true"/>
        <Key android:codes="10"
             android:keyLabel="ENTER"
             android:keyWidth="60%p"
             android:keyEdgeFlags="right"/>
    </Row>

</Keyboard>

Natürlich kann dies leicht nach Ihren Wünschen bearbeitet werden. Sie können sogar Bilder anstelle von Wörtern für das Etikett verwenden.

Suragch demonstrierte die Dateien im Werteordner nicht und ging davon aus, dass wir Zugriff auf Android Studio hatten. das erstellt sie automatisch. Gut, dass ich APK Builder habe.

E: NumPad / res / values ​​/ colours.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

F: NumPad / res / values ​​/ strings.xml

<resources>
    <string name="app_name">Suragch NumPad</string>
</resources>

G: NumPad / res / values ​​/ styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

</resources>

H: Numpad / AndroidManifest.xml

Dies ist die Datei, die wirklich zur Erweiterung bereit war. Hier hatte ich das Gefühl, ich würde mein Programm niemals kompilieren. Schluchzen. Schluchzen. Wenn Sie Suracghs Antwort überprüfen, sehen Sie, dass er die ersten Felder leer lässt und das Aktivitäts-Tag in diese Datei einfügt. Wie gesagt, es gibt vier Arten von Android-Programmen. Eine Aktivität ist eine reguläre App mit einem Startsymbol. Dieser Nummernblock ist keine Aktivität! Außerdem hat er keine Aktivität durchgeführt.

Meine Freunde enthalten das Aktivitäts-Tag nicht. Ihr Programm wird kompiliert und stürzt ab, wenn Sie versuchen, es zu starten! Wie für xmlns: android und used-sdk; Ich kann dir da nicht helfen. Probieren Sie einfach meine Einstellungen aus, wenn sie funktionieren.

Wie Sie sehen, gibt es ein Service-Tag, das es als Service registriert. Außerdem muss service.android:name der Name des öffentlichen Klassenerweiterungsdienstes in unserer Java-Datei sein. Es muss entsprechend aktiviert werden. Paket ist auch der Name des Pakets, das wir in der Java-Datei deklariert haben.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="Saragch.num_pad">

    <uses-sdk
        android:minSdkVersion="12"
        android:targetSdkVersion="27" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/Suragch_NumPad_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <service
            android:name=".MyInputMethodService"
            android:label="Keyboard Display Name"
            android:permission="android.permission.BIND_INPUT_METHOD">

            <intent-filter>
                <action android:name="android.view.InputMethod"/>
            </intent-filter>

            <meta-data
                android:name="android.view.im"
                android:resource="@xml/method"/>

        </service>

    </application>
</manifest>

I: NumPad / src / Saragch / num_pad / MyInputMethodService.java

Hinweis: Ich denke, Java ist eine Alternative zu src.

Dies war eine weitere Problemdatei, aber nicht so umstritten wie die Manifestdatei. Da ich Java gut genug kenne, um zu wissen, was was ist, was nicht. Ich kenne XML kaum und wie es mit der Android-Entwicklung zusammenhängt!

Das Problem hier war, dass er nichts importierte! Ich meine, er hat uns eine "vollständige" Datei gegeben, die Namen verwendet, die nicht aufgelöst werden konnten! InputMethodService, Tastatur usw. Das ist eine schlechte Praxis, Mr. Suragch. Vielen Dank, dass Sie mir geholfen haben, aber wie haben Sie erwartet, dass der Code kompiliert wird, wenn die Namen nicht aufgelöst werden können?

Es folgt die korrekt bearbeitete Version. Ich habe mich zufällig auf ein paar Tipps gestürzt, um mich an den richtigen Ort zu bringen und zu erfahren, was genau importiert werden soll.

package Saragch.num_pad;

import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.KeyboardView;
import android.inputmethodservice.Keyboard;

import android.text.TextUtils;
import android.view.inputmethod.InputConnection;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


public class MyInputMethodService extends InputMethodService implements KeyboardView.OnKeyboardActionListener 
{
    @Override
    public View onCreateInputView() 
    {
     // get the KeyboardView and add our Keyboard layout to it
     KeyboardView keyboardView = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard_view, null);
     Keyboard keyboard = new Keyboard(this, R.xml.number_pad);
     keyboardView.setKeyboard(keyboard);
     keyboardView.setOnKeyboardActionListener(this);
     return keyboardView;
    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) 
    {

        InputConnection ic = getCurrentInputConnection();

        if (ic == null) return;

        switch (primaryCode)
        {
         case Keyboard.KEYCODE_DELETE:
            CharSequence selectedText = ic.getSelectedText(0);

            if (TextUtils.isEmpty(selectedText)) 
            {
             // no selection, so delete previous character
             ic.deleteSurroundingText(1, 0);
            }

            else 
            {
             // delete the selection
             ic.commitText("", 1);
            }

            ic.deleteSurroundingText(1, 0);
            break;

         default:
            char code = (char) primaryCode;
            ic.commitText(String.valueOf(code), 1);
        }
    }

    @Override
    public void onPress(int primaryCode) { }

    @Override
    public void onRelease(int primaryCode) { }

    @Override
    public void onText(CharSequence text) { }

    @Override
    public void swipeLeft() { }

    @Override
    public void swipeRight() { }

    @Override
    public void swipeDown() { }

    @Override
    public void swipeUp() { }
}
  1. Kompilieren und signieren Sie Ihr Projekt.

    Hier bin ich als neuer Android-Entwickler ahnungslos. Ich würde es gerne manuell lernen, da ich glaube, dass echte Programmierer manuell kompilieren können.

Ich denke, Gradle ist eines der Werkzeuge zum Kompilieren und Verpacken von apk. apk scheint wie eine jar-datei oder eine rar für zip-datei zu sein. Es gibt dann zwei Arten der Unterzeichnung. Debug-Schlüssel, der im Play Store und im privaten Schlüssel nicht zulässig ist.

Lassen Sie uns Herrn Saragch helfen. Und danke, dass du mein Video gesehen hast. Wie abonnieren.

marc_s
quelle