下面列出了怎么用android.text.method.MovementMethod的API类实例代码及写法,或者点击链接到github查看源代码。
private void onClickURL(){
MovementMethod contributors_descMovementMethod = contributors_desc.getMovementMethod();
if ((contributors_descMovementMethod == null) || !(contributors_descMovementMethod instanceof LinkMovementMethod)) {
if (contributors_desc.getLinksClickable()) {
contributors_desc.setMovementMethod(LinkMovementMethod.getInstance());
}
}
MovementMethod app_report_issues_descMovementMethod = app_report_issues_desc.getMovementMethod();
if ((app_report_issues_descMovementMethod == null) || !(app_report_issues_descMovementMethod instanceof LinkMovementMethod)) {
if (app_report_issues_desc.getLinksClickable()) {
app_report_issues_desc.setMovementMethod(LinkMovementMethod.getInstance());
}
}
MovementMethod app_license_info_descMovementMethod = app_license_info_desc.getMovementMethod();
if ((app_license_info_descMovementMethod == null) || !(app_license_info_descMovementMethod instanceof LinkMovementMethod)) {
if (app_license_info_desc.getLinksClickable()) {
app_license_info_desc.setMovementMethod(LinkMovementMethod.getInstance());
}
}
}
@Test
public void implicit_movement_method_after_set_text_added() {
// validate that CorePlugin will implicitly add LinkMovementMethod if one is missing
final TextView textView = mock(TextView.class);
when(textView.getMovementMethod()).thenReturn(null);
final CorePlugin plugin = CorePlugin.create();
assertNull(textView.getMovementMethod());
plugin.afterSetText(textView);
final ArgumentCaptor<MovementMethod> captor = ArgumentCaptor.forClass(MovementMethod.class);
verify(textView, times(1)).setMovementMethod(captor.capture());
assertNotNull(captor.getValue());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
int padding = (int) (getResources().getDisplayMetrics().density * 8); // 8dip
ListView listView = getListView();
listView.setPadding(padding, 0, padding, 0);
listView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
listView.setDivider(null);
LayoutInflater inflater = LayoutInflater.from(getActivity());
View header = inflater.inflate(R.layout.list_header_footer, listView, false);
View footer = inflater.inflate(R.layout.list_footer, listView, false);
TextView tv = (TextView) footer.findViewById(R.id.footer);
String str = getResources().getString(R.string.footer);
MovementMethod method = LinkMovementMethod.getInstance();
tv.setMovementMethod(method);
CharSequence html = Html.fromHtml(str);
tv.setText(html);
listView.addHeaderView(header, null, false);
listView.addFooterView(footer, null, false);
setTrack(7);
}
private static final void addLinkMovementMethod(@NonNull TextView t) {
MovementMethod m = t.getMovementMethod();
if ((m == null) || !(m instanceof LinkMovementMethod)) {
if (t.getLinksClickable()) {
t.setMovementMethod(LinkMovementMethod.getInstance());
}
}
}
public static MovementMethod getInstance() {
if (sInstance == null) {
sInstance = new DefaultMovementMethod();
}
return sInstance;
}
public static MovementMethod getInstance() {
if (sInstance == null) {
sInstance = new DefaultMovementMethod();
}
return sInstance;
}
public static MovementMethod getInstance() {
if (sInstance == null) {
sInstance = new LongPressLinkMovementMethod();
}
return sInstance;
}
@NonNull
public static MovementMethod getInstance() {
if (sInstance == null)
sInstance = new MentionsMovementMethod();
return sInstance;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean ret = super.onTouchEvent(event);
MovementMethod method = getMovementMethod();
if (method instanceof HackyMovementMethod) {
return ((HackyMovementMethod) method).isLinkHit();
}
return ret;
}
public static MovementMethod getInstance()
{
if (sInstance == null)
sInstance = new LinkMovementMethod();
return sInstance;
}
public static MovementMethod getInstance(LinkMovementListener _listener, Class _spanClass) {
if (sInstance == null) {
sInstance = new LinkMovementMethodExt();
listener = _listener;
((LinkMovementMethodExt) sInstance).spanClass = _spanClass;
}
return sInstance;
}
public static MovementMethod getInstance()
{
if (sInstance == null)
sInstance = new LinkMovementMethod();
return sInstance;
}
@Override
protected void onFinishInflate()
{
super.onFinishInflate();
mText = (TextView) findViewById(android.R.id.text1);
if (mText == null)
{
// on older Android version onFinishInflate can be called multiple times if the view contains includes
return;
}
MovementMethod mMethod = LinkMovementMethod.getInstance();
mText.setMovementMethod(mMethod);
}
private static final void addLinkMovementMethod(final TextView t) {
final MovementMethod m = t.getMovementMethod();
if ((m == null) || !(m instanceof LinkMovementMethod)) {
if (t.getLinksClickable()) {
t.setMovementMethod(LinkMovementMethod.getInstance());
}
}
}
boolean doMovementKey(int keyCode, KeyEvent event, int count) {
final ExtractEditText eet = getExtractEditTextIfVisible();
if (eet != null) {
// If we are in fullscreen mode, the cursor will move around
// the extract edit text, but should NOT cause focus to move
// to other fields.
MovementMethod movement = eet.getMovementMethod();
Layout layout = eet.getLayout();
if (movement != null && layout != null) {
// We want our own movement method to handle the key, so the
// cursor will properly move in our own word wrapping.
if (count == MOVEMENT_DOWN) {
if (movement.onKeyDown(eet, eet.getText(), keyCode, event)) {
reportExtractedMovement(keyCode, 1);
return true;
}
} else if (count == MOVEMENT_UP) {
if (movement.onKeyUp(eet, eet.getText(), keyCode, event)) {
return true;
}
} else {
if (movement.onKeyOther(eet, eet.getText(), event)) {
reportExtractedMovement(keyCode, count);
} else {
KeyEvent down = KeyEvent.changeAction(event, KeyEvent.ACTION_DOWN);
if (movement.onKeyDown(eet, eet.getText(), keyCode, down)) {
KeyEvent up = KeyEvent.changeAction(event, KeyEvent.ACTION_UP);
movement.onKeyUp(eet, eet.getText(), keyCode, up);
while (--count > 0) {
movement.onKeyDown(eet, eet.getText(), keyCode, down);
movement.onKeyUp(eet, eet.getText(), keyCode, up);
}
reportExtractedMovement(keyCode, count);
}
}
}
}
// Regardless of whether the movement method handled the key,
// we never allow DPAD navigation to the application.
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
return true;
}
}
return false;
}
/** @hide */
public void setMessageMovementMethod(MovementMethod movementMethod) {
mAlert.setMessageMovementMethod(movementMethod);
}
@Override
protected MovementMethod getDefaultMovementMethod() {
return ArrowKeyMovementMethod.getInstance();
}
public static MovementMethod getInstance() {
if (sInstance == null)
sInstance = new LinkMovementMethod2();
return sInstance;
}
@Override
protected MovementMethod getDefaultMovementMethod() {
return ArrowKeyMovementMethod.getInstance();
}
public static MovementMethod getInstance() {
if (sInstance == null) sInstance = new CountLinkMovementMethod();
return sInstance;
}
public static MovementMethod getInstance() {
if (sInstance == null)
sInstance = new MyLinkMovementMethod();
return sInstance;
}
@OnMount
static void onMount(
final ComponentContext c,
EditTextWithEventHandlers editText,
@Prop(optional = true, resType = ResType.STRING) CharSequence hint,
@Prop(optional = true, resType = ResType.DRAWABLE) Drawable inputBackground,
@Prop(optional = true, resType = ResType.DIMEN_OFFSET) float shadowRadius,
@Prop(optional = true, resType = ResType.DIMEN_OFFSET) float shadowDx,
@Prop(optional = true, resType = ResType.DIMEN_OFFSET) float shadowDy,
@Prop(optional = true, resType = ResType.COLOR) int shadowColor,
@Prop(optional = true) ColorStateList textColorStateList,
@Prop(optional = true) ColorStateList hintColorStateList,
@Prop(optional = true, resType = ResType.COLOR) Integer highlightColor,
@Prop(optional = true, resType = ResType.DIMEN_TEXT) int textSize,
@Prop(optional = true) Typeface typeface,
@Prop(optional = true) int textAlignment,
@Prop(optional = true) int gravity,
@Prop(optional = true) boolean editable,
@Prop(optional = true) int inputType,
@Prop(optional = true) int imeOptions,
@Prop(optional = true, varArg = "inputFilter") List<InputFilter> inputFilters,
@Prop(optional = true) boolean multiline,
@Prop(optional = true) int minLines,
@Prop(optional = true) int maxLines,
@Prop(optional = true) TextUtils.TruncateAt ellipsize,
@Prop(optional = true) int cursorDrawableRes,
@Prop(optional = true) MovementMethod movementMethod,
@Prop(optional = true, resType = ResType.STRING) CharSequence error,
@Prop(optional = true, resType = ResType.DRAWABLE) Drawable errorDrawable,
@State AtomicReference<CharSequence> savedText,
@State AtomicReference<EditTextWithEventHandlers> mountedView) {
mountedView.set(editText);
setParams(
editText,
hint,
getBackgroundOrDefault(c, inputBackground),
shadowRadius,
shadowDx,
shadowDy,
shadowColor,
textColorStateList,
hintColorStateList,
highlightColor,
textSize,
typeface,
textAlignment,
gravity,
editable,
inputType,
imeOptions,
inputFilters,
multiline,
ellipsize,
minLines,
maxLines,
cursorDrawableRes,
movementMethod,
// onMount happens:
// 1. After initState: savedText = initText.
// 2. After onUnmount: savedText preserved from underlying editText.
savedText.get(),
error,
errorDrawable);
editText.setTextState(savedText);
}
public void setMovementMethod(MovementMethod movementMethod) {
this.mMovementMethod = movementMethod;
}
public void setMovementMethod(MovementMethod movementMethod) {
mLinkMovementMethod = movementMethod;
refresh();
}
@NonNull
public static MovementMethodPlugin create(@NonNull MovementMethod movementMethod) {
return new MovementMethodPlugin(movementMethod);
}
@SuppressWarnings("WeakerAccess")
MovementMethodPlugin(@NonNull MovementMethod movementMethod) {
this.movementMethod = movementMethod;
}
@Override
protected MovementMethod getDefaultMovementMethod() {
return ArrowKeyMovementMethod.getInstance();
}
public static MovementMethod getInstance() {
if (sInstance == null)
sInstance = new LongClickLinkMovementMethod();
return sInstance;
}
public static MovementMethod getInstance() {
if (sInstance == null)
sInstance = new LinkMovementMethod();
return sInstance;
}
@Override
protected MovementMethod getDefaultMovementMethod() {
return DefaultMovementMethod.getInstance();
}