Android benutzerdefiniertes Tastaturlayout, wobei ein weißer Rand an der Seite verbleibt
Ich arbeite an einer benutzerdefinierten Tastatur für Android und bin auf ein Problem gestoßen, bei dem die Tastatur eine weiße Linie / ein weißes Leerzeichen rechts zu lassen scheint, anstatt die übergeordnete Ansicht auszufüllen Symbole, es ist einfach Platzhalter Grafik für jetzt)
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 von1%p
... Aber ich bin mir ein bisschen unsicher, wie ich es füllen soll, ohne meine Ausrichtungen zu verfälschen ... Zum Beispiel. Das Ändern der Lücke in der ersten Reihe in 2 würde das Problem beheben, aber die Ausrichtung durcheinander bringen.
Bei Bedarf wurde ein zusätzlicher Code für Sie hinzugefügt ...
Meine Klasse erweitertInputMethodService
:
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>