Programming/Android2011.01.19 10:35

Activity 안에는 onPrepareOptionMenu  라는 메소드가 존재합니다. 이 메소드는 옵션 메뉴가 호출되어 화면에 보여질때 준비하는 메소드입니다. 그러므로 보여주기 직전 입니다.

이곳에서 수정하면 원하는 조건에 원하는 메뉴를 출력할 수 있습니다.

    public boolean onPrepareOptionsMenu(Menu menu){
		menu.clear();
    	
    	if(조건1)
    		new MenuInflater(this).inflate(R.menu.A, menu);
    	else if(조건2)
    		new MenuInflater(this).inflate(R.menu.B, menu);
    	else
    		new MenuInflater(this).inflate(R.menu.C, menu);
		
    	return super.onPrepareOptionsMenu(menu);
    }
조건1, 2에는 출력을 원하는 메뉴의 조건을 써주시면 됩니다.

menu.clear() 을 하는 이유는... 안해주면 기존에 onCreateOptionMenu 에 의해 생성된 메뉴 또는 onPrepareOptionMenu에서 생성된 메뉴가 누적되게 됩니다. 그럼 같은 메뉴가 2개 이상 생기게 됩니다. 이런 현상을 막기 위해 메뉴가 변경되면 clear를 통해 모든 메뉴를 지워줍니다.

inflate 를 이용안하고 직접 menu의 메소드를 호출하여 MenuItem 을 추가할 수 있습니다.
Posted by 초프(초보 프로그래머)
Project/중앙인2011.01.19 10:17
오랫동안 업데이트를 미뤄왔던 중앙인이 이제서야 업데이트 되었습니다.

추가된 기능
  * 종료시 캐시 삭제
  * 글 작성
  * 글 추천
  * 글 목록 또는 댓글 목록에서 내글 표시(배경색)
  * 일부 플래시 지원
  * 댓글 작성 버튼을 메뉴로 이동
  * 내용없는 댓글 작성 안됨








Posted by 초프(초보 프로그래머)
Project2011.01.17 11:40
텍스트 뷰어 yViewer 가 1.0.0 으로 업데이트 되었습니다.

* 한 화면에 맞는 텍스트만 출력
* 스크롤이 없이 오직 장으로 구현
* 캐시 적용
* 북마크 개별 삭제, 파일별 삭제
* 아이콘 추가
* 최근 읽은 목록 추가
* 광고 추가
* 설정 추가


허접 했던 앱 아이콘도 변경 되었습니다. 


구글 마켓에서 yViewer로 검색하세요~

아니면...


Posted by 초프(초보 프로그래머)
Programming/Android2011.01.14 14:03
#1 에서 검색할 결과를 바탕으로 테스트 해보았습니다.

xml/setup.xml

	

ColorListPreference.java
package android.test;

import android.content.Context;
import android.preference.ListPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AbsListView.LayoutParams;

public class ColorListPreference extends ListPreference {

	public ColorListPreference(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
	
	public View onCreateDialogView(){
		ListView view = new ListView(getContext());
		view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
		view.setAdapter(new ArrayAdapter(getContext(),android.R.layout.simple_list_item_single_choice,getEntries()));
		
		return view;
	}
}


위 그림은 이클립스의 Hierarchy View perspective 로 본 그림입니다. 3번째 layout 에서 크게 4가지로 분리되는 것이 보입니다. 이 4가지가 topPanel, contentPanel, customPanel, buttonPanel 입니다. 
우리가 원했던 대로 contentPanel에는 아무것도 출력되지 않았고 customPanel에만 출력이 되었습니다



그런데 이게... 뭘까요? 기존의 형식을 유지하면서 나오길 원했는데... 이건 전혀 그렇지 않네요...;
처음부터 잘못 생각했었습니다. customPanel을 건드리는게 아니라 contentPanel을 건드려야 겠구나....

contentPanel은 어떻게 건드릴 까요?

여러가지로 테스트해본 결과 건드릴 수가 없었습니다. contentPanel의 부분은 AlertDialog.Builder 에서 생성된 내용이 들어가는 부분인듯 합니다. 그럼 당연히 Builder를 통해서 리스트를 생성해야 겠지요. 

그럼 AlertDialog.Builder은 어디서 건드리지?????


안드로이드 개발자 사이트에서 확인해 보니 DialogPreference에는 onPrepareDialogBuilder이 있습니다.
이 메소드에서는 Dialog를 생성하는 것이 아니라 preference를 클릭하여 Dialog를 보여지기 전에 실행됩니다.
그래서 이곳에서 builder를 이용해서 수정하여 보여주는 것입니다 !!!



Posted by 초프(초보 프로그래머)
Programming/Android2011.01.14 13:23
설정 화면을 만들때 preference를 이용하면 xml로 쉽게 만들 수 있습니다.
그러나 기본으로 제공되고 있는 종류가 너무 적습니다. 

CheckBoxPreference
EditTextPreference
ListPreference
RingtonePreference
이 4가지가 기본적으로 제공되고 있습니다.

이번에 작업을 하면서 ListPreference 로 색상을 선택하게 하였는데 색상이 보이지 않아서 사용자들의 불만이 급증할 것으로 생각 되었습니다. 그래서 Custom ListPreference를 만들기로 하였습니다.

ListPreferece는 DialogPreference를 상속 받아서 Dialog안에 리스트를 출력해 주는 Preference입니다.


이런 ListPreference를 만들려고 합니다. 이 Dialog에는 총 4개의 부분으로 나눠져 있습니다.

