android-lecture

android lecture notes

View on GitHub

layout: true .top-line[]


class: center, middle

액션바와 네비게이션


액션바(Action Bar)


액션 아이템


액션 아이템

public class MainActivity extends AppCompatActivity {

    @Override
*   public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
*       inflater.inflate(R.menu.main_menu, menu);
        // R.menu.main_menu => menu/main_menu.xml
        return super.onCreateOptionsMenu(menu);
    }

.footnote[https://github.com/jyheo/AndroidTutorial/blob/master/NavigationUI/app/src/main/java/com/example/jyheo/navigationui/MainActivity.java]


액션 아이템 - main_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/quick_action1"
        android:title="Quick1"
*       android:icon="@drawable/ic_android_black_24dp"
*       app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_settings"
        android:title="@string/action_settings"
*       android:icon="@drawable/ic_settings_black_24dp"
*       app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_subactivity"
        android:title="Sub Activity"/>
    <item
        android:id="@+id/action_navdrawer"
        android:title="Navigation Drawer"/>
</menu>

<div style=”top:200px; right:100px; position:absolute; border:2px solid; background:#fff”; padding: 5px;> app:showAsAction

</div>

.footnote[https://github.com/jyheo/AndroidTutorial/blob/master/NavigationUI/app/src/main/res/menu/main_menu.xml]


액션 클릭 이벤트

public class MainActivity extends AppCompatActivity {
    @Override
*   public boolean onOptionsItemSelected(MenuItem item) {
*       switch (item.getItemId()) {
            case R.id.quick_action1:
                //                
                return true;
            case R.id.action_settings:
                //
                return true;
            case R.id.action_subactivity:
                startActivity(new Intent(this, SubActivity.class));
                return true;
            case R.id.action_navdrawer:
                startActivity(new Intent(this, NavDrawerActivity.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

.footnote[https://github.com/jyheo/AndroidTutorial/blob/master/NavigationUI/app/src/main/java/com/example/jyheo/navigationui/MainActivity.java]


위로 돌아가기(Up 네비게이션)

<application ... >
     <activity
            android:name=".SubActivity"
*           android:parentActivityName=".MainActivity" />
</application>

주의! 백 버튼으로 뒤로 가기는 백 스택에서 이전 액티비티로 가는 것임


위로 돌아가기 – 액티비티

public class SubActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

*       ActionBar actionBar = getSupportActionBar();
        // Support Library를 사용하지 않는다면(즉, Activity를 상속 받았다면) getActionBar()를 호출해야 함

        if (actionBar != null) {
*           actionBar.setDisplayHomeAsUpEnabled(true);

            // [위로 가기 버튼의 모양을 바꾸기 위한 코드]
*           Drawable drawable = getDrawable(R.drawable.ic_keyboard_arrow_left_black_24dp);
*           if (drawable != null) {
*               drawable.setTint(Color.WHITE);
*               actionBar.setHomeAsUpIndicator(drawable);
*           }
        }
    }
}

백 스택(Back Stack)

.footnote[출처: https://developer.android.com/guide/components/tasks-and-back-stack.html]

??? Activity1이 샐행중인 상태에서 Activity2가 실행되고, 다시 Activity3가 실행되면 백스택은 Activity1, 2, 3가 쌓인 상태가 되고 백 버튼을 누르면 백스택 가장 위에 있는 Activity3가 사라지면서 Activity2가 나타나게 됨


태스크(Task)

.footnote[출처: https://developer.android.com/guide/components/tasks-and-back-stack.html]


액티비티 시작(Launch) 모드


액티비티 시작 모드

.left-column-50[

.right-column-50[


액티비티 시작 모드 지정하기

- In Java Code 
```java
Intent singleTop = new Intent();
...
singleTop.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
...
- 인텐트 플래그
    - FLAG_ACTIVITY_NEW_TASK – singleTask 모드
    - FLAG_ACTIVITY_SINGLE_TOP – singleTop 모드
    - FLAG_ACTIVITY_CLEAR_TOP – 이미 액티비티 인스턴스가 foreground 태스크에 존재한다면 위에 있는 액티비티 인스턴스는 모두 제거하고 해당 액티비티의 onNewIntent() 메소드 호출