當前位置:首頁 » 安卓系統 » androidspan

androidspan

發布時間: 2022-07-05 18:04:57

Ⅰ android textview 中取詞,如何除標點符號 ClickableSpan

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,20);textView.setText(Html.fromHtml(str));答題不易,互相理解,您的採納是我前進的動力,您也可以向我們團隊發出請求,會有更專業的人來為您解答。

Ⅱ android 這個<span style="font-size: 14px;"></span>能寫在類中嗎求詳解。

絕對不能寫在類中,<span>是html中的一個標簽,.java文件中確實是可以寫的,但是絕對不是上面那樣寫的,只能寫在javaDoc註解部分對一些信息設置提醒比如以下方式,生成javaDoc後就會有不同的效果。

/**
* <span style="font-size:14px" >更新實體</span>
*
* @param entity
* 實體
* @return 成功true,失敗false
*/
public boolean update(T entity) throws CoreException;

Ⅲ android 這個錯誤大概什麼意思 SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

editView1中text長度不能為零?

這個是EditText么?
不行就你不給它設置唄,或者 扔個「 」長度為1的空串

Ⅳ 在android開發中,如何去除所有EditText中用setSpan()添加的文字顏色高亮

在開放的api里,沒有setSpan()這個方法來設置文字的高亮。不知道是不是你自定義的。我覺得所謂的高亮,應該就是顏色的設置而已。能否把xml中對EditText的定義和代碼中對EditText的設置的代碼貼出來看看?

Ⅳ 如何實現一個 Android 端的富文本編輯器組件

在 Android 上實現富文本編輯器的思路大致分為三種:
使用多種 Layout 布局,每一種布局對應一種 HTML 格式,比如圖片,比如順序列表等。具體的實現例子可以參考這個鏈接。 Medium 和
Evernote 的富文本編輯就是採用這種方式實現的。總體來說比較復雜。
WebView + JavaScript 實現。現在 Web 端有很多成熟的 JavaScript 富文本編輯庫,比如 Squire ,你只需要做好
WebView 和 JavaScript 的交互就可以了(多寫回調函數)。理論上雖然是這么說,但是在實現過程你需要解決 WebView 的兼容性問題(
Android 4.4 及其以上版本和 4.4 以下版本的 WebView 內核不一樣),以及其他一些不可預見的問題(比如就遇到無法粘貼文字的問題)。
EditText + Span 。 Android 的 TextView 原生支持諸如粗體、刪除線、引用等 Span
,要實現簡單的富文本編輯需求,可操作性還是比較大的。綜合再三,選擇了這種方式來實現自己的需求。
既然決定使用 EditText + Span 的方式來實現,必然要對相關的 API 有所了解。
首先來了解一下 Span 。Span 是一個強大的概念,有興趣深入的同學推薦直接閱讀這篇譯文。
在這里主要使用兩種類型的 Span :
繼承自 CharacterStyle 的 Span ,比如 StyleSpan ,可以在字元級別上添加粗體,下劃線等。
繼承自 ParagraphStyle 的 Span ,比如 QuoteSpan ,可以為段落級別的文本添加引用。
接著需要一個可以將 Span 的效果設置進去的文本結構(即實現了 Spannable 介面), SpannableStringBuilder
是個不錯的選擇,同時 EditText 提供的 getEditableText() 方法也可以獲得。通常只需要 getEditableText()
就可以了,但是在面對一些細節部分,可以使用 SpannableStringBuilder 預先設置相應的 Span ,再替換到原來的文本中。
設置 Span 的方式也很簡單,需要調用 Spannable.setSpan(Object what, int start, int end, int
flags) 這個方法即可,方法中 4 個參數的解釋如下:
Object what ,傳入你使用的 Span 對象。
int start ,設置 Span 的開始位置。
int end ,設置 Span 的結束位置。
int flags ,代表設置 Span 的作用域。
在這里重點介紹一下 int flags 這個參數,它接受 4 種類型的參數,分別是:
Spanned.SPAN_INCLUSIVE_EXCLUSIVE ,表示你在設置 Span 的區域之前輸入文字,輸入的文字也會受到 Span
的影響。
Spanned.SPAN_INCLUSIVE_INCLUSIVE ,表示你在設置 Span 的區域前後輸入文字,輸入的文字都後受到 Span
的影響。
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ,表示你在設置 Span 的區域中出輸入文字,輸入的文字才會受到 Span
的影響。
Spanned.SPAN_EXCLUSIVE_INCLUSIVE ,表示你在設置 Span 的區域之後輸入文字,輸入的文字也會受到 Span
的影響。
「受到影響」的意思就是,仍然會保持你設置的 Span 的樣式,比如選擇Spanned.SPAN_EXCLUSIVE_INCLUSIVE
設置了一段文字的粗體,那麼在這段文字後新輸入的文字,也會是粗體。在這里推薦使用Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
參數,畢竟其他幾種參數相對不是很好控制,而且會給使用的人帶來的疑惑。認為一個操作代表的行為應當是准確沒有歧義的。
好,到這里已經知道大致怎麼作出一個富文本編輯器組件的樣子了,無非是指定開始位置和結束位置,再設置相應的 Span
即可。至於設置的時候採取什麼樣的規則,你可以自己定製。但僅僅解決了編輯的問題,仍然存在導入的問題和導出的問題。
導入的問題十分簡單, Android SDK 中提供了 Html.fromHtml() 這個方法,可以很輕松地將 HTML 字元串轉換為所需的
Spanned 對象。但是需要注意的是, Html.fromHtml() 並不支持所有的 HTML 標簽,比如無序列表就不支持,因此你需要自己實現
Html.TagHandler 介面來處理自己所需的標簽,可以參考這個鏈接,實現了刪除線和簡單無序列表的支持。
面對粗體、斜體這樣字元級別的樣式, Html.fromHtml()
會自然而然的解析,該添加換行的地方就添加換行,並沒有什麼問題;但是面對引用、無序列表這樣段落級別的樣式,該方法會追加一個換行,也就是兩個換行操作,相當於多出一個空行。通常來說認為一個
對應兩個
,但是如果你有特別需求的話,也可以通過前面說的那樣,自己來解析,而不是用系統默認的方式。
之前介紹了如何導入,想必你也十分清楚,必然有一個對應的Html.toHtml() 方法!沒錯,但是遺憾的是,這個方法也不全支持所有 Span
,比如列表就不支持。不過沒有關系, Html.toHtml() 這個方法本身的源碼簡潔易懂,可以參考著實現。
在這里重點說明 Spannanle 的一個介面方法 nextSpanTransition(int start, int limit, Class
type) ,這個方法會在你指定的文本范圍內,返回下一個你指定的 Span 類型的開始位置,依照這個方法,就可以逐層掃描指定的 Span
,而不用同時考慮其他類型的 Span 的影響,十分有用。
最後盡管說了這么多,導入導出還是有一個比較關鍵的問題,即導入的內容和導出的內容要保持一致,在這點上目前我還比較難以實現,只能說盡量控制吧,必要的時候還需要使用一下正則來處理導入導出的文本。

