1

アプリのいくつかの問題をデバッグするためにいくつかのログを使用String.valueOf(view)していましたonClick(View view)

ログインしましたLog.d("Values", "HomeFragment: onClick. view = " + String.valueOf(view));

ログの結果は次のとおりです。 D/Values: HomeFragment: onClick. view = android.widget.RelativeLayout{cca8bb V.E...C.. ...P.... 0,512-1080,1024 #7f0c0079 app:id/button_2}

それが何を意味するのか知りたいです。Android Developers referenceから情報を取得しようとしましたが、最も近いのは、その定義がvalueOf (Object value)一般的すぎるというものでした。

によって特定のオブジェクトについて返された情報を取得するには、どこに行けばよいString.valueOf()ですか?

4

1 に答える 1

4

String.valueOf(object)toStringオブジェクトのメソッドを呼び出すだけです。Viewクラスを逆コンパイルすると、次のようになります。

// toString method of the View class
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' : '.');
    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 (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();
}

したがって、あなたの例では:

  • android.widget.RelativeLayout= クラス名
  • cca8bb= ID ハッシュコード (16 進数)
  • V.E...C.. ...P....= ビューが表示されている、マスクが有効である、クリック可能である、ボタンが押されている
  • 0,512-1080,1024= 左、上 - 右、下 このビューの親の端からこのビューの端までのピクセル単位の距離。
  • #7f0c0079= ビューの ID (16 進数)
  • app:id/button_2= このビューの文字列 ID (レイアウト ファイル内)
于 2016-02-27T12:10:57.497 に答える