To contact us Click HERE
This article helps to making Scrollable TextView using TextView with dispatchKeyEvent
we can make a scrollable textview while implement the setMovementMethod and dispatchKeyEvent.
1. private TextView mTextView;
2. Set the Required data in the TextView mTextView = (TextView) findViewById(R.id.textView1); mTextView.setText("this is for testing \nthis is for testing \nthis is for testing \nthis is for testing \nthis is for testing \nthis is for testing \n");
3. mTextView.setMovementMethod(new ScrollingMovementMethod(){.....})
4. Override the methods in ScrollingMovementMethod
new ScrollingMovementMethod() { public void onTakeFocus(TextView widget, Spannable text, int dir) {} @Override public boolean onKeyDown(TextView widget, Spannable buffer, int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_DOWN: for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) { down(widget, buffer); } return true; case KeyEvent.KEYCODE_DPAD_UP: for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) { up(widget, buffer); } return true; default: return super.onKeyDown(widget, buffer, keyCode, event); } }
private int getScrollAmount(TextView widget) { final int visibleLineCount = (int) ((1f * widget.getHeight()) / widget .getLineHeight()); int scrollAmount = visibleLineCount - 1; if (scrollAmount < 1) { scrollAmount = 1; } return scrollAmount; } }
5. Call the dispatch method in your code mTextView.dispatchKeyEvent(event);
SAMPLE
public class MainActivity extends Activity { /** Called when the activity is first created. */
private TextView mTextView;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView = (TextView) findViewById(R.id.textView1); mTextView .setText("this is for testing \nthis is for testing \nthis is for testing \nthis is for testing \nthis is for testing \nthis is for testing \n");
mTextView.setMovementMethod(new ScrollingMovementMethod() { public void onTakeFocus(TextView widget, Spannable text, int dir) {
}
@Override public boolean onKeyDown(TextView widget, Spannable buffer, int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_DOWN: for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) { down(widget, buffer); } return true; case KeyEvent.KEYCODE_DPAD_UP: for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) { up(widget, buffer); } return true; default: return super.onKeyDown(widget, buffer, keyCode, event); } } private int getScrollAmount(TextView widget) { final int visibleLineCount = (int) ((1f * widget.getHeight()) / widget .getLineHeight()); int scrollAmount = visibleLineCount - 1; if (scrollAmount < 1) { scrollAmount = 1; } return scrollAmount; } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_DOWN:
return true; case KeyEvent.KEYCODE_DPAD_UP: mTextView.dispatchKeyEvent(event); return true; default: return super.onKeyDown(keyCode, event); } }}
Hiç yorum yok:
Yorum Gönder