TextView typeView = new TextView(this);
        typeView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        typeView.setBackgroundColor(Color.GRAY);
        typeView.setTextColor(Color.CYAN);
        typeView.setPadding(4, 4, 4, 4);
        typeView.setHeight(40);
        typeView.setText("Tag Type");        
        layout.addView(typeView);
        
        TextView infoView = new TextView(this);
        infoView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        infoView.setBackgroundColor(Color.GRAY);
        infoView.setTextColor(Color.CYAN);
        infoView.setPadding(4, 4, 4, 4);
        infoView.setHeight(40);
        infoView.setText("Memory Size");   
        
TextView sizeView = new TextView(this);
sizeView.setPadding(4, 4, 4, 4);
sizeView.setLines(5);     
     TextView tagView = new TextView(this);
     tagView.setPadding(4, 4, 4, 4);
     tagView.setLines(3);
    
     if (MifareClassic.get(tag) != null) {
     switch (MifareClassic.get(tag).getType()) {
     case MifareClassic.TYPE_CLASSIC:
     tagView.setText("Mifare Classic");
     break;
     case MifareClassic.TYPE_PLUS:
     tagView.setText("Mifare Plus");
     break;
     case MifareClassic.TYPE_PRO:
     tagView.setText("Mifare Pro");
     break;
     case MifareClassic.TYPE_UNKNOWN:
     tagView.setText("Unknown(Mifare Classic compatible)");
     break;
     }
    
     layout.addView(tagView);
     layout.addView(infoView);
    
     // "\n" works only if TextViewObject.setLines() has a value more than 1 - TIP 
     switch (MifareClassic.get(tag).getSize()) {
     case MifareClassic.SIZE_1K:
     sizeView.setText("Tag Size: 1024 bytes\n>16 sectors with 4 blocks per sector\n>16 bytes per block");
     break;
     case MifareClassic.SIZE_2K:
     sizeView.setText("Tag Size: 2048 bytes\n>32 sectors with 4 blocks per sector\n>16 bytes per block");
     break;
     case MifareClassic.SIZE_4K:
     sizeView.setText("Tag Size: 4096 bytes\n>32 sectors with 4 blocks per sector\n>8 sectors with 4 blocks per sector\n>16 bytes per block");
     break;
     case MifareClassic.SIZE_MINI:
     sizeView.setText("Tag Size: 320 bytes\n>5 sectors with 4 blocks per sector\n>16 bytes per block");
     break;
     }
     layout.addView(sizeView);
     }
    
     else if (MifareUltralight.get(tag) != null) {
     switch (MifareUltralight.get(tag).getType()) {
     case MifareUltralight.TYPE_ULTRALIGHT:
     tagView.setText("Mifare Ultralight");
     sizeView.setText("Tag Size: 192 bytes\n>48 pages with 4 bytes per page");
     break;
     case MifareUltralight.TYPE_ULTRALIGHT_C:
     tagView.setText("Mifare Ultralight C");
     sizeView.setText("Tag Size: 192 bytes\n>48 pages with 4 bytes per page");
     break;
     case MifareUltralight.TYPE_UNKNOWN:
     tagView.setText("Unknown(Mifare Ultralight Compatible)");
     break;
     }
    
     layout.addView(tagView);
     layout.addView(infoView);
     layout.addView(sizeView);
     }
    
     else {
     if (NfcA.get(tag) != null) {
     tagView.setText("NfcA");
     }
     else if (NfcB.get(tag) != null) {
     tagView.setText("NfcB");
     }
     else if (NfcF.get(tag) != null) {
     tagView.setText("NfcF");
     }
     else if (NfcV.get(tag) != null) {
     tagView.setText("NfcV");
     }
     else if (IsoDep.get(tag) != null) {
     tagView.setText("IsoDep");
     }
     layout.addView(tagView);
     layout.addView(infoView);
     }
     TextView nfcView = new TextView(this);
            nfcView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
            nfcView.setBackgroundColor(Color.GRAY);
            nfcView.setTextColor(Color.CYAN);
            nfcView.setPadding(4, 4, 4, 4);
            nfcView.setHeight(40);
            nfcView.setText("NFC Forum Compatibility");        
     layout.addView(nfcView);
            
     if (Ndef.get(tag) != null) {
     String tagType = "";
     String canMakeReadonly = "";
     String isWritable = "";
     String ndefSize = "";
    
     Ndef ndef = Ndef.get(tag);
     if (ndef.getType().contains("mifare")) tagType = "NDEF on Mifare Classic";
     else if (ndef.getType().contains("type1")) tagType = "NFC Forum Tag Type 1";
     else if (ndef.getType().contains("type2")) tagType = "NFC Forum Tag Type 2";
     else if (ndef.getType().contains("type3")) tagType = "NFC Forum Tag Type 3";
     else if (ndef.getType().contains("type4")) tagType = "NFC Forum Tag Type 4";
    
     ndefSize = "" + ndef.getMaxSize();
    
     if (ndef.canMakeReadOnly()) canMakeReadonly = "Can make read-only";
     if (ndef.isWritable()) isWritable = "Writable";
     TextView ndefView = new TextView(this);
     ndefView.setPadding(4, 4, 4, 4);
     ndefView.setLines(5);
    
     ndefView.setText(tagType+"\nMaximum NDEF Size: "+ndefSize+" bytes\n"+canMakeReadOnly+"\n"+isWritable);
     layout.addView(ndefView);
     }
     if (NdefFormatable.get(tag) != null) {
     TextView ndefView = new TextView(this);
     ndefView.setPadding(4, 4, 4, 4);
     ndefView.setText("NDEF Formatable");
     layout.addView(ndefView);
     }
     TextView sTitleView = new TextView(this);
        sTitleView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        sTitleView.setBackgroundColor(Color.GRAY);
        sTitleView.setTextColor(Color.CYAN);
        sTitleView.setPadding(4, 4, 4, 4);
        sTitleView.setHeight(40);
        sTitleView.setText("NDEF Size");        
        layout.addView(sTitleView);
        int memUsed = 0;
            if (ndefArray != null) {
                ndefMessages = new NdefMessage[ndefArray.length];
                for (int i = 0; i < ndefArray.length; i++) {
                    ndefMessages[i] = (NdefMessage) ndefArray[i];
                    memUsed += ndefMessages[i].toByteArray().length;
                }
            }
            else {
                // Unknown tag type
             UNKNOWN = true;
                //byte[] empty = new byte[] {};
                //NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty);
                //NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
                //ndefMessage = new NdefMessage[] {msg};
            }
            TextView sizeView1 = new TextView(this);
        sizeView1.setLines(4);
        sizeView1.setPadding(4, 4, 4, 4);
        int storageSize;
        if (Ndef.get(tag) != null) {
         storageSize = Ndef.get(tag).getMaxSize();
        }
        else {
         storageSize = 0;
        }
        sizeView1.setText("Maximum NDEF Storage: "+storageSize+" bytes\n");
        sizeView1.append("Currently Used: "+memUsed+" bytes");
        
        TextView infoView1 = new TextView(this);
        infoView1.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        infoView1.setBackgroundColor(Color.GRAY);
        infoView1.setTextColor(Color.CYAN);
        infoView1.setPadding(4, 4, 4, 4);
        infoView1.setHeight(40);
        infoView1.setText("NDEF Contents");   
        layout.addView(sizeView1);
        layout.addView(infoView1);
        
        if (UNKNOWN) {
         TextView unknownView = new TextView(this);
         unknownView.setPadding(4, 4, 4, 4);
         unknownView.setText("No valid NDEF Messages... Impossible to process!");
         layout.addView(unknownView);
        }
        else {
         buildRecordViews(ndefMessages);
        }
        TextView titleView = new TextView(this);
        titleView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        titleView.setBackgroundColor(Color.GRAY);
        titleView.setTextColor(Color.CYAN);
        titleView.setPadding(4, 4, 4, 4);
        titleView.setHeight(40);
        titleView.setText("Technologies Supported");        
        layout.addView(titleView);
        
        TextView protoView = new TextView(this);
        protoView.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        protoView.setBackgroundColor(Color.GRAY);
        protoView.setTextColor(Color.CYAN);
        protoView.setPadding(4, 4, 4, 4);
        protoView.setHeight(40);
        protoView.setText("Protocols");   
        
