3

я сделал мягкую приложение клавиатуры, как показано здесь: custom soft keyboardПользовательские экранная клавиатура для андроида время выполнения изменения

Теперь мне нужна возможность изменить фон этой клавиатуры от моего MainActivity. Как мне это сделать?
Вот код:

public class SimpleIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener 
{ 
private KeyboardView kv; 
private Keyboard keyboard; 

private boolean caps = false; 

@Override 
public View onCreateInputView() 
{ 
    kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null); 
    keyboard = new Keyboard(this, R.xml.qwerty); 
    kv.setKeyboard(keyboard); 
    kv.setOnKeyboardActionListener(this); 
    return kv; 
} 

private void playClick(int keyCode){ 
    AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE); 
    switch(keyCode){ 
     case 32: 
      am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR); 
      break; 
     case Keyboard.KEYCODE_DONE: 
     case 10: 
      am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN); 
      break; 
     case Keyboard.KEYCODE_DELETE: 
      am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE); 
      break; 
     default: am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD); 
    } 
} 

@Override 
public void onKey(int primaryCode, int[] keyCodes) 
{ 
    InputConnection ic = getCurrentInputConnection(); 
    playClick(primaryCode); 
    switch(primaryCode){ 
     case Keyboard.KEYCODE_DELETE : 
      ic.deleteSurroundingText(1, 0); 
      break; 
     case Keyboard.KEYCODE_SHIFT: 
      caps = !caps; 
      keyboard.setShifted(caps); 
      kv.invalidateAllKeys(); 
      break; 
     case Keyboard.KEYCODE_DONE: 
      ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); 
      break; 
     default: 
      char code = (char)primaryCode; 
      if(Character.isLetter(code) && caps){ 
       code = Character.toUpperCase(code); 
      } 
      ic.commitText(String.valueOf(code),1); 
    } 
} 
} 

А вот MainActivity с помощью кнопки, которая должна изменить цвет фона:

public class MainActivity extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button button = (Button)findViewById(R.id.test_button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
      //Change keyboard background 
     } 
    }); 
} 
} 

ответ

0

сделать вы хотите добавить изображение на фоне макета или изменения в качестве темы ?

Для изменения цвета фона вам необходимо добавить цвет фона в файл макета, а для темы вам нужно создать тему 1-го, чем реализовать на Java-коде. Как для темы в качестве образца;

// Для образца По умолчанию Тема

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="250dp" 
    android:orientation="vertical" 

    android:id="@+id/mainview"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:background="@color/colorBack"> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:padding="10dp" 
      android:id="@+id/menu_item" 
      android:layout_alignParentRight="true" 
      android:src="@drawable/ic_more_vert_white_24dp"/> 
    </RelativeLayout> 

    <android.inputmethodservice.KeyboardView 
     android:id="@+id/keyboard" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:keyTextColor="@color/colorAccent" 
     android:padding="4px" 
     android:background="@drawable/images" 
     android:keyTextSize="18sp" 
     android:keyBackground="@color/colorTransparent" 
     android:keyPreviewLayout ="@layout/preview"/> 
    </LinearLayout> 

И для вновь созданных Реализация по умолчанию тема в Java будет показано ниже:

@Override 
    public View onCreateInputView() { 
    View view = null; 
    if (themes != null && themes.equals("default")) { 
      LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.default_theme, null); 
      imageView = (ImageView) view.findViewById(R.id.menu_item); 
      imageView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        openOptionsMenu(v); 
       } 
      }); 
      kv = (KeyboardView) view.findViewById(keyboard); 
      //kv.setBackgroundResource(R.drawable.images); 
      qwertyKeyboard = new Keyboard(this, R.xml.qwerty); 
      kv.setKeyboard(qwertyKeyboard); 
      kv.setOnKeyboardActionListener(this); 
      kv.setOnTouchListener(new HapticListen(7)); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
       kv.setBackground(drawable); 
      } 
      return view; 
     }else { 
      return null; 
     } 
     } 

Надеюсь, я помогу вам понять.