2016-04-13 25 views
-1

Nasıl Android için yumuşak bir klavye yapıyorum. Ancak klavyemin tasarımı çok geleneksel değil, geleneksel Keyboard XML Düzenini kullanmak istemiyorum ve bunun yerine bir Relative Layout kullanmak istiyorum.Android Layout Inflator

Bu benim giriş hizmeti yaratmak için izlenen öğretici geçerli: http://code.tutsplus.com/tutorials/create-a-custom-keyboard-on-android--cms-22615

yerine, normal Klavye Düzeni dosyasının bir Relative Layout kullanmak için yollar arıyordu ve ben bu yığın taşması yazı bulundu:
Android: Non-Keyboard IME

Klavyede bağımsız bir görünüm oluşturmak için Layout Inflator'ı kullanmak zorundayım. Ancak, stackoverflow yazısında sunulan çözümden ne yapacağımı anlamadım.

Birisi, varsayılan Klavye Düzeni Dosyası yerine özel bir klavye için klavyeyi tasarlamak üzere bir Relative Layout dosyasının nasıl kullanılacağını açıklayabilir mi?

DÜZENLEME:

enter image description here

custom_keyboard_layout benim klavye kullanmak istediğiniz bir Relative Layout dosyasıdır: Burada

Projemin dosya yapıdır.

Bu şuna benzer:

<?xml version="1.0" encoding="utf-8"?> 
<!-- This is a very rough test version of the layout --> 
<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.roymunson.vroy.customtestkeyboard.IntroScreen"> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="100dp" 
    android:text="Custom Button." /> 
</RelativeLayout> 

Benim Keyboard.xml dosya şöyle görünür: düşündüğümden

package com.roymunson.vroy.customtestkeyboard; 

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


public class customInputMethod extends InputMethodService { 

    private Keyboard keyboard; 

    @Override public void onInitializeInterface() { 
     keyboard = new Keyboard(this, R.xml.custom_keyboard_layout); 
    } 

    @Override 
    public View onCreateInputView() { 
     KeyboardView mInputView = (KeyboardView) getLayoutInflater().inflate(R.layout.keyboard, null); 
     mInputView.setKeyboard(keyboard); 
     return mInputView; 
    } 

} 

:

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

Benim customInputMethod.java dosyası, şuna benzer bir InputMethodService olduğunu Bu çalışmalı ve Bağıl Düzen dosyasını kullanmama izin ver özel klavyem için ama değil. Bundan gerçekten yeni olduğum için, ne yaptığımı bilmiyorum.

Neyi yanlış anlayacağım?

+0

bağlantılı yayında cevap alır gibi yaklaşık olarak basit:

Sonra kodu değişti. Hangi kısımlarda sorun yaşıyorsun? –

+0

@MikeM. Yazımda bir düzenleme ekledim. Bu benim problemime biraz daha detay verir. – Roymunson

+0

'thlate()' çağrısını 'R.id.custom_keyboard_layout' yerine kullanmak için değiştirin ve' mInputView''ü 'RelativeLayout' olarak değiştirin. –

cevap

0

İşte Mike M.'nin yazım hakkındaki yorumlar bölümünde sunduğu çözüm.

İlk değişiklik, bu dizin yapısı:

enter image description here

Not: Ben yeni yaklaşımda kullanılacak görünmüyordu çünkü keyboard.xml dosyayı kaldırıldı ancak yine gerekebilir.

package com.roymunson.vroy.customtestkeyboard; 

import android.inputmethodservice.InputMethodService; 
import android.inputmethodservice.Keyboard; 
import android.view.View; 
import android.widget.RelativeLayout; 


public class customInputMethod extends InputMethodService { 

    private Keyboard keyboard; 

    @Override public void onInitializeInterface() { 
     keyboard = new Keyboard(this, R.layout.custom_keyboard_layout); 
    } 

    @Override 
    public View onCreateInputView() { 

     RelativeLayout mInputView = (RelativeLayout) getLayoutInflater().inflate(R.layout.custom_keyboard_layout, null); 
     return mInputView; 
    } 

} 
İlgili konular