2016-07-12 2 views
8

다른 입력 방법을 표시하기 위해 TabLayout을 사용하고 있습니다. 첫 번째 탭에는 버튼이 있고 네 번째 탭에는이 TabLayout에 삽입 된 표준 키보드가 표시되어야합니다. 이 같이 방법을 여기에 스크린 샷 :안드로이드에 가상 키보드 표시 TabLayout

enter image description here

TabLayout 지금까지 작동합니다. KeyboardView로 레이아웃 XML 파일을 만들려고했습니다. TabLayout 있도록 자체가 작동 ...

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

나는 간단한 텍스트 뷰를 사용하고있는 경우는, 앱이 텍스트가 표시됩니다 :하지만 응용 프로그램은 키보드를 표시하지 않습니다

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="This is a tab layout" 
     android:id="@+id/textView" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

내 질문을 어떻게 간단한 키보드를 만들고 TabLayout 내에 표시 할 수 있습니까? 고맙습니다!

+0

나는 확실하지 않다, 그러나 당신은 당신의 KeyboardView에 일정한 높이를 지정하려고 했습니까? 250dp 정도 면요? –

답변

1

나는 내가 레이아웃 XML 추가했다 예를 들어, 몇 줄의 코드가 필요 :

public class SQLConsoleTab2Fragment extends SQLConsoleFragment implements KeyboardView.OnKeyboardActionListener { 

    public KeyboardView keyboard123; 
    public View Tab2View; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
//execute(v) 


     Tab2View = inflater.inflate(R.layout.tab2, container, false); 
     keyboard123 = (KeyboardView) Tab2View.findViewById(R.id.keyboard123); 

     Keyboard k1 = new Keyboard(Tab2View.getContext(), R.xml.qwerty_keyboard); 


Tab2View.findViewById(R.id.keyboard123); 
     keyboard123.setKeyboard(k1); 
     keyboard123.setEnabled(true); 
     keyboard123.setPreviewEnabled(true); 

     keyboard123.setOnKeyboardActionListener(this); 

     return Tab2View; 
    } 
} 
1

약 2 년 전 IME를 작성했습니다. 당신의 사건은 내 사건과 다르지만 그 생각은 동일해야합니다.

키보드보기에키보드 레이아웃을 지정하지 않았습니다.

@Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // Round up a little 
     if (mKeyboard == null) { 
      setMeasuredDimension(mPaddingLeft + mPaddingRight, mPaddingTop + mPaddingBottom); 
     } else { 
      int width = mKeyboard.getMinWidth() + mPaddingLeft + mPaddingRight; 
      if (MeasureSpec.getSize(widthMeasureSpec) < width + 10) { 
       width = MeasureSpec.getSize(widthMeasureSpec); 
      } 
      setMeasuredDimension(width, mKeyboard.getHeight() + mPaddingTop + mPaddingBottom); 
     } 
    } 

mKeyboard 변수 고양이가 setKeyboard를 통해 설정할 수 :

코드를 참조하십시오. 당신이해야 할 것은 :

  1. 코드를 실행 시도해보십시오 Keyboard 인스턴스를 생성하고 KeyboardView
  2. 로 설정 자원 폴더에 키보드 레이아웃 파일을 만듭니다.
1

내가 어떤 다른 정보에 대해 기록하지 않았다, 그래서 감각, This Example 문서를 기반으로, 키보드 작업을위한 전체 단계를 작성하거나 할 생각 : 활동 (속성을 추가하여

1 변경 매니페스트를 또는 서비스)

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

2) 키보드 속성 기본 파일 만들기 :

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

3)

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" 
    android:keyWidth="10%p" 
    android:horizontalGap="0px" 
    android:verticalGap="0px" 
    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"/> 

     // .......... 
</Keyboard> 

5) 서비스 정의 또는 Acitivity이 인터페이스를 확장 :

public class SimpleIME extends InputMethodService 
    implements OnKeyboardActionListener{ 

    private KeyboardView kv; 
    private Keyboard keyboard; 

    private boolean caps = false; 

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

    } 

    @Override 
    public void onPress(int primaryCode) { 
    } 

    @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() { 
    } 
} 
키보드 키 (단지 예)를 정의 (당신처럼)

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

4) 레이아웃에 KeyboardView 정의

6) 예제 또는 문서를 기반으로 작업의 업데이트 방법 만 제공합니다. 그게 전부입니다 ...내 조각에서