Ⅵ android中的spanned有什麼用

String對象轉Stringbuilder String a = "abc"; Stringbuilder ab = new Stringbuilder(a); Stringbuilder 轉 String Stringbuilder ab = new Stringbuilder(「123123123」); String a = ab.toString();

Ⅶ android 中實現網頁調用攝像頭功能怎麼實現

頁面上做一個按鈕,如打開攝像頭,它做的事情就是將頁面鏈接到一個特殊的串,如<a href=opencapture打開攝像頭</a使用安卓的webview訪問網頁頁面,同時重寫shouldOverrideUrlLoading捕獲url,當判斷url為opencapture時,調用系統攝像頭

Ⅷ android accessibilityservice 服務問題

利用Android輔助工具類AccessibilityService可以獲取手機當前頁面的信息,用戶的操作事件等等.首先新建一個類繼承AccessibilityService:[html] view plain

  • <spanstyle="font-family:TimesNewRoman;font-size:14px;">{

  • privatefinalStringTAG="MyAccessibilityService";

  • @Override

  • (AccessibilityEventevent){

  • inteventType=event.getEventType();

  • StringeventTypeName="";

  • switch(eventType){

  • caseAccessibilityEvent.TYPE_VIEW_CLICKED:

  • eventTypeName="TYPE_VIEW_CLICKED";

  • break;

  • caseAccessibilityEvent.TYPE_VIEW_FOCUSED:

  • eventTypeName="TYPE_VIEW_FOCUSED";

  • break;

  • caseAccessibilityEvent.TYPE_VIEW_LONG_CLICKED:

  • eventTypeName="TYPE_VIEW_LONG_CLICKED";

  • break;

  • caseAccessibilityEvent.TYPE_VIEW_SELECTED:

  • eventTypeName="TYPE_VIEW_SELECTED";

  • break;

  • caseAccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:

  • eventTypeName="TYPE_VIEW_TEXT_CHANGED";

  • break;

  • caseAccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:

  • eventTypeName="TYPE_WINDOW_STATE_CHANGED";

  • break;

  • caseAccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:

  • eventTypeName="TYPE_NOTIFICATION_STATE_CHANGED";

  • break;

  • caseAccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END:

  • eventTypeName="TYPE_TOUCH_EXPLORATION_GESTURE_END";

  • break;

  • caseAccessibilityEvent.TYPE_ANNOUNCEMENT:

  • eventTypeName="TYPE_ANNOUNCEMENT";

  • break;

  • caseAccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START:

  • eventTypeName="TYPE_TOUCH_EXPLORATION_GESTURE_START";

  • break;

  • caseAccessibilityEvent.TYPE_VIEW_HOVER_ENTER:

  • eventTypeName="TYPE_VIEW_HOVER_ENTER";

  • break;

  • caseAccessibilityEvent.TYPE_VIEW_HOVER_EXIT:

  • eventTypeName="TYPE_VIEW_HOVER_EXIT";

  • break;

  • caseAccessibilityEvent.TYPE_VIEW_SCROLLED:

  • eventTypeName="TYPE_VIEW_SCROLLED";

  • break;

  • caseAccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED:

  • eventTypeName="TYPE_VIEW_TEXT_SELECTION_CHANGED";

  • break;

  • caseAccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:

  • eventTypeName="TYPE_WINDOW_CONTENT_CHANGED";

  • break;

  • }

  • Log.i(TAG,"eventType:"+eventType);

  • Log.i(TAG,"eventTypeName:"+eventTypeName);

  • }

  • @Override

  • publicvoidonInterrupt(){

  • //TODOAuto-generatedmethodstub

  • }

  • }</span>

  • 然後新建一個xml配置文件來配置我們的MyAccessibility類:
  • accessibilityservice.xml :

    [html] view plain

  • <spanstyle="font-family:TimesNewRoman;font-size:14px;"><?xmlversion="1.0"encoding="utf-8"?>

  • <accessibility-servicexmlns:android="http://schemas.android.com/apk/res/android"

  • android:accessibilityEventTypes="typeAllMask"

  • android:accessibilityFeedbackType="feedbackGeneric"

  • android:accessibilityFlags="flagDefault"

  • android:canRetrieveWindowContent="true"

  • android:description="@string/app_name"

  • android:settingsActivity="com.example.xxx.android.accessibility.ServiceSettingsActivity"/></span>

  • android:accessibilityEventTypes="typeAllMask",相應所有的事件,就是MyAccessibility類中swich中的那些事件.
  • android:accessibilityFeedbackType="feedbackGeneric",手機用什麼方式將信息反饋給用戶,語音震動等等,這里默認;

    android:canRetrieveWindowContent="true",允許獲取手機頁面中的信息

    android:settingsActivity中com.example.xxx是你的應用的包名

    然後將這個xml配置文件配置到項目中:

    [html] view plain

  • <spanstyle="font-family:TimesNewRoman;font-size:14px;"><service

  • android:name="com.example.xxx.MyAccessibilityService"

  • android:enabled="true"

  • android:exported="true"

  • android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">

  • <intent-filter>

  • <actionandroid:name="android.accessibilityservice.AccessibilityService"/>

  • </intent-filter>

  • <meta-data

  • android:name="android.accessibilityservice"

  • android:resource="@xml/accessibilityservice"/>

  • </service></span>

  • 然後在我們手機的設置中的輔助功能里,打開這個輔助服務就可以了.
  • 利用這個類我們可以獲取當前手機頁面的信息,包括控制項ID,控制項值;當前類的名稱以及用戶的一些操作和手機狀態的變化. 所以利用這些可以做手機自動安裝軟體,模擬點擊,手機自動滑屏等.

    public void onAccessibilityEvent(AccessibilityEvent event){}

    通過這個event我們可以得到:

    event.getEventType()-當前事件的類型; event.getClassName()-當前類的名稱; event.getSource()-當前頁面中的節點信息,等等.更詳細信查看官方API

    遍歷獲取窗口中所有的節點信息也可以用這個方法:

    [html] view plain

  • <spanstyle="font-family:TimesNewRoman;font-size:14px;">publicvoidgetInfo(){

  • AccessibilityNodeInfoinfo=getRootInActiveWindow();

  • if(info!=null){

  • if(info.getChildCount()==0){

  • Log.i(TAG,"控制項名稱:"+info.getClassName());

  • Log.i(TAG,"控制項中的值:"+info.getText());

  • Log.i(TAG,"控制項的ID:"+info.getViewIdResourceName());

  • Log.i(TAG,"點擊是否出現彈窗:"+info.canOpenPopup());

  • }else{

  • for(inti=0;i<info.getChildCount();i++){

  • if(info.getChild(i)!=null){

  • recycle(info.getChild(i));

  • }

  • }

  • }

  • }

  • }</span>

  • 不過這個方法對當前的SDK版本有一定的要求,需要API level19及以上.

Ⅸ android EditText ClickableSpan響應事件問題

Android系統通過SpannableString類來對指定文本進行相關處理,具體有以下功能: 1、BackgroundColorSpan 背景色 2、ClickableSpan 文本可點擊,有點擊事.

熱點內容
杭州地鐵wifi密碼是多少 發布:2024-04-26 21:32:45 瀏覽:319
重裝系統源碼 發布:2024-04-26 21:32:44 瀏覽:274
國外大叔解壓視頻 發布:2024-04-26 20:44:00 瀏覽:227
存儲念第幾音 發布:2024-04-26 20:33:35 瀏覽:250
衡陽dns的伺服器地址是多少 發布:2024-04-26 20:32:26 瀏覽:269
我的世界空島伺服器青金石 發布:2024-04-26 20:18:03 瀏覽:650
微信小程序演算法 發布:2024-04-26 20:03:36 瀏覽:975
易語言模板不能靜態編譯 發布:2024-04-26 19:59:02 瀏覽:353
sql注釋語句 發布:2024-04-26 19:58:48 瀏覽:654
sql存儲過程out 發布:2024-04-26 19:33:15 瀏覽:415