2010-10-26 22 views
2

J'essaie de fournir une vue modifiée pour un clavier Android personnalisé en mode plein écran. Par conséquent j'essaye de remplacer la vue d'extrait. Dans la documentation, j'ai trouvé la méthode suivante: setExtractView(View view) - donc je suppose que c'est un appel d'API publique. Cependant, comme vous pouvez le voir à partir du code source du système Android (collé ci-dessous), il me permet d'accéder uniquement à une vue qui a des éléments de vue avec des ID dans l'espace com.android.internal. *. Sinon, bien sûr, j'obtiendrai une exception NullPointerException.Android: InputMethodService comment définir une vue avec setExtractView (vue vue)?

public void setExtractView(View view) { 
    mExtractFrame.removeAllViews(); 
    mExtractFrame.addView(view, new FrameLayout.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.MATCH_PARENT)); 
    mExtractView = view; 
    if (view != null) { 
     mExtractEditText = (ExtractEditText)view.findViewById(
       com.android.internal.R.id.inputExtractEditText); 
     mExtractEditText.setIME(this); 
     mExtractAction = (Button)view.findViewById(
       com.android.internal.R.id.inputExtractAction); 
     if (mExtractAction != null) { 
      mExtractAccessories = (ViewGroup)view.findViewById(
        com.android.internal.R.id.inputExtractAccessories); 
     } 
     startExtractingText(false); 
    } else { 
     mExtractEditText = null; 
     mExtractAccessories = null; 
     mExtractAction = null; 
    } 
} 

Alors, je me demande, est-ce un bug, que cette méthode est au sein de l'API publique ou sinon, comment puis-je créer une vue personnalisée avec ID dans le com.android.internal. * Espace ?


Mise à jour: Nevermind vient de trouver this. Va vérifier plus tard et rapport si cela a fonctionné.

+0

Avez-vous déjà eu ce travail? – Samuel

+0

Merci Samuel de me le rappeler. Je viens de poster ma solution. – znq

Répondre

1

Un peu en retard, mais toujours là la réponse (merci Samuel de m'avoir cinglé). La solution est en fait assez simple:

ExtractEditText extractEditTextView = new ExtractEditText(this); 
extractEditTextView.setId(android.R.id.inputExtractEditText); 
+0

Comment avez-vous pu obtenir l'instance de InputMethodService pour appeler setExtractView()? – Samuel

+0

Je construisais mon propre IME et par conséquent étendant [InputMethodService] (http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html) – znq