 topPanel  

 contentPanel  

 customPanel  
 buttonPanel  


topPanel은 title 부분입니다. Custom Title로 변경 가능 합니다.
contentPanel은 DialogPreference에서 생성된 부분입니다. 사용자가 직접 Custom View로 변경하는 것은 힘들어 보입니다.
customPanel은 Custom View를 구현할 수 있는 부분입니다.
buttonPanel은 버튼이 나오는 부분으로 이부분은 negative, positive로 쉽게 변경이 가능합니다.

contentPanel을 바꾸고 싶은 것이 목표입니다. 그래서 검색해 봤습니다. 구글 레퍼런스 사이트에서 찾아 냈습니다.


오른쪽 아래에 보시면 (if a custom content view is required) ....... custom content 가 필요하면 이걸 사용하라고 합니다. 친절히 이렇게 써줬다니... 감격했습니다.


Posted by 초프(초보 프로그래머)
가톨릭대
강남대
건국대
경기대
경성대
경원대
경희대
계명대
고려대
고려대 하나스퀘어
고려대 학술정보관
공주대
광명시 중앙도서관
광명시 하안도서관
광운대
국민대
대구가톨릭대
대구대
덕성여대
동국대
동국대 별관
동덕여대
부경대
삼육대
상명대
서강대
서울산업대
서울시립대
성남시 구미 도서관
성결대
성신여대
숭실대
아주대
영남대
울산대
이화여대
인천시 부평도서관
전남대 (여수)
제주대
조선대
중앙대
중앙대(안성)
청주대
한국외대
한국외대(용인)
한국외대 법학도서관
한국해양대
한림대
한양대
한양대 법학학술정보관
세종대
송파도서관
단국대
한경대
전북대
경희대 (국제)
금오공대
고양시 백석도서관
목원대
연세대 학술정보관
연세대
인천시 계양도서관
인천시 주안도서관
인천시 중앙도서관
서원대
강동구 강일도서관
강동구 해공도서관
강동구 암사도서관
안양대
충남대
고양시 마두도서관
신라대
원광대
전주교대
광주교대
호남대
상명대 (천안)
백석대
한국 기술교대
배재대
강원대
강원대 별관
관동대
춘천교대
한라대
목포대
대전 보건대
안산1대
백석문화대
영진 전문대
군포시 산본도서관
용인시 죽전도서관
시흥시 중앙도서관
숙명여대
한성대
양천구 도서관
경기도 과천도서관
부천시 중앙도서관
마포구 평생학습관
군포시 중앙도서관
용인시 동백도서관
용인시 구성도서관
용인시 수지도서관
용인시 시립도서관
용인시 포곡도서관
이천시 시립도서관
인천시 북구도서관
인천시 연수도서관
의정부 정보도서관
노원구 정보도서관
하남시 나룰도서관
화성시 병점도서관
구리시 인창도서관
인천시 화도진도서관
안양시 석수도서관
안양시 평촌도서관
안양시 호계도서관
고양시 화정도서관
경기도 평생교육학습관
고양시 행신도서관
하남시 시립도서관
경남대
인천시 미추홀도서관
은평구 증산정보도서관
금천구 가산도서관
금천구 정보도서관
수원시 영통도서관
고양시 대화도서관
광진구 정보도서관
성남시 중앙도서관
고양시 한뫼도서관
의왕시 중앙도서관
파주시 중앙도서관
강북구 문화정보센터
종로구 419혁명 기념도서관
순천향대
강북구 송중문화정보센터
서수원 지식정보도서관
은평구 구립도서관
중랑구 정보도서관
성남시 중원도서관
남서울대
연세대 (원주)
서울여대
북수원 지식정보도서관
한남대
인하대
노원구 월계문화정보도서관
광주시 시립도서관
광주시 오포도서관
광주시 실촌도서관
오산시 중앙도서관
단국대 (천안)
서울시 종로도서관
인천시 서구도서관
성남시 판교도서관
계양구 서운도서관
성남시 분당도서관
오산시 양산도서관
호서대
성균관대 삼성학술정보관
성균관대 중앙학술정보관
명지대
김포시 통진도서관
성북구 정보도서관
성남시 수정도서관
안산시 중앙도서관
구리시 교문도서관
서구 석남어린이 도서관
우석대
충주대
교원대
부산대
화성시 봉담도서관
카이스트
강북구 솔샘문화정보센터
동국대 만해관
진해시 중앙도서관
부천시 꿈빛도서관
부천시 북부도서관
마포구 상수청소년독서실
구리시 토평도서관
부천시 한울빛도서관
도봉구 학마을 다사랑센터
김천대
동대문구 정보화도서관
서초구 심산기념문화센터
전주대
군산시 도서관
서울대
순천대
인하공전
성북구 아리랑정보도서관
을지대(성남)
부산대 나노생명과학도서관
홍익대
오산시 청학도서관
대구한의대
인천대
안양시 비산도서관
동서대
수원여대 (인제)
수원여대 (해란)
상지대
포천시 소홀도서관
이화여대 POSCO관
영등포구 문래정보문화도서관
영등포구 선유정보문화도서관
영등포구 대림정보문화도서관
건국대 (충주)
홍익대 (조치원)
동의대
시흥시 군자도서관
시흥시 능곡도서관
강원대 (삼척)
연천군 도서관
고려대 (세종)
거제대
양주시 덕정도서관
망원청소년독서실
부천시 해밀도서관
용인시 기흥도서관
동국대 (경주)
노원평생학습관
과천시 정보과학도서관


이렇게 나열하고 나니 지원되고 있는 도서관이 너무 적네요... ㅜ.ㅜ
Posted by 초프(초보 프로그래머)
Programming/Android2011.01.11 12:30
  • 구글마켓
    • Application Icon : 512x512 / 24bit png or jpeg (no alpha)
    • Promotional Graphic : 180x120 / 24bit png or jpeg (no alpha) / optional
    • Feature Graphic : 1024x500 / 24bit png or jpeg (no alpha) / optional
  • 티스토어
    • Application Icon : 212x212 / jpg, png, gif, bmp / round
  • 오즈스토어
    • Application Icon : 90x90 / png, gif

Posted by 초프(초보 프로그래머)
Project2011.01.09 23:31
가장 크게 변경된 부분은 역시 글을 읽는 부분입니다.

한 화면에 맞게 글이 출력되어 스크롤이 없어 읽기가 편합니다.

색, 여백, 폰트등 사용자가 원하는 대로 여러 설정을 변경할 수 있습니다.

한번 선택한 인코딩은 계속 적용되므로 볼때 마다 선택 안하셔도 됩니다.



Posted by 초프(초보 프로그래머)
Programming/Android2011.01.09 16:32
디버그용 키

위치 : C:\Documents and Settings\Administrator\.android\

명령 : keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android


릴리즈용 키

위치 : 인증서가 있는 위치

명령 : keytool -list -keystore 인증서이름 -storepass 인증서암호


키 생성 사이트 : http://code.google.com/android/maps-api-signup.html


계속 방법을 잊어서 기록했음;;


이제 제발 잊지 말자 ㅜ.ㅜ

Posted by 초프(초보 프로그래머)
Programming/Android2011.01.09 14:53
리스트뷰를 이용하여 구현하였고 리스트뷰의 한 항목을 눌렀을때 그 항목에만 해당되는 Context Menu를 넣을 수 있다.


    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
    	super.onCreateContextMenu(menu, view, menuInfo);
    	new MenuInflater(this).inflate(R.menu.context_mylibrary, menu);
    }
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
    	super.onCreateContextMenu(menu, view, menuInfo);
    	new MenuInflater(this).inflate(R.menu.context_mylibrary, menu);
    }

