Hi Justin,

I have a question on this topic because if I were building a custom 
keyboard like the example on git for soft keyboard how could I employ the 
use of this to improve the accuracy of the hit/clicks on buttons using 
touch delegates when there are so many buttons with very little margin 
between them in Relative or Linear layouts?

There is some small issue I see when playing with the soft keyboard AOSP 
sample project out of git where the OEM keyboard does not exhibit, for 
example if I type rapid fast on the OEM Android Nougat or Below Keyboard it 
keeps up with no lag and the selectors that fire on click don't allow for 
more than one selector to highlight at once meaning if I try to press a key 
and hold it the key remains highlighted but if I press another at the same 
time the selector on the next key fires but kills the selector I was still 
holding down. When you do this same thing on the soft keyboard sample 
project both keys will highlight. I thought solving this would solve the 
lag but then I discovered that Google Messenger causes the lag more than 
other text or chat apps like WhatsApp or Skype but only with non-OEM soft 
keyboards.

So after looking into the touch delegates and getting an understanding of 
how they work, I think I may have found the solution to solve the two 
firing selectors to make it so it works more like OEM by using touch 
delegates as I was playing around with the Google keyboard and noticed 
touch delegates are being used. This makes sense to me because the faster 
performance would come from the runnable which would give higher thread 
priority to the key and using delegates forces the previous key press to 
cancel making way for rapid typing with no lag.

Could you tell me how Google does their keyboard in this regard as other 
OEM's like HTC, Samsung and the likes understand this no so well documented 
feature. I find no one making mention of this but in order to make the 
keyboard on a smartphone more pleasurable to use it must have some sort of 
thread priority to keep up with the fast typists like myself.

Since you work at Google could you look into this for me and help me out, I 
just want to make sure I'm on the right path here in this as I've been 
looking for months on how to solve the typing (input lag) explained in 
Google Messenger with third party sample keyboards based on soft keyboard 
git code. Also if you could I need help understanding predictive text and 
was hoping there was a way to implement this without having to reinvent the 
wheel maybe a library in the SDK or NDK or something else perhaps.

Thanks for the help but if you just don't have the time to reply to this I 
understand, no worries.

Justin Kalis
214-215-2311



On Thursday, August 27, 2009 at 2:38:39 PM UTC-5, Justin (Google Employee) 
wrote:
>
> I was recently asked about how to use a TouchDelegate. I was a bit 
> rusty myself on this and I couldn't find any good documentation on it. 
> Here's the code I wrote after a little trial and error. 
> touch_delegate_view is a simple RelativeLayout with the id 
> touch_delegate_root. I defined with a single, child of the layout, the 
> button delegated_button. In this example I expand the clickable area 
> of the button to 200 pixels above the top of my button. 
>
> public class TouchDelegateSample extends Activity { 
>
>   Button mButton; 
>   @Override 
>   protected void onCreate(Bundle savedInstanceState) { 
>     super.onCreate(savedInstanceState); 
>     setContentView(R.layout.touch_delegate_view); 
>     mButton = (Button)findViewById(R.id.delegated_button); 
>     View parent = findViewById(R.id.touch_delegate_root); 
>
>     // post a runnable to the parent view's message queue so its run 
> after 
>     // the view is drawn 
>     parent.post(new Runnable() { 
>       @Override 
>       public void run() { 
>         Rect delegateArea = new Rect(); 
>         Button delegate = TouchDelegateSample.this.mButton; 
>         delegate.getHitRect(delegateArea); 
>         delegateArea.top -= 200; 
>         TouchDelegate expandedArea = new TouchDelegate(delegateArea, 
> delegate); 
>         // give the delegate to an ancestor of the view we're 
> delegating the 
>         // area to 
>         if (View.class.isInstance(delegate.getParent())) { 
>           ((View)delegate.getParent()).setTouchDelegate(expandedArea); 
>         } 
>       } 
>     }); 
>   } 
> } 
>
> Cheers, 
> Justin 
> Android Team @ Google

-- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/android-developers/24724508-7b7e-4450-b565-302e46d71481%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to