TextView techView = new TextView(this);
techView.setPadding(4, 4, 4, 4);
techView.setLines(5);     
String tList = "";
     for(int i=0; i<tag.getTechList().length; i++) {
     tList += tag.getTechList()[i];
     tList += "\n";
     }
     techView.setText(tList);
     layout.addView(techView);
     layout.addView(protoView);
    
     TextView varView = new TextView(this);
     varView.setPadding(4, 4, 4, 4);
     varView.setLines(5);
    
     varView.append("Tag ID: "+byteArrayToHex(tag.getId())+"\n");
    
     if (MifareClassic.get(tag) != null) {
     // MifareClassic Tags also support NfcA
     if (NfcA.get(tag) != null) {
     varView.append("ATQA: 0x"+byteArrayToHex(NfcA.get(tag).getAtqa())+"\n");
     varView.append("SAK: 0x"+shortToHex(NfcA.get(tag).getSak())+"\n");
     }     
     }
     else if (MifareUltralight.get(tag) != null) {
     // MifareUltralight Tags also support NfcA
     if (NfcA.get(tag) != null) {
     varView.append("ATQA: 0x"+byteArrayToHex(NfcA.get(tag).getAtqa())+"\n");
     varView.append("SAK: 0x"+shortToHex(NfcA.get(tag).getSak())+"\n");
     }     
     }
     else {
     if (NfcA.get(tag) != null) {
     varView.append("ATQA: 0x"+byteArrayToHex(NfcA.get(tag).getAtqa())+"\n");
     varView.append("SAK: 0x"+shortToHex(NfcA.get(tag).getSak())+"\n");
     }
     else if (NfcB.get(tag) != null) {
     varView.append("Application Data: 0x"+byteArrayToHex(NfcB.get(tag).getApplicationData())+"\n");
     varView.append("Protocol Info: 0x"+byteArrayToHex(NfcB.get(tag).getProtocolInfo()));
     }
     else if (NfcF.get(tag) != null) {
     varView.append("Manufacturer: 0x"+byteArrayToHex(NfcF.get(tag).getManufacturer())+"\n");
     varView.append("System Code: 0x"+byteArrayToHex(NfcF.get(tag).getSystemCode()));
     }
     else if (NfcV.get(tag) != null) {
     varView.append("DSF ID: 0x"+byteToHex(NfcV.get(tag).getDsfId())+"\n");
     varView.append("Response Flag: 0x"+byteToHex(NfcV.get(tag).getResponseFlags()));
     }
     else if (IsoDep.get(tag) != null) {
     // IsoDep Tags also support NfcA or NfcB
     if (NfcA.get(tag) != null) {
     varView.append("ATQA: 0x"+byteArrayToHex(NfcA.get(tag).getAtqa())+"\n");
     varView.append("SAK: 0x"+shortToHex(NfcA.get(tag).getSak())+"\n");
     varView.append("ISO-DEP History: 0x"+byteArrayToHex(IsoDep.get(tag).getHistoricalBytes()));
     }
     else if (NfcB.get(tag) != null) {
     varView.append("Application Data: 0x"+byteArrayToHex(NfcB.get(tag).getApplicationData())+"\n");
     varView.append("Protocol Info: 0x"+byteArrayToHex(NfcB.get(tag).getProtocolInfo()));
     varView.append("Higher layer Response: 0x"+byteArrayToHex(IsoDep.get(tag).getHiLayerResponse()));
     }
     }
     }
     if (Ndef.get(tag) != null) {
     }
     if (NdefFormatable.get(tag) != null) {
     }
     layout.addView(varView);
    }
    else {
     TextView noTagView = new TextView(this);
     noTagView.setPadding(4, 4, 4, 4);
     noTagView.setText("No Tag detected...");
     layout.addView(noTagView);
    }
        setContentView(layout);


리니어레이아웃인대
스크롤뷰로 바꿔서 스크롤 추가하는방법이 있나여 ... ㄱ-
소스상 레이아웃 구현은 처음해봐서 ㄷㄷ