어떤 도서관을 클릭해도 이와 같은 Context Menu가 나온다... 하지만 제대로 된 항목을 클릭한 것 일까?
아니면 실수나 오류로 인해서 위 또는 아래의 항목이 클릭된 것 일까?
이건 메뉴중 하나를 선택하지 않으면 정확히 알 수 없는 문제이다... 
이런 문제를 해결하기 위해서 Title을 넣어 보려고 한다.
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
    	super.onCreateContextMenu(menu, view, menuInfo);

    	AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;
    	ListView lv = (ListView) findViewById(R.id.LVLibrary);
    	Library library = (Library) lv.getAdapter().getItem(info.position);
    	
    	new MenuInflater(this).inflate(R.menu.context_mylibrary, menu);
    	menu.setHeaderTitle(library.getName());
    }
info.position 을 통해 몇번째 항목인지 가져온다.
리스트뷰에서 Adapter를 얻어서 해당하는 항목의 객체를 얻어올 수 있다.
이제 타이틀로 넣을 값을 얻었으니 이제 설정만 해주면 끝이다.

표시될 메뉴 객체 menu의 setHeaderTitle 메소드를 호출하여 원하는 정보를 설정해 준다.


이게 결과를 실행한 화면이다.
타이틀이 나와서 그런지 어떤 항목을 선택했는지 확실히 알 수 있다.
Posted by 초프(초보 프로그래머)