2012-07-12 11 views
5

Provare a rendere un InputMethod Android che sia trasparente, ovvero il contenuto sottostante mostra la tastiera che sto sviluppando.Transparent InputMethod per Android

Sono stato in grado di rendere trasparente la vista che ho passato al sistema - penso - ma sembra esserci qualcosa sotto il mio punto di vista che è bianco fisso - e che offusca il contenuto sottostante.

E 'sicuramente possibile, questi ragazzi lo fanno:

https://play.google.com/store/apps/details?id=com.aitype.android.tablet.p&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5haXR5cGUuYW5kcm9pZC50YWJsZXQucCJd

+1

Lo hai mai capito? Sto cercando di fare la stessa cosa, e sto incontrando lo stesso problema. –

risposta

5

ho capito! Non sono sicuro se questo è il modo in cui i ragazzi nel tuo play store lo hanno fatto, ma questo è ciò che ha funzionato per me. Inoltre, mi rendo conto che questo post ha più di un anno, ma lo sto ancora rispondendo nel caso in cui qualcun altro lo scoprisse mentre cercava di creare una tastiera trasparente.

Il "qualcosa" sotto la tua vista non è in realtà nulla - è lo spazio vuoto. La tastiera ha spinto l'intera vista verso l'alto e verso l'esterno per fare spazio alla sua altezza, lasciando dietro di sé uno spazio vuoto vuoto. La tua tastiera trasparente lascia trasparire questo spazio bianco.

Ecco la soluzione: anziché restituire la vista in onCreateInputView, restituirla in onCreateCandidatesView. Questa è la vista che normalmente vive sopra la tastiera e elenca i suggerimenti di correzione automatica. Ma lo userai per ospitare la tua tastiera attuale.

Il motivo per cui si desidera che la tastiera sia una visualizzazione per candidati è perché la vista di input spinge più spesso la vista sottostante verso l'alto. Le singole app possono decidere come comportarsi quando viene visualizzata una tastiera tramite android: windowSoftInputMode e la vista di input rispetta le loro preferenze, ma la vista candidati usa sempre adjustPan.

Dalla documentazione: "Si noti che perché la vista candidato tende ad essere mostrato e nascosto un sacco, ma non influisce l'interfaccia utente dell'applicazione nello stesso modo come la vista di ingresso morbido: non potrà mai causare finestre delle applicazioni per ridimensionare, solo fare in modo che vengano spostati, se necessario, affinché l'utente possa vedere il focus corrente. " http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html

Quindi, restituire la vista trasparente dalla onCreateCandidatesView, restituire null da onCreateInputView e assicurarsi di chiamare setCandidatesViewShown (vero) in modo da visualizzare i vostri candidati si presenta (io lo chiamo in onWindowShown).

+0

Non significa che la stessa cosa accadrà se l'input dell'app è in fondo al suo layout? Per evitare di oscurarlo, Android esegue il pan della app in modo che rimanga nella parte superiore dello schermo, lasciando uno spazio vuoto dietro la tastiera. –

+0

Ecco cosa farà se usi onCreateInputView. Come ho spiegato, onCreateCandidatesView si comporta in modo diverso. Sperimenta un po 'con esso; vedrai che l'input rimane esattamente dove è (a meno che, forse, sia in una scrollview verticale. Non l'ho provato) –

+0

No, se usi una vista di input, Android eseguirà il pan o ridimensionerà la finestra in base al impostazioni dell'attività. Secondo la documentazione che hai citato, la visualizzazione dei candidati farà sì che l'attività "venga eseguita in panoramica se necessario per consentire all'utente di vedere l'attuale focus". –

0

Normalmente InputMethodServices utilizza il colore di sfondo che è lo stesso del colore di sfondo dell'applicazione corrente. Se vuoi renderlo trasparente, penso che dovresti renderlo come una struttura a finestra popup, non una finestra inputmethod, credo.

Problemi correlati