안드로이드 개발 질문/답변
(글 수 45,052)
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);
리니어레이아웃인대
스크롤뷰로 바꿔서 스크롤 추가하는방법이 있나여 ... ㄱ-
소스상 레이아웃 구현은 처음해봐서 ㄷㄷ




소스상에 레이아웃 구현하면 유지 보수도 않좋고,
나중에 업그레드하거나 UI 변경되면 대응이 아주 곤란하답니다.
그냥 xml 파일 사용하실 것을 권합니다.