'Interesting'에 해당되는 글 192

  1. 2008.01.09 [안드로이드]투명바탕 만들기
  2. 2007.12.14 안드로이드 : 노트패드 연습 2
  3. 2007.12.13 연습1 : 노트패드
Interesting/ANDROID | Posted by hyena0 2008. 1. 9. 00:58

[안드로이드]투명바탕 만들기

투명바탕만들기

투명바탕의 APP를 만들려면 다음의 절차를 거치면 된다.

1. AndroidMenifest.xml 파일을 녹색부분과 같이 수정한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.android.transp">
    <application android:icon="@drawable/icon" android:theme="@android:style/Theme.Dark">
        <activity class=".transp" android:label="@string/app_name" android:theme="@style/Theme.Transparent">
            <intent-filter>
                <action android:value="android.intent.action.MAIN" />
                <category android:value="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

2. style 을 추가하고, 투명한 값의 정의를 내린다.
 개발하는 안드로이드 폴더중 values 내에 styles.xml , colors.xml 파일을 아래와 같이 추가한다.

styles.xml
<?xml version="1.0" encoding="utf-8" ?>
 <resources>
  <style name="app_name" />

 <style name="app_name.Transparent">
  <item name="android:windowBackground">@drawable/draw_background</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:foregroundColor">#fff</item>
  </style>
  </resources>

colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
     <drawable name="transparent_background">#a0000000</drawable>
</resources>

3. 메인함수에서 해당  xml을 호출한다.

  setContentView(R.layout.xml_name);

Interesting/ANDROID | Posted by hyena0 2007. 12. 14. 00:13

안드로이드 : 노트패드 연습 2

노트패드 연습 2

 노트패드에 사용자 생성, 편집, 삭제 기능을 추가해 보는 것이 연습 2의 목표이다.

 . 새로운 activity를 생성하고 android manifest를 추가한다.
 . StartSubActivity()를 이용해서 다른 activity를 비동기로 일으킨다.
 . activity들 사이에 데이터 통과
 . 좀더 진보한 화면 레이아웃을 어떻게 사용하나

Step 1
 볼 것들 : String.xml , rows 에 대한 멤버변수, fillData(), onListItemClick() 와 onActivityResult(
 
Step 2
 OnCreate() 메소드를 확인한다. 연습1과 변화없다.

Step 3
 onCreateOptionMenu()에서 파란색 부분을 추가한다.

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(0, INSERT_ID, R.string.menu_insert);
        menu.add(0, DELETE_ID, R.string.menu_delete);
        return true;
    }

Step 4
 onMenuItemSelected()에서 DELETE_ID에 대한 새로운 경우를 추가한다.

@Override
    public boolean onMenuItemSelected(int featureId, Item item) {
        super.onMenuItemSelected(featureId, item);
        switch(item.getId()) {
        case INSERT_ID:
            createNote();
            fillData();
            break;
        case DELETE_ID:
            dbHelper.deleteRow(rows.get(getSelection()).rowId);
            fillData();
            break;
        }
      
        return true;
    }

Step 5
 createNote() 메소드를 채운다. NoteEdit 클래스를 이용해서 노트(ACTIVITY_CREATE)를 생성하기 위해 새 intent를 생성한다.

Intent i = new Intent(this, NoteEdit.class);
startSubActivity(i, ACTIVITY_CREATE);


하지만 아직 NoteEdit는 생성하지 않았다. 뒤에서 보자.

Step 6
 onListItemClick()를 채우자.
사용자가 리스트로부터 아이템을 선택하므로onListItemClick()은 override 된 메소드이다.
이 메소드는 NoteEdit 클래스를 이용해서 노트를 편집하기 위해 intent를 생성한다.

        super.onListItemClick(l, v, position, id);
        Intent i = new Intent(this, NoteEdit.class);   // intent 를 생성
        i.putExtra(KEY_ROW_ID, rows.get(position).rowId); // row id 값을 가져옴
        i.putExtra(KEY_BODY, rows.get(position).body);  // body 값을 가져옴
        i.putExtra(KEY_TITLE, rows.get(position).title); // title 값을 가져옴
        startSubActivity(i, ACTIVITY_EDIT);

putExtra(String name, Object name) 은 intent에 확장된 데이터를 넣는 것이다.

Step 7
 onActivityResult를 다음과 같이 변경한다.

protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras) {
        super.onActivityResult(requestCode, resultCode, data, extras);
       
        // TODO: fill in rest of method
        switch(requestCode) {
        case ACTIVITY_CREATE:
            String title = extras.getString(KEY_TITLE);
            String body = extras.getString(KEY_BODY);
            dbHelper.createRow(title, body);
            fillData();
            break;
        case ACTIVITY_EDIT:
            Long rowId = extras.getLong(KEY_ROW_ID);
            if (rowId != null) {
                String editTitle = extras.getString(KEY_TITLE);
                String editBody = extras.getString(KEY_BODY);
                dbHelper.updateRow(rowId, editTitle, editBody);
            }
            fillData();
            break;
        }
       
    }

Step 8
 note_edit.xml 을 보라.

Step 9
android.app.Activity를 확장해서 NoteEdit 클래스를 생성한다.

