其實(shí)你不懂:Android之Spanned flag

年前的這幾天幢尚,一直在看代碼,發(fā)現(xiàn)自己之前對很多技術(shù)點(diǎn)的理解都不全面蕉鸳,甚至根本就是想當(dāng)然乎赴。所以有這樣一個想法,要把之前理解很粗淺的東西慢慢整理一遍潮尝,補(bǔ)一下技術(shù)上的短板榕吼。

這個過程會比較長,準(zhǔn)備把涉及到的不同技術(shù)點(diǎn)寫一個系列文章衍锚,系列名字嘛友题,就直白點(diǎn):其實(shí)你不懂,是不是很直白O(∩_∩)O~

其實(shí)你不懂:Android之Spanned flag就作為'其實(shí)你不懂'系列的開篇戴质!

1:Spanned flag都有哪些可選值

  • SPAN_POINT_MARK_MASK
  • SPAN_MARK_MARK
  • SPAN_MARK_POINT
  • SPAN_POINT_MARK
  • SPAN_POINT_POINT
  • SPAN_PARAGRAPH
  • SPAN_PARAGRAPH
  • SPAN_INCLUSIVE_EXCLUSIVE(常用)
  • SPAN_INCLUSIVE_INCLUSIVE(常用)
  • SPAN_EXCLUSIVE_EXCLUSIVE(常用)
  • SPAN_EXCLUSIVE_INCLUSIVE(常用)
  • SPAN_COMPOSING
  • SPAN_INTERMEDIATE
  • SPAN_USER_SHIFT
  • SPAN_USER
  • SPAN_PRIORITY_SHIFT
  • SPAN_PRIORITY

2:Spanned flag常用值的效果

  • SPAN_INCLUSIVE_INCLUSIVE
    • 前后都包括度宦,在指定范圍前后插入新字符,都會應(yīng)用新樣式
  • SPAN_EXCLUSIVE_EXCLUSIVE
    • 前后都不包括告匠,在指定范圍前后插入新字符戈抄,樣式無變化
  • SPAN_INCLUSIVE_EXCLUSIVE
    • 前面包括,后面不包括
  • SPAN_EXCLUSIVE_INCLUSIVE
    • 后面包括后专,前面不包括

3:不同的值flag划鸽,當(dāng)EditText文本內(nèi)容發(fā)生改變,表現(xiàn)有何區(qū)別戚哎?(不包含SPAN_POINT_MARK_MASK裸诽,SPAN_PARAGRAPH)

實(shí)驗(yàn)初始設(shè)置:不同的EditText初始的文本都是"一二三四五六七八九十"構(gòu)造的SpannableString,都使用相同的AbsoluteSizeSpan型凳,F(xiàn)oregroundColorSpan實(shí)例設(shè)置文本樣式丈冬,區(qū)別只在于flag的值。

//設(shè)置初始內(nèi)容
String str = "一二三四五六七八九十";
//1:構(gòu)造SpannableString實(shí)例
SpannableString spannableStringEE = new SpannableString(str);
SpannableString spannableStringII = new SpannableString(str);
SpannableString spannableStringEI = new SpannableString(str);
SpannableString spannableStringIE = new SpannableString(str);
//2:構(gòu)造指定類型的Span,這里使用AbsoluteSizeSpan,ForegroundColorSpan
AbsoluteSizeSpan sizeSpan = new AbsoluteSizeSpan(24,true);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED);
//3:將構(gòu)造的AbsoluteSizeSpan實(shí)例,ForegroundColorSpan實(shí)例應(yīng)用于SpannableString實(shí)例甘畅,只有 flags 有區(qū)別
不同的EditText實(shí)例埂蕊,初始內(nèi)容如下:
原始1.png

原始2.png
3.1:向EditText中繼續(xù)插入文字:
插入文字1.png

插入文字2.png
通過圖片可以得到結(jié)論,單純插入文字:

SPAN_POINT_MARK 作用等同于 SPAN_INCLUSIVE_INCLUSIVE疏唾;
SPAN_POINT_MARK 作用等同于 SPAN_EXCLUSIVE_EXCLUSIVE蓄氧;
SPAN_POINT_POINT 作用等同于 SPAN_EXCLUSIVE_INCLUSIVE;
SPAN_COMPOSING 關(guān)聯(lián)的EditText中所有內(nèi)容都失去新樣式槐脏;
其余flag值作用等同于 SPAN_INCLUSIVE_EXCLUSIVE喉童;

3.2:將EditText中內(nèi)容完全刪除后重新輸入:
完全刪除后重新輸入.png

