2016-04-13 17 views
-1

私はAndroid用のソフトキーボードを作っています。しかし、私のキーボードのデザインは非常に非伝統的です。つまり、私は伝統的なKeyboard XMLレイアウトを使いたくないのですが、代わりにRelative Layoutを使いたいと思います。Androidの使い方レイアウトインフレータ

これは私が入力サービスを作成するために続くチュートリアルです:私が代わりに通常のキーボードレイアウトファイルのRelative Layoutを使用する方法を見ていたと私は、このスタックオーバーフローのポストを見つけ http://code.tutsplus.com/tutorials/create-a-custom-keyboard-on-android--cms-22615


Android: Non-Keyboard IME

レイアウトインフレータを使用してキーボードのスタンドアロンビューを作成する必要があるようです。しかし、私はstackoverflowポストに提示されたソリューションから何をすべきか理解していませんでした。

Relative Layoutファイルを使用して、デフォルトのキーボードレイアウトファイルではなくカスタムキーボードのキーボードを設計する方法を説明できる人はいますか?

編集:ここでは

は私のプロジェクトのファイル構造である:

enter image description here

custom_keyboard_layoutは、私は私のキーボードが使いたいRelative Layoutファイルです。

それは次のようになります。私は思っ

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> 

マイcustomInputMethod.javaファイルが、それはこのようになりますInputMethodServiceです:

<?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> 

Keyboard.xmlファイルには、次のようになりますこれは動作し、相対レイアウトファイルを使用させます私のカスタムキーボードではありませんが、そうではありません。私は本当にこれに新しいので、何が間違っているのか分かりません。

何が間違っていますか?

+0

は、その後、私はにコードを変更しました。どの部分が問題を抱えていますか? –

+0

@MikeM。私は自分の投稿に編集を加えました。それは私の問題にいくつかの詳細を与える。 – Roymunson

+0

代わりに 'inflate()'呼び出しを変更して 'R.id.custom_keyboard_layout'を使い、' mInputView'を 'RelativeLayout'に変更してください。 –

答えて

0

私の記事のコメントにMike M.が提供した解決策は次のとおりです。

まずこれにディレクトリ構造を変更します。

enter image description here

注:この新しいアプローチで使用されていないようでしたので、私は、しかし、それが再び必要になることがあります、keyboard.xmlファイルを削除しました。リンクポストで答えがそれを取得と同じくらい簡単です

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; 
    } 

} 
関連する問題