Step 10, Step 11
onClick()과 onCreate() 를 채운다.

protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.note_edit);
      
        titleText = (EditText) findViewById(R.id.title);
        bodyText = (EditText) findViewById(R.id.body);
     
        Button confirmButton = (Button) findViewById(R.id.confirm);
      
        rowId = null;
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            String title = extras.getString(Notepadv2.KEY_TITLE);
            String body = extras.getString(Notepadv2.KEY_BODY);
            rowId = extras.getLong(Notepadv2.KEY_ROW_ID);
         
            if (title != null) {
                titleText.setText(title);
            }
            if (body != null) {
                bodyText.setText(body);
            }
        }
      
        confirmButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Bundle bundle = new Bundle();
              
                bundle.putString(Notepadv2.KEY_TITLE, titleText.getText().toString());
                bundle.putString(Notepadv2.KEY_BODY, bodyText.getText().toString());
                if (rowId != null) {
                    bundle.putLong(Notepadv2.KEY_ROW_ID, rowId);
                }
              
                setResult(RESULT_OK, null, bundle);
                finish();
            }
         
        });
    }


Step 12
manifest 파일에 새로운 activity를 채운다.

<activity class=".NoteEdit"/>

Step 13

.
Interesting/ANDROID | Posted by hyena0 2007. 12. 13. 00:37

연습1 : 노트패드

Notepad Exercise 1
 안드로이드 홈피에 나오는 노트패드 연습을 정리합니다.
 
 Step 1
 이클립스에서 Notepadv1를 연다.
 이클립스의 패키지 익스플로러에서 마우스의 오른쪽 클릭을 하고 Import를 선택한다.
 여기서 General/Existing Projects into Workspace를 선택한다.
 Notepadv1의 폴더를 선택하고 finish 버튼을 누른다.
 이클립스 우측하단에 에러표시가 나면, 프로젝트를 선택하고 마우스 오른쪽 키를 누르면 Android Tools->Fix Project Properties 가 있는데 이것을 선택하면 해결된다고 홈피에는 나와있다.
 내가해본 결과로는 Fix 하더라도 문제가 여전히 남고 우측하단에 나온 에러를 더블클릭해서 문제점을 찾는 것이 더 빠른 길인 걸로 보인다.

 Step 2
 DBHelper 를 보라...음...

 Step 3, Step 4
 프로젝트를 선택하고 res/layout 에서 notepad_list.xml를 연다. 아래의 파란부분의 코드를 추가한다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
 // 추가코드
  <ListView id="@id/android:list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
  <TextView id="@id/android:empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/no_notes"/>
//여기까지
</LinearLayout>
 
 Step 5
프로젝트를 선택하고 res/layout 에서 notepad_row.xml를 생성한다. 아래의 코드를 추가한다.

<?xml version="1.0" encoding="utf-8"?>
<TextView id="@+id/text1"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>


 Step 6
 Source 부분에서 Notepadv1 Class를 연다.

 Step 7
 Notepadv1 의 상속성을 Activity 에서 ListActivity 로 바꾼다.

public class Notepadv1 extends ListActivity

 ListActivity로 변경하고 나면 에러가 발생하는데 ctrl-shift-O를 눌러서 import 시킨다.

 Step 8
 Notepadv1 클래스에는 이미 onCreate, onCreateOptionsMenu, onOptionsItemSelected 메소드가 존재하고 있다.

 Step 9
 아래와 같이 변경한다.

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.notepad_list);
        dbHelper = new DBHelper(this);
        fillData();

    }

 Step 10
 onCreateOptionsMenu() 메소드는 아래와 같이 바꾼다.

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        //return super.onCreateOptionsMenu(menu);
     boolean result = super.onCreateOptionsMenu(menu);
        menu.add(0, INSERT_ID, R.string.menu_insert);
        return result;

    }

그리고 에러가 발생하게 되는데, 상수를 정의한다.

public static final int INSERT_ID = Menu.FIRST;

 Step 11
 onOptionsItemSelected()를 채운다.

@Override
    public boolean onOptionsItemSelected(Item item) {
        switch (item.getId()) {
        case INSERT_ID:
            createNote();
            break;
        }
      
        return super.onOptionsItemSelected(item);
    }

 Step 12
 createNote()를 추가한다.

private void createNote() {
        String noteName = "Note " + noteNumber++;
        dbHelper.createRow(noteName, "");
        fillData();
    }


 Step 13
 fillData()를 정의하지 않았으므로 여전히 에러를 표시하고 있을 것이다.

    private void fillData() {
        // We need a list of strings for the list items
        List<String> items = new ArrayList<String>();

        // Get all of the rows from the database and create the item list
        List<Row> rows = dbHelper.fetchAllRows();
        for (Row row : rows) {
            items.add(row.title);
        }
       
        // Now create an array adapter and set it to display using our row
        ArrayAdapter<String> notes =
            new ArrayAdapter<String>(this, R.layout.notes_row, items);
        setListAdapter(notes);
       
    }

 Step 14
  프로젝트를 선택하고 마우스 오른쪽 클릭한 뒤 Run As -> Android Application 하여 실행해보자

 아래 처럼 메뉴를 볼 수 있을 것이다.

사용자 삽입 이미지