View.toString()

我們在對View執(zhí)行toString()方法的時候,會看到一段輸出:

*****.View {33df71a V.E...... ......I. 0,0-0,0 #7f100102 app:id/view}

一般對象的toString輸出是一段hashCode白群,而 View 的輸出是這么一串的東西序宦,它是不是有意義呢缸逃?我們就來看下ViewtoString方法的實現(xiàn)贷盲。

今天的主角是這一個方法:

public String toString() {
    StringBuilder out = new StringBuilder(128);
    out.append(getClass().getName());
    out.append('{');
    out.append(Integer.toHexString(System.identityHashCode(this)));
    out.append(' ');
    switch (mViewFlags&VISIBILITY_MASK) {
        case VISIBLE: out.append('V'); break;
        case INVISIBLE: out.append('I'); break;
        case GONE: out.append('G'); break;
        default: out.append('.'); break;
    }
    out.append((mViewFlags&FOCUSABLE_MASK) == FOCUSABLE ? 'F' : '.');
    out.append((mViewFlags&ENABLED_MASK) == ENABLED ? 'E' : '.');
    out.append((mViewFlags&DRAW_MASK) == WILL_NOT_DRAW ? '.' : 'D');
    out.append((mViewFlags&SCROLLBARS_HORIZONTAL) != 0 ? 'H' : '.');
    out.append((mViewFlags&SCROLLBARS_VERTICAL) != 0 ? 'V' : '.No');
    out.append((mViewFlags&CLICKABLE) != 0 ? 'C' : '.');
    out.append((mViewFlags&LONG_CLICKABLE) != 0 ? 'L' : '.');
    out.append((mViewFlags&CONTEXT_CLICKABLE) != 0 ? 'X' : '.');
    out.append(' ');
    out.append((mPrivateFlags&PFLAG_IS_ROOT_NAMESPACE) != 0 ? 'R' : '.');
    out.append((mPrivateFlags&PFLAG_FOCUSED) != 0 ? 'F' : '.');
    out.append((mPrivateFlags&PFLAG_SELECTED) != 0 ? 'S' : '.');
    if ((mPrivateFlags&PFLAG_PREPRESSED) != 0) {
        out.append('p');
    } else {
        out.append((mPrivateFlags&PFLAG_PRESSED) != 0 ? 'P' : '.');
    }
    out.append((mPrivateFlags&PFLAG_HOVERED) != 0 ? 'H' : '.');
    out.append((mPrivateFlags&PFLAG_ACTIVATED) != 0 ? 'A' : '.');
    out.append((mPrivateFlags&PFLAG_INVALIDATED) != 0 ? 'I' : '.');
    out.append((mPrivateFlags&PFLAG_DIRTY_MASK) != 0 ? 'D' : '.');
    out.append(' ');
    out.append(mLeft);
    out.append(',');
    out.append(mTop);
    out.append('-');
    out.append(mRight);
    out.append(',');
    out.append(mBottom);
    final int id = getId();
    if (id != NO_ID) {
        out.append(" #");
        out.append(Integer.toHexString(id));
        final Resources r = mResources;
        if (id > 0 && Resources.resourceHasPackage(id) && r != null) {
            try {
                String pkgname;
                switch (id&0xff000000) {
                    case 0x7f000000:
                        pkgname="app";
                        break;
                    case 0x01000000:
                        pkgname="android";
                        break;
                    default:
                        pkgname = r.getResourcePackageName(id);
                        break;
                }
                String typename = r.getResourceTypeName(id);
                String entryname = r.getResourceEntryName(id);
                out.append(" ");
                out.append(pkgname);
                out.append(":");
                out.append(typename);
                out.append("/");
                out.append(entryname);
            } catch (Resources.NotFoundException e) {
            }
        }
    }
    out.append("}");
    return out.toString();
}

代碼非常簡單队塘,從這里我們知道忍些,toString 里面把View的一些狀態(tài)都標(biāo)明好了,這對我們 debug 非常有幫助轰异,我們來簡單看一下里面的內(nèi)容:
先是 用一對括號{}把信息包起來

  1. 一段 hashcode
  2. 標(biāo)明View是否可見岖沛,值可選為 V/I/G/.,其中.是意外情況搭独,一般不會有這種狀態(tài)出現(xiàn)
  3. 標(biāo)明View是否可獲得焦點(diǎn)(Focusable)婴削,值可選為F/.
  4. 標(biāo)明View是否可用(Enable),值可選為E/.
  5. 標(biāo)明View是否需要繪制(WillNotDraw)牙肝,值可選為D/.
  6. 標(biāo)明View的橫向滾動條是否顯示唉俗,值可選為H/.
  7. 標(biāo)明View的縱向滾動條是否顯示,值可選為Z/.
  8. 標(biāo)明View是否可點(diǎn)擊(Clickable)配椭,值可選為C/.
  9. 標(biāo)明View是否可長按(Long Clickable)虫溜,值可選為L/.
  10. 標(biāo)明View是否可按出上下文菜單(鼠標(biāo)右鍵點(diǎn)擊,Context Clickable)股缸,值可選為X/.
  11. 標(biāo)明View是否在根命名空間中(Android內(nèi)部使用)衡楞,值可選為R/.
  12. 標(biāo)明View是否獲得焦點(diǎn)(Focused),值可選為F/.
  13. 標(biāo)明View是否是選擇狀態(tài)(Selected)敦姻,值可選為S/.
  14. 標(biāo)明View是否是預(yù)按下的狀態(tài)瘾境,值可選為p/.
  15. 標(biāo)明View是否是按下的狀態(tài),值可選為P/.
  16. 標(biāo)明View是否是 Hover 的狀態(tài)镰惦,值可選為H/.
  17. 標(biāo)明View是否是 Active 的狀態(tài)迷守,值可選為A/.
  18. 標(biāo)明View是否是 Invalidate 的狀態(tài),值可選為I/.
  19. 標(biāo)明View是否是 Dirty 的狀態(tài)陨献,值可選為D/.
  20. 接下去是一個空格,然后是View的尺寸坐標(biāo)信息:left,top-right,bottom
  21. 最后一個就是 ID 信息懂更,如果是應(yīng)用定義的 ID 就是app:id/xxxx

當(dāng)然眨业,如果你需要 Debug 一些 View 狀態(tài)的話,記住這個順序沮协,和字母代表的意思龄捡,就可以一眼看到View的狀態(tài),是非常不錯的慷暂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聘殖,一起剝皮案震驚了整個濱河市晨雳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奸腺,老刑警劉巖餐禁,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異突照,居然都是意外死亡帮非,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門讹蘑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來末盔,“玉大人,你說我怎么就攤上這事座慰≡刹眨” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵版仔,是天一觀的道長游盲。 經(jīng)常有香客問我,道長邦尊,這世上最難降的妖魔是什么背桐? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蝉揍,結(jié)果婚禮上链峭,老公的妹妹穿的比我還像新娘。我一直安慰自己又沾,他們只是感情好弊仪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杖刷,像睡著了一般励饵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滑燃,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天役听,我揣著相機(jī)與錄音,去河邊找鬼表窘。 笑死典予,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乐严。 我是一名探鬼主播瘤袖,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昂验!你這毒婦竟也來了捂敌?” 一聲冷哼從身側(cè)響起艾扮,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎占婉,沒想到半個月后泡嘴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锐涯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年磕诊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纹腌。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡霎终,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出升薯,到底是詐尸還是另有隱情莱褒,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布涎劈,位于F島的核電站广凸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛛枚。R本人自食惡果不足惜谅海,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹦浦。 院中可真熱鬧扭吁,春花似錦、人聲如沸盲镶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溉贿。三九已至枫吧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宇色,已是汗流浹背九杂。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宣蠕,地道東北人例隆。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像植影,于是被迫代替她去往敵國和親裳擎。 傳聞我的和親對象是個殘疾皇子涎永,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理思币,服務(wù)發(fā)現(xiàn)鹿响,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程谷饿,因...
    小菜c閱讀 6,358評論 0 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評論 25 707
  • 接上一篇:Android藝術(shù)開發(fā)探索第三章————View的事件體系(上) 3.4 View 的事件分發(fā)機(jī)制 本節(jié)...
    kongjn閱讀 1,102評論 1 0
  • 人傻點(diǎn)好惶我,為什么怎么說呢因為我就是一個非常好的例子,從我?guī)н^軍訓(xùn)以后每次和我的戰(zhàn)友們聊天博投,交流時我總是冒出一點(diǎn)...
    瀟灑杰哥閱讀 591評論 5 1