復(fù)制 EditText 文本導(dǎo)致的崩潰:PARAGRAPH span must end at paragraph boundary

問題現(xiàn)象
復(fù)制 WebView 的文本(其實(shí)重點(diǎn)是多個(gè)段落) -> 粘貼 到輸入框儿倒;
嘗試復(fù)制輸入框里面的文本(全選版保、復(fù)制)呜笑,應(yīng)用拋出異常:

2018-11-01 11:18:29.519 21987-21987/xxx.xxx.xx E/MtaSDK.CaughtExp: java.lang.RuntimeException: PARAGRAPH span must end at paragraph boundary (62 follows  )
        at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:171)
        at android.text.SpannableStringInternal.copySpans(SpannableStringInternal.java:68)
        at android.text.SpannableStringInternal.<init>(SpannableStringInternal.java:43)
        at android.text.SpannedString.<init>(SpannedString.java:30)
        at android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence.subSequence(ReplacementTransformationMethod.java:180)
        at android.widget.TextView.getTransformedText(TextView.java:9529)
        at android.widget.TextView.onTextContextMenuItem(TextView.java:9484)
        at android.widget.Editor$TextActionModeCallback.onActionItemClicked(Editor.java:4031)
        at com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onActionItemClicked(DecorView.java:2393)
        at com.android.internal.view.FloatingActionMode$3.onMenuItemSelected(FloatingActionMode.java:88)
        at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
        at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
        at com.android.internal.view.FloatingActionMode$4.onMenuItemClick(FloatingActionMode.java:114)
        at com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$3.onClick(FloatingToolbar.java:398)
        at android.view.View.performClick(View.java:5642)
        at android.view.View$PerformClick.run(View.java:22485)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6211)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:793)

其實(shí)我覺得跟應(yīng)用沒關(guān)系,奈何有的手機(jī)有問題彻犁,有的沒有問題叫胁。而且分析了一下,只要文本跨段落汞幢,就會(huì)有問題驼鹅,所以還是嘗試著解決。

問題原因:其實(shí)網(wǎng)上有介紹森篷,就是文本包含段落输钩,但是不是以換行結(jié)尾。
我 debug 的時(shí)候發(fā)現(xiàn)仲智,如果輸入框設(shè)置了單行輸入买乃,復(fù)制段落到 TextEdit 里面的時(shí)候,文本會(huì)保留 "\n"钓辆,只不過顯示的時(shí)候系統(tǒng)做了處理剪验。參見“SingleLineTransformationMethod”。

解決方法:既然是文本包含 "\n" 的原因前联,那就想辦法把 "\n" 替換掉吧功戚。
我的辦法是給 EditText 增加一個(gè) InputFilter ,替換掉 "\n"似嗤。

在調(diào)用過 super 的構(gòu)造方法后添加啸臀。因?yàn)?TextView 會(huì)根據(jù) XML 里面的 maxLength 添加一個(gè) InputFilter.LengthFilter(maxlength),不能覆蓋掉双谆。

    private void addReplaceEndOfLineFilter() {
        InputFilter replaceEndOfLineFilter = new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                if (source == null) {
                    return null;
                }
                source = source.toString().replaceAll("\n", " ");
                return source;
            }
        };

        InputFilter[] filters = getFilters();
        List<InputFilter> filtersList = new ArrayList<>();
        if (filters != null) {
            filtersList.addAll(Arrays.asList(filters));
        }
        filtersList.add(replaceEndOfLineFilter);
        setFilters(filtersList.toArray(filters));
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壳咕,一起剝皮案震驚了整個(gè)濱河市席揽,隨后出現(xiàn)的幾起案子顽馋,更是在濱河造成了極大的恐慌,老刑警劉巖幌羞,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寸谜,死亡現(xiàn)場離奇詭異,居然都是意外死亡属桦,警方通過查閱死者的電腦和手機(jī)熊痴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聂宾,“玉大人果善,你說我怎么就攤上這事∠敌常” “怎么了巾陕?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵讨跟,是天一觀的道長。 經(jīng)常有香客問我鄙煤,道長晾匠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任梯刚,我火速辦了婚禮凉馆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亡资。我一直安慰自己澜共,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布锥腻。 她就那樣靜靜地躺著咳胃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旷太。 梳的紋絲不亂的頭發(fā)上展懈,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音供璧,去河邊找鬼存崖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛睡毒,可吹牛的內(nèi)容都是我干的来惧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼演顾,長吁一口氣:“原來是場噩夢啊……” “哼供搀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钠至,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤葛虐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后棉钧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屿脐,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年宪卿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了的诵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佑钾,死狀恐怖西疤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情休溶,我是刑警寧澤代赁,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布撒遣,位于F島的核電站,受9級(jí)特大地震影響管跺,放射性物質(zhì)發(fā)生泄漏义黎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一豁跑、第九天 我趴在偏房一處隱蔽的房頂上張望廉涕。 院中可真熱鬧,春花似錦艇拍、人聲如沸狐蜕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽层释。三九已至,卻和暖如春快集,著一層夾襖步出監(jiān)牢的瞬間贡羔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工个初, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乖寒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓院溺,卻偏偏與公主長得像楣嘁,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子珍逸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354