Android benutzerdefinierte Tastatur-Layout verlassen einen Rand von weiß an der Seite

Ich arbeite an einer benutzerdefinierten Tastatur für Android, und ich habe in ein Problem, wo die Tastatur scheint eine weiße Linie / Raum auf der rechten Seite zu verlassen, anstatt füllen die Elternansicht … (kümmern Sie sich nicht um die Symbole , Es ist einfach Platzhalter Grafik für jetzt)

Screenshot vom Simulator

  • Wie funktioniert die "SHAREit" Android Anwendung technisch?
  • Wie kann man die gleiche Instanz von Fragmenten speichern und wiederverwenden?
  • Konfiguration mit dem Namen 'default' nicht gefunden Android Studio
  • Zurück-Taste auf Android-Handys
  • Skalenfaktor für xxhdpi android?
  • Android leer Linearer Layoutinhalt
  • Unten sehen Sie mein Layout …

    <Keyboard xmlns:android="http://schemas.android.com/apk/res/android" android:keyWidth="14%p" android:horizontalGap="0px" android:verticalGap="0px" android:keyHeight="60dp" > <Row> <Key android:codes="49" android:keyIcon="@drawable/rsz_emoji" android:horizontalGap="1%p" android:keyEdgeFlags="left"/> <Key android:codes="50" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="51" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="52" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="53" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="54" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="48" android:keyIcon="@drawable/rsz_emoji" android:keyEdgeFlags="right"/> </Row> <Row> <Key android:codes="113" android:keyIcon="@drawable/rsz_emoji" android:horizontalGap="8%p" android:keyEdgeFlags="left"/> <Key android:codes="114" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="116" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="121" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="111" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="112" android:keyIcon="@drawable/rsz_emoji" android:keyEdgeFlags="right"/> </Row> <Row> <Key android:codes="1" android:keyIcon="@drawable/rsz_emoji" android:keyWidth="28%p" android:horizontalGap="8%p" android:keyEdgeFlags="left"/> <Key android:codes="46" android:keyIcon="@drawable/rsz_emoji" android:keyWidth="28%p"/> <Key android:codes="58" android:keyIcon="@drawable/rsz_emoji" android:keyWidth="28%p" android:keyEdgeFlags="right"/> </Row> <Row android:rowEdgeFlags="bottom"> <Key android:codes="44" android:keyIcon="@drawable/globe" android:horizontalGap="8%p" android:keyEdgeFlags="left"/> <Key android:codes="47" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="32" android:keyIcon="@drawable/rsz_emoji" android:keyWidth="28%p"/> <Key android:codes="1" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="-5" android:keyIcon="@drawable/backspace" android:keyEdgeFlags="right"/> </Row> </Keyboard> 

    Soweit ich sehen kann, ist es eine Frage von 1%p … Aber ich bin ein bisschen unsicher, wie man es füllt, ohne meine Ausrichtungen zu verwirren … ZB die Lücke in der ersten Zeile auf 2 würde es beheben, Aber verwirren die Ausrichtung.

    Zusätzlicher Code für Sie hinzugefügt …

    Meine Klasse erweitert InputMethodService :

      private KeyboardView kv; private Keyboard keyboard; @Override public View onCreateInputView() { kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null); keyboard = new Keyboard(this, R.xml.custom_keyboard); kv.setPreviewEnabled(false); kv.setKeyboard(keyboard); kv.setOnKeyboardActionListener(this); return kv; } @Override public void onPress(int primaryCode) { } @Override public void onRelease(int primaryCode) { } @Override public void onKey(int primaryCode, int[] keyCodes) { InputConnection ic = getCurrentInputConnection(); if (primaryCode == Keyboard.KEYCODE_DELETE) { ic.deleteSurroundingText(1, 0); } else { Drawable mDrawable = ResourcesCompat.getDrawable(getResources(), R.drawable.rsz_emoji, null); Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap(); String path = MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "Emoticon", null); Uri fileUri = Uri.parse(path); Intent picMessageIntent = new Intent(Intent.ACTION_SEND); picMessageIntent.setPackage("com.android.mms"); picMessageIntent.putExtra(Intent.EXTRA_STREAM, fileUri); picMessageIntent.setType("image/png"); picMessageIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(picMessageIntent); } } @Override public void onText(CharSequence text) { } @Override public void swipeLeft() { } @Override public void swipeRight() { } @Override public void swipeDown() { } @Override public void swipeUp() { } 

    Meine Keyboard.xml

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

    Styles.xml

     <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources> 

    Manifest:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="CENSORED" > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- Declares the input method service --> <service android:name=".CENSORED" android:label="@string/keyboard_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> <uses-permission android:name="android.permission.INTERNET" /> </manifest> 

  • Warum MediaPlayer werft NICHT vorhanden Fehler beim Erstellen Instanz davon?
  • Animieren der childs einer expandablelistview beim kollabieren / expandieren
  • Wie kann ich Android-Tests mit sbt laufen?
  • Welches zu verwenden: onSaveInstanceState vs. onRetainNonConfigurationInstance?
  • Wie beschleunige ich Android Emulation?
  • Dynamische Listenansicht hinzufügen "Load more items" am Ende der Scroll
  • 6 Solutions collect form web for “Android benutzerdefinierte Tastatur-Layout verlassen einen Rand von weiß an der Seite”

    Ich kann den Fehler nicht reproduzieren, ich habe einen Screenshot mit einer hellen Hintergrund-App und all meinem relevanten Code bereitgestellt. Ich bin mir nicht sicher genau dort, wo du falsch gehst, ohne das ganze Projekt und die Verzeichnisse zu sehen, also habe ich die entsprechende XML geschrieben. Es gibt auch eine Serviceklasse, die ich nicht eingeschlossen habe (wie man es offensichtlich funktioniert).

    Der <Keyboard> Code befindet sich in einer Datei namens qwerty.xml im Ordner "resources / xml" mit einer Datei namens method.xml:

    Ich habe alle Ihre Tastatur Dimensionen in der qwerty.xml, außer ich ersetzt das Bild.

    method.xml

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

    Zwei Layout-Dateien:

    keyboard.xml

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

    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:background="#ffff00" android:gravity="center" android:textSize="30sp android:textStyle="bold"> </TextView> 

    Stile:

     <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources> 

    Im Manifest, innerhalb der Anwendung:

     <service android:name=".SimpleIME" android:label="@string/simple_ime" android:permission="android.permission.BIND_INPUT_METHOD" > <meta-data android:name="android.view.im" android:resource="@xml/method"/> <intent-filter> <action android:name="android.view.InputMethod"/> </intent-filter> </service> 

    Ich habe das Bild so groß gelassen, dass man deutlich sehen kann, dass es keine Lücke gibt. Bildbeschreibung hier eingeben

    Dieser Link geht hier auch durch diesen Code:

    http://code.tutsplus.com/tutorials/create-a-custom-keyboard-on-android–cms-22615

    Bearbeiten 1

    Nach der Diskussion in den Kommentaren würde ich vorschlagen, Ihren Hintergrundstil zu überprüfen, da es Probleme / Änderungen mit der Standard-Hintergrundfarbe gibt, die für das Tastaturfenster angezeigt werden kann. Dies wird im Detail in dieser Antwort angesprochen https://stackoverflow.com/a/33052648/3956566 . Ich werde die Einzelheiten nicht wiederholen, da der Link unwahrscheinlich ist, zu verrotten, ein upvoted SO Post zu sein.

    Bearbeiten 2

    Ok Hinzufügen der Differenz im Eingabemethodendienst:

     @Override public void onKey(int primaryCode, int[] keyCodes) { InputConnection ic = getCurrentInputConnection(); switch(primaryCode){ case Keyboard.KEYCODE_DELETE : ic.deleteSurroundingText(1, 0); break; case Keyboard.KEYCODE_SHIFT: caps = !caps; keyboard.setShifted(caps); kv.invalidateAllKeys(); break; case Keyboard.KEYCODE_DONE: ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); break; default: char code = (char)primaryCode; if(Character.isLetter(code) && caps){ code = Character.toUpperCase(code); } ic.commitText(String.valueOf(code),1); } } 

    Bearbeiten 3

    Erstellen Sie ein leeres Projekt, keine Aktivität für Ihre Tastatur, um es zu testen und es als separate App auszuführen. Sie sind mit android:theme="@style/AppTheme.NoActionBar" In Ihrem Launcher Aktivität und es kann ein Problem mit Hintergrund Deckkraft und Ihre Fenster / Ansichten.

    Im Fall: 7 (Schlüssel) x 14% = 98% + 1% Lücke (firstkeyś horizontalGap ) = 99%.

    Setzen Sie die '% 1' in horizontalGap in der letzten Taste wie im ersten Schlüssel.

     <Row> <Key android:codes="49" android:keyIcon="@drawable/rsz_emoji" android:horizontalGap="1%p" android:keyEdgeFlags="left"/> <Key android:codes="50" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="51" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="52" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="53" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="54" android:keyIcon="@drawable/rsz_emoji"/> <Key android:codes="48" android:keyIcon="@drawable/rsz_emoji" android:horizontalGap="1%p" android:keyEdgeFlags="right"/> </Row> 

    Hast du versucht, dies dem Keyboard-Tag in deiner XML-Datei hinzuzufügen?

     android:layout_height="fill_parent" android:layout_width="fill_parent" 

    Füge eine Zeile mit 100 Prozent Breite und Nullhöhe vor der ersten Reihe hinzu. so was. Füge diesen Code vor der ersten Zeile hinzu

     <Row android:horizontalGap="0%p" android:keyHeight="0.01%p"> <Key android:codes="32" android:keyLabel="" android:keyWidth="100%p" /> </Row> 

    Ich hatte auch dieses problem Ich habe nie eine gute Lösung gefunden.

    Android-Keyboard-Layout-API saugt. Wenn ich das alles wieder tue, hätte ich es nicht benutzt und stattdessen meine eigene UI von Grund auf neu InputMethod direkt mit InputMethod .

    In jedem Fall war meine Lösung, einen zusätzlichen Schlüssel am unteren Rand des Layouts mit einer 100% Breite und nur 1dp Höhe hinzuzufügen.

    Die Taste macht absolut nichts und die Höhe ist so klein, dass der Benutzer es nicht sieht. Aber die Breite des Schlüssels behebt das Lückenproblem.

    Wenn sich die Tastaturansicht in einem Layout befindet, stellen Sie sicher, dass die Füllungsparameter auf 0dp eingestellt sind.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.