/*
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.text.style;

import android.annotation.NonNull;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Parcel;
import android.provider.Browser;
import android.text.ParcelableSpan;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;

Implementation of the ClickableSpan that allows setting a url string. When selecting and clicking on the text to which the span is attached, the URLSpan will try to open the url, by launching an an Activity with an Intent.ACTION_VIEW intent.

For example, a URLSpan can be used like this:

SpannableString string = new SpannableString("Text with a url span");
string.setSpan(new URLSpan("http://www.developer.android.com"), 12, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
Text with URLSpan.
/** * Implementation of the {@link ClickableSpan} that allows setting a url string. When * selecting and clicking on the text to which the span is attached, the <code>URLSpan</code> * will try to open the url, by launching an an Activity with an {@link Intent#ACTION_VIEW} intent. * <p> * For example, a <code>URLSpan</code> can be used like this: * <pre> * SpannableString string = new SpannableString("Text with a url span"); * string.setSpan(new URLSpan("http://www.developer.android.com"), 12, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); * </pre> * <img src="{@docRoot}reference/android/images/text/style/urlspan.png" /> * <figcaption>Text with <code>URLSpan</code>.</figcaption> */
public class URLSpan extends ClickableSpan implements ParcelableSpan { private final String mURL;
Constructs a URLSpan from a url string.
Params:
  • url – the url string
/** * Constructs a {@link URLSpan} from a url string. * * @param url the url string */
public URLSpan(String url) { mURL = url; }
Constructs a URLSpan from a parcel.
/** * Constructs a {@link URLSpan} from a parcel. */
public URLSpan(@NonNull Parcel src) { mURL = src.readString(); } @Override public int getSpanTypeId() { return getSpanTypeIdInternal(); }
@hide
/** @hide */
@Override public int getSpanTypeIdInternal() { return TextUtils.URL_SPAN; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { writeToParcelInternal(dest, flags); }
@hide
/** @hide */
@Override public void writeToParcelInternal(@NonNull Parcel dest, int flags) { dest.writeString(mURL); }
Get the url string for this span.
Returns:the url string.
/** * Get the url string for this span. * * @return the url string. */
public String getURL() { return mURL; } @Override public void onClick(View widget) { Uri uri = Uri.parse(getURL()); Context context = widget.getContext(); Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); try { context.startActivity(intent); } catch (ActivityNotFoundException e) { Log.w("URLSpan", "Actvity was not found for intent, " + intent.toString()); } } }