欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android開發(fā)技巧之在a標簽或TextView控件中單擊鏈接彈出Activity(自定義動作)

 更新時間:2013年01月22日 10:38:39   作者:  
a標簽以及TextView自動識別的特殊文本(網(wǎng)址、電話號、Email等),這些都可以通過單擊來觸發(fā)不同的動作;但如果讀者想在單擊鏈接時執(zhí)行任意自定義的動作,那么將要介紹的一定是你想要的了
在5.2.1節(jié)和5.2.2節(jié)介紹了<a>標簽以及TextView自動識別的特殊文本(網(wǎng)址、電話號、Email等),這些都可以通過單擊來觸發(fā)不同的動作。雖然這些單擊動作已經(jīng)可以滿足大多數(shù)需要了,但如果讀者想在單擊鏈接時執(zhí)行任意自定義的動作,那么本節(jié)的內(nèi)容非看不可。

現(xiàn)在讓我們使用5.2.1節(jié)介紹的方法重新查看Html.java文件的內(nèi)容,隨便找一個處理Html標簽的方法,例
如,endA方法。該方法用于處理</a>標簽。我們會發(fā)現(xiàn)在該方法中如下的語句。

text.setSpan(newURLSpan(h.mHref),where,len,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
其中text是SpannableStringBuilder對象,該對象即可以修改文本內(nèi)容,又可以將某段文本設置成一個Span,在Android中,Span表示一段文本的效果,例如,鏈接形式、圖像、帶背景色的文本等。

上面代碼中使用setSpan方法將某個區(qū)間(由where和len指定的區(qū)間)的文本設置成URLSpan效果,也就是鏈接顯示效果。其中URLSpan表示將文本設置成鏈接效果,該類是ClickableSpan的子類,在android.text.style包中可以找到URLSpan和ClickableSpan類。實際上,所有的Span類都在android.text.style包中。
我們再按著查看Html.java文件內(nèi)容的方法查看URLSpan.java文件的內(nèi)容,會看到一個onClick方法,代碼如下:
復制代碼 代碼如下:

//覆蓋ClickableSpan類中的onClick方法,onClick方法在ClickableSpan類中是抽象方法
@Override
publicvoidonClick(Viewwidget){
Uriuri=Uri.parse(getURL());
Contextcontext=widget.getContext();
Intentintent=newIntent(Intent.ACTION_VIEW,uri);
intent.putExtra(Browser.EXTRA_APPLICATION_ID,context.getPackageName());
context.startActivity(intent);
}

在onClick方法中獲得了<a>標簽的href屬性設置的URL,并調(diào)用相應的Activity來顯示網(wǎng)頁。

從onClick方法的源代碼以及ClickableSpan類的名字可以得出一個結(jié)論。在5.2.1節(jié)和5.2.2節(jié)介紹的像電話、Email、網(wǎng)址、鏈接都是在ClickableSpan類的onClick方法中通過Action調(diào)用相應的Activity來顯示不同的內(nèi)容的。那么我們也可以采用類似的方法,也就是自己來實現(xiàn)onClick方法,這樣就可以達到自定義單擊動作的目的了。

說做就做,先準備兩個TextView控件。在本例中我們使用SpannableString對象來設置Span,SpannableString和SpannableStringBuilder的區(qū)別是SpannableString不允許修改文本,只允許設置Span,而SpannableStringBuilder即允許修改文本,也允許設置Span。

下面的代碼采用了隱式創(chuàng)建ClickableSpan對象實例的方法來設置Span,并在其中覆蓋了onClick方法。
復制代碼 代碼如下:

packagemobile.android.ch05.link.activity;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.text.SpannableString;
importandroid.text.Spanned;
importandroid.text.method.LinkMovementMethod;
importandroid.text.style.ClickableSpan;
importandroid.view.View;
importandroid.widget.TextView;
publicclassMainextendsActivity
{
@Override
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextViewtextView1=(TextView)findViewById(R.id.textview1);
TextViewtextView2=(TextView)findViewById(R.id.textview2);
Stringtext1="顯示Activity1";
Stringtext2="顯示Activity2";
//將文本轉(zhuǎn)換成SpannableString對象
SpannableStringspannableString1=newSpannableString(text1);
SpannableStringspannableString2=newSpannableString(text2);
//將text1中的所有文本設置成ClickableSpan對象,并實現(xiàn)了onClick方法
spannableString1.setSpan(newClickableSpan()
{
//在onClick方法中可以編寫單擊鏈接時要執(zhí)行的動作
@Override
publicvoidonClick(Viewwidget)
{
Intentintent=newIntent(Main.this,Activity1.class);
//顯示Activity1
startActivity(intent);
}
},0,text1.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//將text2中的所有文本設置成ClickableSpan對象,并實現(xiàn)了onClick方法
spannableString2.setSpan(newClickableSpan()
{
//在onClick方法中可以編寫單擊鏈接時要執(zhí)行的動作
@Override
publicvoidonClick(Viewwidget)
{
Intentintent=newIntent(Main.this,Activity2.class);
//顯示Activity2
startActivity(intent);
}
},0,text1.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//使用SpannableString對象設置兩個TextView控件的內(nèi)容
textView1.setText(spannableString1);
textView2.setText(spannableString2);
//在單擊鏈接時凡是有要執(zhí)行的動作,都必須設置MovementMethod對象
textView1.setMovementMethod(LinkMovementMethod.getInstance());
textView2.setMovementMethod(LinkMovementMethod.getInstance());
}
}

現(xiàn)在我們來看一下setSpan方法,該方法有4個參數(shù)。第一個參數(shù)需要設置一個ClicableSpan對象,第二個和第三個參數(shù)分別表示文本中要設置成Span的某段文本的起始位置和終止位置的下一個字符的位置,也就是start和end。最后一個參數(shù)是一個標志。在本例中設為Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,該標志在TextView控件中意義不大,但在EditText控件中表示在當前Span效果的前后輸入字符時并不應用Span的效果。還可以設置如下幾個類似的值。
1.Spanned.SPAN_EXCLUSIVE_INCLUSIVE:在Span前面輸入的字符不應用Span的效果,在后面輸入的字符應用Span效果。
2.Spanned.SPAN_INCLUSIVE_EXCLUSIVE:在Span前面輸入的字符應用Span的效果,在后面輸入的字符不應用Span效果。
3.Spanned.SPAN_INCLUSIVE_INCLUSIVE:在Span前后輸入的字符都應用Span的效果。
本例的顯示效果如圖5.5所示。單擊屏幕上的兩個鏈接后,就會分別顯示Activity1和Activity2的界面。

相關(guān)文章

  • Android HTTP發(fā)送請求和接收響應的實例代碼

    Android HTTP發(fā)送請求和接收響應的實例代碼

    Android HTTP請求和接收響應實例完整的Manifest文件如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-06-06
  • Android 清除SharedPreferences 產(chǎn)生的數(shù)據(jù)(實例代碼)

    Android 清除SharedPreferences 產(chǎn)生的數(shù)據(jù)(實例代碼)

    項目是要保存上次文件播放的位置,我使用SharedPreferences來保存,鍵值對分別是文件路徑和當時播放的位置
    2013-11-11
  • Android 應用適配 Android 7.0 權(quán)限要求詳解

    Android 應用適配 Android 7.0 權(quán)限要求詳解

    今天小編就為大家分享一篇Android 應用適配 Android 7.0 權(quán)限要求詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Android全面屏適配方法詳解

    Android全面屏適配方法詳解

    Apple一直在引領設計的潮流,自從 iPhone X 發(fā)布之后,各種異形屏、劉海屏也都出來,下面這篇文章主要給大家分享介紹了關(guān)于Android全面屏與異形(劉海)屏的適配教程,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Android實現(xiàn)EditText輸入金額

    Android實現(xiàn)EditText輸入金額

    EditText是Android中一個非常實用的控件,有很多InputType,可以來達到不同的輸入效果,下面通過實例代碼給大家解析android實現(xiàn)edittext輸入金額,需要的朋友參考下吧
    2016-12-12
  • 關(guān)于Android輸入法彈窗bug的優(yōu)雅處理

    關(guān)于Android輸入法彈窗bug的優(yōu)雅處理

    在Android應用中,當跳轉(zhuǎn)到某個Activity時,該Activity顯示頁面的EditText獲得焦點,在某些機器中會觸發(fā)軟鍵盤的自動彈出,這篇文章主要給大家介紹了關(guān)于Android輸入法彈窗bug的優(yōu)雅處理,需要的朋友可以參考下
    2021-10-10
  • 用Android?studio實現(xiàn)簡易計算器功能

    用Android?studio實現(xiàn)簡易計算器功能

    這篇文章主要為大家詳細介紹了用Android?studio實現(xiàn)簡易計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android編程實現(xiàn)帶有圖標的ListView并帶有長按菜單效果示例

    Android編程實現(xiàn)帶有圖標的ListView并帶有長按菜單效果示例

    這篇文章主要介紹了Android編程實現(xiàn)帶有圖標的ListView并帶有長按菜單效果,結(jié)合實例形式分析了Android帶圖標的ListView及菜單功能相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • 智能指針與弱引用詳解

    智能指針與弱引用詳解

    智能指針有很多實現(xiàn)方式,android 中的sp 句柄類實際上就是google 實現(xiàn)的一種強引用的智能指針。我沒有仔細看android sp 的實現(xiàn)方式,但其基本原理是固定的,現(xiàn)在我們從一個相對簡單的例子來看智能指針的實現(xiàn)
    2013-09-09
  • Android環(huán)形進度條(安卓默認形式)實例代碼

    Android環(huán)形進度條(安卓默認形式)實例代碼

    這篇文章主要介紹了Android環(huán)形進度條(安卓默認形式)實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-03-03

最新評論