2010년 3월 30일 화요일

메뉴(Menu) 종류와 정의.

#. 메뉴 종류
  -. 옵션메뉴(Option Menu) : 기기에 붙어 있는 실제 버튼 클릭
  -. 컨텍스트 메뉴(Context Menu) : 메뉴가 연결된 위젯을 화면상에서 터치하고 잠깐동안 떼지않는 동작으로 띠울 수 있음.


#. 옵션메뉴
  -. onCreateOptionsMenu() 메소드 구현함. 인자로는 Menu 인스턴스가 넘어옴
  -. onCreateOptionsMenu() 에서 가장먼저 할일은 상위 클래스(super.onCreateOptionsMenu(menu)) 을 호출해
     Android 프리임웍에서 시스템 관련메뉴 추가(상위클래스 호출후 필요한 메뉴 항목 직접추가 가능)
  -. 액티비티 동작시 메뉴 항목에 대한 설정변경할경우(사용할수없는메뉴 비활성화 등)
    a. 위에서 넘겨받았던 Menu를 보관해두고 사용.
    b. 위의 방법 외에 onPrepareOptionMenu()을 이용하여 메뉴 항목의 상태를 변경한다.
  -. onPrepareOptionMenu()에서 메뉴를 추가할경우 넘겨받은 Menu 인서튼서의 add() 호출
    a. add() 호출하면 그 결과로 MenuItem 인스턴스 넘어옴.
    b. 메뉴 항목에 대한 설정이나 텍스트를 바꾸려면 이때 넘겨받은 인스턴스를 그대로 사용.
  -. 단축키 지정 가능
    a. setAlphabeticShortcut() : 알파벳 단축키
    b. setNumericShortcut() : 숫자 단축키
    c. 메뉴 자체가 알파벳 단축키 지정 방식으로 동작하게 하려면 Menu의 setQwertyMode() = True로.


2010년 3월 29일 월요일

Flipper(플리퍼) 예제

#. 플리퍼 버튼눌렀을시 화면넘기는 예제
  a. 초간단한 예제로 탭 사용하지 않고 화면 넘기기(플리퍼)
  b. 여기서는 버튼 클릭으로 넘기게 했으나 개발자가 충분히 핸들링 가능

-. main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/flip_me"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="페이지 넘김"
/>
<ViewFlipper android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#FF00FF00"
android:text="첫번째 페이지"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#FFFF0000"
android:text="두번째 페이지"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textColor="#FFFFFF00"
android:text="세번째 페이지"
/>
</ViewFlipper>
</LinearLayout>


-. source
package my.app;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ViewFlipper;

public class Flipper extends Activity {
ViewFlipper flipper;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        flipper = (ViewFlipper) findViewById(R.id.details);

        Button btn = (Button)findViewById(R.id.flip_me);

        btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
flipper.showNext();
}
});

    }
}



#. 동적으로 플리퍼 생성
  a. TabWidget과 유사하게 행 도중에 동적으로 추가할수 있다
  b. 임의의 단어를 가져와 버튼 객체 생성후 모두 ViewFlipper로 추가한다.
  c. 타이머 지정하여 저절로 이동하게 만듬
  d. 애니메이션 효과 사용하였음(내용 방대하므로 기본적인것)

#. main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ViewFlipper android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</ViewFlipper>
</LinearLayout>

#. source
package my.app;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ViewFlipper;

public class Flipper extends Activity {
ViewFlipper flipper;

static String[] items = {"lorem", "ipsum", "dolor", "sit", "amet",
"consectetuer", "adipiscing", "elit",
"morbi", "vel", "ligula", "vitae",
"arcu", "aliquet", "mollis", "etiam",
"vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque",
"augue", "purus"};

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        flipper = (ViewFlipper)findViewById(R.id.details);

        // 애니메이션 지정(어디서 나타나고 어디서 사라지는지)
        flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.drawable.push_left_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.drawable.push_left_out));

for (String item : items) {
// 임의의 단어를 모두가져와 각자 버튼 생성
Button btn=new Button(this);

btn.setText(item);

// ViewFlipper에 모두추가
flipper.addView(btn,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT));
}

flipper.setFlipInterval(2000); // 타이머 설정(일정시간후 자동으로 화면넘김)
flipper.startFlipping(); // 타이머 실행



    }
}

ProgressBar, Tab 동적 기본 예제..

#. 진행상태 표시

  -. 백그라운드 스레드를 사용해 해당작업 처리.
  -. 완료시점 setMax()로 지정, setProgress()로 진행상황 설정(진행상태 확인 getProcess())
  -. 종료시점 명확하지 않을경우 setIndeterminate() 메소드 값 true로 넘겨줌
    => 진행 상황에 관계없이 계속해서 작업 중이라고 표현.


# 탭(Tab) 기본 예제

  -. main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabHost android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="62px">
<AnalogClock android:id="@+id/tab1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
/>
<Button android:id="@+id/tab2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="단순한 버튼"
/>
</FrameLayout>
</TabHost>
</LinearLayout>


  -. source
package my.app;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TabHost;

public class Tab extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost tabs = (TabHost) findViewById(R.id.tabhost);

        tabs.setup();

        // 탭을 사용하기전 반드시 TabHost 인스턴스의 setup()을 호출해얗란다.
        TabHost.TabSpec spec = tabs.newTabSpec("tag1");

        spec.setContent(R.id.tab1); // 내용 불러옴
        spec.setIndicator("시계"); // 탭 글자
        tabs.addTab(spec); // 내용 추가

        spec = tabs.newTabSpec("tag2");
        spec.setContent(R.id.tab2);
        spec.setIndicator("버튼");
        tabs.addTab(spec);

        tabs.setCurrentTab(0); // 기본적으로 표시할 탭

    }
}



# 동적으로 탭 생성
  -. main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabHost android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="64px">
<Button android:id="@+id/buttontab"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="단순한 버튼"
/>
</FrameLayout>
</TabHost>
</LinearLayout>


   -. source
package my.app;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AnalogClock;
import android.widget.Button;
import android.widget.TabHost;

public class Tab extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final TabHost tabs = (TabHost) findViewById(R.id.tabhost);

        tabs.setup();

        // 탭을 사용하기전 반드시 TabHost 인스턴스의 setup()을 호출해야한다.
        TabHost.TabSpec spec = tabs.newTabSpec("buttontab");

        spec.setContent(R.id.buttontab);
        spec.setIndicator("버튼");
        tabs.addTab(spec);

        tabs.setCurrentTab(0);

        Button btn = (Button)tabs.getCurrentView().findViewById(R.id.buttontab);
        btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
TabHost.TabSpec spec = tabs.newTabSpec("시계");

// 해당하는 탭 내용에 들어갈 위젯 생성하는 기능
spec.setContent(new TabHost.TabContentFactory() {

@Override
public View createTabContent(String tag) {
return (new AnalogClock(Tab.this));
}
});
spec.setIndicator("시계");
tabs.addTab(spec);
}
});


    }
}