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 초프(초보 프로그래머)
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 초프(초보 프로그래머)
Project2010.11.25 03:43
아이폰용 중앙대 식단 정보가 나와서 안드로이드용으로 만들기 위해 작업 중입니다.

이미 몇 주전 부터 작업을 시작하였으나 계속 미뤄져 왔네요.

지금 소개하는 내용도 이미 몇 주 전에 완성된 부분입니다.




XML 데이터 형식을 간단히 보여드리자면 다음과 같습니다.


DB에 정보를 저장하고 가져오는 부분까지 만들었습니다. 아직 완벽한 상태는 아니지만요....

안드로이드 어플을 만들어야 하는데... 계속 미뤄지고 있네요
곧 방학인데.... 곧 졸업인데.... 어쩌지.... ^^;

Posted by 초프(초보 프로그래머)