티스토리 뷰

Android

[Android]액션바와 탭 사용하기

감자형 2017. 9. 25. 00:32
  • 액션바와 탭 사용하기
1
액션바 자체가 상단에 있으면서 기능이 다양해 졌다. (툴바의 기능도 하고 있다)
cs


  • 안드로이드 메뉴
1
2
3
4
-[메뉴]버튼은 안드로이드가 아이폰과 다른 특징을 보여주는것들 중의 하나
-메뉴 버튼을 누르면 숨어 있던 메뉴가 보이게 되는데, 이 메뉴를 어플리케이션에서 구현 할 때는 옵션 메뉴(Option Menu)라고 부른다.
-옵션 메뉴를 비롯한 안드로이드에서 제공하는 메뉴는 크게 두 가지임.
 
cs
  • 옵션 메뉴
    1
    2
    3
    4
    1. 하드웨어 [메뉴] 버튼을 눌렀을 때 나타나는 메뉴로 각각의 화면마다 설정된 주요 메뉴
     
    2. 옵션 메뉴는 최대 6개 까지의 메뉴 아이템을 포함 할 수 있으며, 그 이상의 메뉴 아이템을 추가하면 "more" 라는 메뉴 아이템으로 표시 된다.
     
    cs
  • 컨텍스트 메뉴
1
2
3
- 화면을 길게 누르면 메뉴로 텍스트뷰의 편집 상태를 바꾸거나 할 때 사용하는 메뉴임
 
- 뷰에 설정하여 나타나게 할 수 있음(팝업창으로 나타나낸 화면)
cs
  • Example_OptionMenu 프로젝트 생성
1. 우리는 메뉴를 별도의 xml로 정의 할것이다. 
res-> new -> android resource directory (menu 라는 폴더를 생성 할 것이다)
2. menu -> new resource file (file name : menu_main.xml)
메뉴 태그가 최상위 태그로 되있는것을 볼 수 있다.

3. menu item 끌어다가 추가 text탭에서 속성 추가 (item)

4. drawble 폴더에다가 menu 아이콘을 넣는다.

5. 이제 Main.java로 와서 generate-> onCreateOptionMenu() 를 오버라이드 한다.

6. onOptionItemSelected() 또한 오버라이드

7. 버튼 클릭시 토스트 메시지 띄우기

8. 액션바 영역이 우리가 추가 한것이 아닌데 처음부터 항상 보인다.(res -> values ->style.xml)을 보면
AppTheme이 있는데, 이 다크 액션바를 바로 갖다 쓰겠다라는것이다. -> 이것은 메니페스트에서 설정을 해놓은 것을 볼수 있다.

1
2
3
4
5
6
7
8
9
10
11
<resources>
 
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
 
</resources>
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.example_optionmenu">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
cs
9. 우리가 style.xml을 noActionbar 라고도 바꿔도 액션바가 사라진것을 볼 수 있을것이다. 결국 우리가 style.xml파일을 수정하면 바뀌게 될것이다.

10. onCreate 함수로 가서 getSupportActionBar() 를 받아오자.

11. ActionBar 라는것에 hide() 메소드를 해보면 액션바가 사라진것을 알 수 있다.


1
2
3
ActionBar abar = getSupportActionBar();
abar.hide();
 
cs
12. 이제 액션바에다가 기본 메뉴를 넣고 아이콘처럼 보이게 만들어 주는방법 말고, 아예 거기에 레이아웃을 넣어 보도록 해보자. 특정위치에 넣기 위한 레이아웃을 만들 수 있다
layout -> new -> resource file(name : search_layout.xml) 파일을 생성 한다

13. menu_main.xml 파일 수정 해본다

14. 우리는 search_layout.xml 파일을 menu_search 대신에 넣어 버릴것이다
그러면 화면은 새로고침 아이콘 - 검색 ______ - 설정 이 액션바에 나타날 것이다.

<MainActivity.java>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.example.example_optionmenu;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
 
import static com.example.example_optionmenu.R.layout.activity_main;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(activity_main);
 
        //ActionBar abar = getSupportActionBar();
        //abar.hide();
 
 
    }
 
    // menu xml 파일을 가져오기위한 메소드
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    // 이제는 메뉴가 만들어진것들이 동작하게 만들 것이다.
    // override
 
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int curId = item.getItemId();
        switch (curId) {
            case R.id.menu_refresh:
                Toast.makeText(this"새로 고침메뉴 클릭됨", Toast.LENGTH_LONG).show();
                break;
            case R.id.menu_search:
                Toast.makeText(this"검색 메뉴 클릭됨", Toast.LENGTH_LONG).show();
                break;
            case R.id.menu_settings:
                Toast.makeText(this"설정 메뉴 클릭됨", Toast.LENGTH_LONG).show();
                break;
            default:
                break;
 
 
        }
        return super.onOptionsItemSelected(item);
 
    }
 
}
cs
<activity_main.xml>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.example_optionmenu.MainActivity">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
</android.support.constraint.ConstraintLayout>
cs
<search_layout.xml>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="검색"
        android:textSize="20dp"
        android:textColor="#ffad8745"
        />
 
    <EditText
        android:id="@+id/editText"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"/>
 
</LinearLayout>
cs

  • <실행 결과>


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함