How to add scrollview to keyboardView in android

1.6k views Asked by At

I've been trying to add scrollview to my android custom keyboard Ime , but nothing i've try not working so far.

Here is part of my code

keyboard.xml

<?xml version="1.0" encoding="UTF-8"?>
<ScrollView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <android.inputmethodservice.KeyboardView
        android:id="@+id/keyboard"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:isScrollContainer="true"
        android:scrollbarAlwaysDrawHorizontalTrack="true"
        android:scrollbarStyle="insideOverlay"
        android:scrollbars="horizontal"
        android:focusable="true"
    />
</ScrollView>

.java

 @Override
    public View onCreateInputView() {
        context = getApplicationContext();
        ScrollView scroll = (ScrollView)getLayoutInflater().inflate(R.layout.keyboard,null);
        kv = (KeyboardView)scroll.findViewById(R.id.keyboard);
        keyboard = new Keyboard(this, R.xml.qwerty);
        kv.setPreviewEnabled(false);
        kv.setKeyboard(keyboard);
        kv.setHorizontalScrollBarEnabled(true);
        kv.canScrollHorizontally(1);
        kv.setOnKeyboardActionListener(this);

        return kv;
    }

I get the error below

> java.lang.IllegalStateException: The specified child already has a
> parent. You must call removeView() on the child's parent first.

Expected: Scroll like image below(Cant upload here , looks like my reputation not enough for that :) )

http://www.fandroides.com/wp-content/uploads/2014/04/Google-keyboard-emojis.png

Any help will be appreciated. Thank You

2

There are 2 answers

2
AudioBubble On
LinearLayout myView = (LinearLayout) View.inflate(this, R.layout.my_layout, null);
HorizontalScrollView horizontalScrollView = (HorizontalScrollView) myView.findViewById(R.id.keyboard_scroll);
0
Jalil Hamdollahi Oskouei On

Try making this change:

keyboard.xml

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

my_layout.xml

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

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="@dimen/example_height"
            android:id="@+id/keyboard_scroll">
    </ScrollView>

</LinearLayout>

.java

@Override
public View onCreateInputView() {

    LinearLayout myView = (LinearLayout) View.inflate(this, R.layout.my_layout, null);
    ScrollView scrollView = (ScrollView) myView.findViewById(R.id.keyboard_scroll);

    KeyboardView kv = (KeyboardView) getLayoutInflater().inflate(keyboard.xml, null);
    keyboard = new Keyboard(this, R.xml.qwerty);
    kv.setKeyboard(keyboard);
    kv.setOnKeyboardActionListener(this);

    scrollView.addView(kv);
    return myView;
}