完全刪除后重新輸入.gif

看GIF動圖可能表述的更清晰。

通過圖片可以得到結(jié)論顿天,內(nèi)容完全刪除后重新輸入:

SPAN_POINT_MARK 和 SPAN_INCLUSIVE_INCLUSIVE 關(guān)聯(lián)的EditText中所有內(nèi)容都會保持新樣式泄朴;
其余所有的flag值重抖,都會失去新樣式;

3.3:按照EditText中新樣式的起止值祖灰,進(jìn)行文字替換:
按照原始的起止位置進(jìn)行文字不等長替換.png

按照原始的起止位置進(jìn)行文字不等長替換.gif
通過圖片可以得到結(jié)論钟沛,按照EditText中新樣式的起止值,進(jìn)行文字替換:

SPAN_COMPOSING 關(guān)聯(lián)的EditText中所有內(nèi)容都失去新樣式局扶;
其余任意flag關(guān)聯(lián)的EditText,替換來的文字都保持了新樣式恨统;

3.4:新替換文字的起止值范圍大于EditText中新樣式的起止值,進(jìn)行文字替換:
起止位置超過原始起止位置替換.gif
通過圖片可以得到結(jié)論三妈,新替換文字的起止值范圍大于EditText中新樣式的起止值畜埋,進(jìn)行文字替換:

SPAN_POINT_MARK 和 SPAN_INCLUSIVE_INCLUSIVE 關(guān)聯(lián)的EditText,新替換文字會保持新樣式畴蒲;
其余所有的flag值悠鞍,都會失去新樣式;

4:SPAN_POINT_MARK_MASK模燥,SPAN_PARAGRAPH咖祭,當(dāng)EditText文本內(nèi)容發(fā)生改變,表現(xiàn)有何區(qū)別蔫骂?

4.1:為什么這兩個flag值的表現(xiàn)要單獨(dú)分析么翰?

我在實(shí)驗(yàn)過程中,出現(xiàn)過2個異常辽旋,描述如下:

PARAGRAPH span must start at paragraph boundary
PARAGRAPH span must end at paragraph boundary

后來看了SDK中這兩個flag值的描述浩嫌,在java代碼中進(jìn)行實(shí)驗(yàn),理解了這兩個flag值使用的特殊條件:

  • start值必須為 0(SpannableString的開頭)或 \n(換行符)所在的索引值+1补胚;
  • end必須要為 \n(換行符)所在的索引值+1 或 SpannableString的結(jié)尾字符索引值+1(SpannableString的長度值)
  • start值有誤 :報(bào)異常 PARAGRAPH span must start at paragraph boundary
  • end值有誤 :報(bào)異常 PARAGRAPH span must end at paragraph boundary
  • 同樣码耐,要是start<0或者end>=length,也會報(bào)錯。

怎么理解呢溶其?就是這兩個flag值骚腥,對于新樣式的設(shè)定,是針對于“段落”的握联,何為“段落”桦沉?就是EditText中1:所有的文本或者2:完整的1行或者多行每瞒。如果你在調(diào)用SpannableString的setSpan方法時候金闽,start和end的值所指定的文本不屬于1:所有的文本或者2:完整的1行或者多行,那么就會報(bào)上面提到的異常剿骨。

setSpan(Object what, int start, int end, int flags))]

此處的‘行’代芜,指的是\n(換行符)引起的換行;

看了下面的實(shí)際演示浓利,應(yīng)該更容易理解挤庇。

4.2:EditText中的文本钞速,完全刪除后重新輸入
P-完全刪除后重新輸入.gif
通過圖片可以得到結(jié)論,EditText中的文本嫡秕,完全刪除后重新輸入:

新輸入的文本未使用新樣式渴语;

4.3:在EditText實(shí)例新樣式的左側(cè),進(jìn)行不完全的替換
P-起始小于原始起始終止大于原始起始小于原始終止 替換.gif
通過圖片可以得到結(jié)論昆咽,在EditText實(shí)例新樣式的左側(cè)驾凶,進(jìn)行不完全的替換:

替換的文字所涉及到的完整的的新樣式丟失;
替換的文字沒有涉及到的完整行掷酗,新樣式依然保留调违;

4.4:在EditText實(shí)例新樣式的右側(cè),進(jìn)行不完全的替換
P-起始大于原始起始小于原始終止終止大于原始終止 替換.gif
通過圖片可以得到結(jié)論泻轰,在EditText實(shí)例新樣式的右側(cè)技肩,進(jìn)行不完全的替換:

替換文字起始位置所在的完整行,新樣式依然保留浮声,

新樣式一直到延伸到替換文字終止位置所在的完整行虚婿;

5:涉及到的代碼

java文件:

public class SpannedActivity extends AppCompatActivity implements View.OnClickListener{
    private ScrollView activitySpanned;
//    private EditText tvSpanExclusiveExclusive;
//    private EditText tvSpanInclusiveInclusive;
//    private EditText tvSpanExclusiveInclusive;
//    private EditText tvSpanInclusiveExclusive;
    private EditText tv_span_point_mark_mask;
//    private EditText tv_span_mark_mark;
//    private EditText tv_span_mark_point;
//    private EditText tv_span_point_mark;
//    private EditText tv_span_point_point;
    private EditText tv_span_paragraph;
//    private EditText tv_span_composing;
//    private EditText tv_span_intermediate;
//    private EditText tv_span_user_shift;
//    private EditText tv_span_user;
//    private EditText tv_span_priority_shift;
//    private EditText tv_span_priority;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_spanned);
        initViews();
    }

    private void initViews() {
        activitySpanned = (ScrollView) findViewById(R.id.activity_spanned);
//        tvSpanExclusiveExclusive = (EditText)findViewById(R.id.tv_span_exclusive_exclusive);
//        tvSpanInclusiveInclusive = (EditText) findViewById(R.id.tv_span_inclusive_inclusive);
//        tvSpanExclusiveInclusive = (EditText) findViewById(R.id.tv_span_exclusive_inclusive);
//        tvSpanInclusiveExclusive = (EditText) findViewById(R.id.tv_span_inclusive_exclusive);
        tv_span_point_mark_mask = (EditText) findViewById(R.id.tv_span_point_mark_mask);
//        tv_span_mark_mark = (EditText) findViewById(R.id.tv_span_mark_mark);
//        tv_span_mark_point = (EditText) findViewById(R.id.tv_span_mark_point);
//        tv_span_point_mark = (EditText) findViewById(R.id.tv_span_point_mark);
//        tv_span_point_point = (EditText) findViewById(R.id.tv_span_point_point);
        tv_span_paragraph = (EditText) findViewById(R.id.tv_span_paragraph);
//        tv_span_composing = (EditText) findViewById(R.id.tv_span_composing);
//        tv_span_intermediate = (EditText) findViewById(R.id.tv_span_intermediate);
//        tv_span_user_shift = (EditText) findViewById(R.id.tv_span_user_shift);
//        tv_span_user = (EditText) findViewById(R.id.tv_span_user);
//        tv_span_priority_shift = (EditText) findViewById(R.id.tv_span_priority_shift);
//        tv_span_priority = (EditText) findViewById(R.id.tv_span_priority);

        //設(shè)置初始內(nèi)容
        String str = "一二三四五六七八九十";
        //1:構(gòu)造SpannableString實(shí)例
        SpannableString spannableStringEE = new SpannableString(str);
        SpannableString spannableStringII = new SpannableString(str);
        SpannableString spannableStringEI = new SpannableString(str);
        SpannableString spannableStringIE = new SpannableString(str);
        //2:構(gòu)造指定類型的Span,這里使用 AbsoluteSizeSpan,ForegroundColorSpan
        AbsoluteSizeSpan sizeSpan = new AbsoluteSizeSpan(24,true);
        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED);
        //3:將構(gòu)造的AbsoluteSizeSpan實(shí)例,ForegroundColorSpan實(shí)例應(yīng)用于SpannableString實(shí)例,只有 flags 有區(qū)別
        /**
        {@link SpannableString#setSpan(Object, int, int, int)}
         */
        spannableStringEE.setSpan(sizeSpan,2,4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableStringII.setSpan(sizeSpan,2,4, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        spannableStringEI.setSpan(sizeSpan,2,4, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        spannableStringIE.setSpan(sizeSpan,2,4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        spannableStringEE.setSpan(colorSpan,2,4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableStringII.setSpan(colorSpan,2,4, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        spannableStringEI.setSpan(colorSpan,2,4, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        spannableStringIE.setSpan(colorSpan,2,4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //4:將SpannableString實(shí)例應(yīng)用于對應(yīng)的EditText實(shí)例
//        tvSpanExclusiveExclusive.setText(spannableStringEE);
//        tvSpanInclusiveInclusive.setText(spannableStringII);
//        tvSpanExclusiveInclusive.setText(spannableStringEI);
//        tvSpanInclusiveExclusive.setText(spannableStringIE);
        SpannableString spannableStringPMM = new SpannableString("一二三四五六七八九十\n一二三四五六七八九十\n一二三四五六七八九十\n一二三四五六七八九十\n一二三四五六七八九十");
        spannableStringPMM.setSpan(sizeSpan,11,33, Spanned.SPAN_POINT_MARK_MASK);
        spannableStringPMM.setSpan(colorSpan,11,33, Spanned.SPAN_POINT_MARK_MASK);
        tv_span_point_mark_mask.setText(spannableStringPMM);
        SpannableString spannableStringMM = new SpannableString(str);
        spannableStringMM.setSpan(sizeSpan,2,4, Spanned.SPAN_MARK_MARK);
        spannableStringMM.setSpan(colorSpan,2,4, Spanned.SPAN_MARK_MARK);
//        tv_span_mark_mark.setText(spannableStringMM);
        SpannableString spannableStringMP = new SpannableString(str);
        spannableStringMP.setSpan(sizeSpan,2,4, Spanned.SPAN_MARK_POINT);
        spannableStringMP.setSpan(colorSpan,2,4, Spanned.SPAN_MARK_POINT);
//        tv_span_mark_point.setText(spannableStringMP);
        SpannableString spannableStringPM = new SpannableString(str);
        spannableStringPM.setSpan(sizeSpan,2,4, Spanned.SPAN_POINT_MARK);
        spannableStringPM.setSpan(colorSpan,2,4, Spanned.SPAN_POINT_MARK);
//        tv_span_point_mark.setText(spannableStringPM);
        SpannableString spannableStringPP = new SpannableString(str);
        spannableStringPP.setSpan(sizeSpan,2,4, Spanned.SPAN_POINT_POINT);
        spannableStringPP.setSpan(colorSpan,2,4, Spanned.SPAN_POINT_POINT);
//        tv_span_point_point.setText(spannableStringPP);
        SpannableString spannableStringParagraph = new SpannableString("一二三四五六七八九十\n一二三四五六七八九十\n一二三四五六七八九十\n一二三四五六七八九十\n一二三四五六七八九十");
        spannableStringParagraph.setSpan(sizeSpan,11,33, Spanned.SPAN_PARAGRAPH);
        spannableStringParagraph.setSpan(colorSpan,11,33, Spanned.SPAN_PARAGRAPH);
        tv_span_paragraph.setText(spannableStringParagraph);
        SpannableString spannableStringComposing = new SpannableString(str);
        spannableStringComposing.setSpan(sizeSpan,2,4, Spanned.SPAN_COMPOSING);
        spannableStringComposing.setSpan(colorSpan,2,4, Spanned.SPAN_COMPOSING);
//        tv_span_composing.setText(spannableStringComposing);
        SpannableString spannableStringIntermediate = new SpannableString(str);
        spannableStringIntermediate.setSpan(sizeSpan,2,4, Spanned.SPAN_INTERMEDIATE);
        spannableStringIntermediate.setSpan(colorSpan,2,4, Spanned.SPAN_INTERMEDIATE);
//        tv_span_intermediate.setText(spannableStringIntermediate);
        SpannableString spannableStringUserShift = new SpannableString(str);
        spannableStringUserShift.setSpan(sizeSpan,2,4, Spanned.SPAN_USER_SHIFT);
        spannableStringUserShift.setSpan(colorSpan,2,4, Spanned.SPAN_USER_SHIFT);
//        tv_span_user_shift.setText(spannableStringUserShift);
        SpannableString spannableStringUser = new SpannableString(str);
        spannableStringUser.setSpan(sizeSpan,2,4, Spanned.SPAN_USER);
        spannableStringUser.setSpan(colorSpan,2,4, Spanned.SPAN_USER);
//        tv_span_user.setText(spannableStringUser);
        SpannableString spannableStringPriorityShift = new SpannableString(str);
        spannableStringPriorityShift.setSpan(sizeSpan,2,4, Spanned.SPAN_PRIORITY_SHIFT);
        spannableStringPriorityShift.setSpan(colorSpan,2,4, Spanned.SPAN_PRIORITY_SHIFT);
//        tv_span_priority_shift.setText(spannableStringPriorityShift);
        SpannableString spannableStringPriority = new SpannableString(str);
        spannableStringPriority.setSpan(sizeSpan,2,4, Spanned.SPAN_PRIORITY);
        spannableStringPriority.setSpan(colorSpan,2,4, Spanned.SPAN_PRIORITY);
//        tv_span_priority.setText(spannableStringPriority);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            default:
                break;
        }
    }
}

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_spanned"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.jet.coordbehsnack.SpannedActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <!--
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_EXCLUSIVE_EXCLUSIVE" />
        <EditText
            android:id="@+id/tv_span_exclusive_exclusive"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_EXCLUSIVE_EXCLUSIVE" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_INCLUSIVE_INCLUSIVE" />
        <EditText
            android:id="@+id/tv_span_inclusive_inclusive"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_INCLUSIVE_INCLUSIVE" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_EXCLUSIVE_INCLUSIVE" />

        <EditText
            android:id="@+id/tv_span_exclusive_inclusive"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_EXCLUSIVE_INCLUSIVE" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_INCLUSIVE_EXCLUSIVE" />
        <EditText
            android:id="@+id/tv_span_inclusive_exclusive"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_INCLUSIVE_EXCLUSIVE" />
        -->
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_POINT_MARK_MASK" />
        <EditText
            android:id="@+id/tv_span_point_mark_mask"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_POINT_MARK_MASK" />
        <!--
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_MARK_MARK" />
        <EditText
            android:id="@+id/tv_span_mark_mark"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_MARK_MARK" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_MARK_POINT" />
        <EditText
            android:id="@+id/tv_span_mark_point"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_MARK_POINT" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_POINT_MARK" />
        <EditText
            android:id="@+id/tv_span_point_mark"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_POINT_MARK" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_POINT_POINT" />
        <EditText
            android:id="@+id/tv_span_point_point"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_POINT_POINT" />
        -->
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_PARAGRAPH" />
        <EditText
            android:id="@+id/tv_span_paragraph"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_PARAGRAPH" />
        <!--
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_COMPOSING" />
        <EditText
            android:id="@+id/tv_span_composing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_COMPOSING" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_INTERMEDIATE" />
        <EditText
            android:id="@+id/tv_span_intermediate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_INTERMEDIATE" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_USER_SHIFT" />
        <EditText
            android:id="@+id/tv_span_user_shift"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_USER_SHIFT" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_USER" />
        <EditText
            android:id="@+id/tv_span_user"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_USER" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_PRIORITY_SHIFT" />
        <EditText
            android:id="@+id/tv_span_priority_shift"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_PRIORITY_SHIFT" />
        <TextView android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SPAN_PRIORITY" />
        <EditText
            android:id="@+id/tv_span_priority"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="SPAN_PRIORITY" />
        -->
    </LinearLayout>
</ScrollView>

以上就是個人實(shí)驗(yàn)和分析的一點(diǎn)結(jié)果阿蝶,若有錯誤雳锋,請各位同學(xué)留言告知!

希望能給大家一點(diǎn)點(diǎn)的收獲!也希望‘其實(shí)你不懂’系列文章真的可以寫完并得到大家的指教和喜歡羡洁!

That's all !

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玷过,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子筑煮,更是在濱河造成了極大的恐慌辛蚊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件真仲,死亡現(xiàn)場離奇詭異袋马,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)秸应,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門虑凛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人软啼,你說我怎么就攤上這事桑谍。” “怎么了祸挪?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵锣披,是天一觀的道長。 經(jīng)常有香客問我,道長雹仿,這世上最難降的妖魔是什么增热? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮胧辽,結(jié)果婚禮上峻仇,老公的妹妹穿的比我還像新娘。我一直安慰自己邑商,他們只是感情好础浮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奠骄,像睡著了一般豆同。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上含鳞,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天影锈,我揣著相機(jī)與錄音,去河邊找鬼蝉绷。 笑死鸭廷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熔吗。 我是一名探鬼主播辆床,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼桅狠!你這毒婦竟也來了讼载?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤中跌,失蹤者是張志新(化名)和其女友劉穎咨堤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漩符,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡一喘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗜暴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凸克。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闷沥,靈堂內(nèi)的尸體忽然破棺而出萎战,到底是詐尸還是另有隱情,我是刑警寧澤狐赡,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布撞鹉,位于F島的核電站,受9級特大地震影響颖侄,放射性物質(zhì)發(fā)生泄漏鸟雏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一览祖、第九天 我趴在偏房一處隱蔽的房頂上張望孝鹊。 院中可真熱鬧,春花似錦展蒂、人聲如沸又活。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柳骄。三九已至,卻和暖如春箕般,著一層夾襖步出監(jiān)牢的瞬間耐薯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工丝里, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曲初,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓杯聚,卻偏偏與公主長得像臼婆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幌绍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容