본문 바로가기
프로그래밍/안드로이드

안드로이드 액션바 (ActionBar)

by -현's- 2015. 4. 1.
반응형


●액션바(Actionbat)

- 앱 상단에 나오는 네이게이션 모드를 제공해 주는 바이다. 유저의 위치를 확인시켜주고 메뉴등을 제공해 줘서 유저가 앱을 더 편리하게 사용하도록 한다.


안드로이드 버전 11부터는 Activity에 이미 액션바가 지원된다. 개발자가 매니페스트에 설정하지 않으면 나오지 않는것 뿐이었다. 이전 버전 개발시 반드시 ActionBarActivity클래스를 상속 받아야 한다.


- 액션바를 사용하려면 매니페스트에 테마(android:theme="@android:style/~~~)를 추가하면 된다.





●예제1


- ActionBarMain.java

package study.bar;


import com.example.day0328.R;


import android.app.Activity;

import android.os.Bundle;


public class ActionBarMain extends Activity{

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.actionbar_main);

}

}




- actionbat_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    


</LinearLayout>




- manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.day0328"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="11"

        android:targetSdkVersion="21" />


    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_action_search"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="study.bar.ActionBarMain"

            android:theme="@android:style/Theme.Holo.Light"

            android:label="@string/title_activity_action_bar_test" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>


</manifest>















예제2


- 액티비티를 생성할대 Android Activity를 선택하고 Blank Activity를 선택한다.




- ActionBarTest.java

package study.bar;


import android.app.Fragment;

import android.app.FragmentManager;

import android.app.FragmentTransaction;

import android.os.Bundle;

import android.support.v7.app.ActionBarActivity;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.Toast;


import com.example.day0328.R;


public class ActionBarTest extends ActionBarActivity {

FragmentManager manager;

FragmentTransaction trans;

//프레그먼트의 개수가 많을때는 배열을 사용하면 편하다

Fragment[] fragments = new Fragment[3];

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_action_bar_test);

//11버전 이후는 모든 Activity에 Fragment가 지원된다.

manager = this.getFragmentManager();

fragments[0] = (Fragment1)manager.findFragmentById(R.id.frg_1);

fragments[1] = new Fragment2();

fragments[2] = new Fragment3();

}

/*

* 개발자가 액션바에 메뉴를 추가하거나, 수정할려면 앞으로

* 이 메서드가 호출하고 있는 R.menu.~~.xml파일을 수정하면 된다.

*/

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.action_bar_test, menu);

return true;

}

/*

* 사용자가 아이템들을 선택하면, 이벤트가 발생하고

* 해당 아이템 정보가 아래의 메서드의 인수로 전달된다.

* MenuItem item 변수가 이벤트를 일으킨 아이템이다.

*/

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.action_settings) {

Toast.makeText(this, "클릭1", Toast.LENGTH_SHORT).show();

trans = manager.beginTransaction();

trans.replace(R.id.frg_1, fragments[0]);

trans.commit();

return true;

}

if (id == R.id.action_settings2) {

Toast.makeText(this, "클릭2", Toast.LENGTH_SHORT).show();

trans = manager.beginTransaction();

trans.replace(R.id.frg_1, fragments[1]);

trans.commit();

return true;

}

if (id == R.id.action_settings3) {

Toast.makeText(this, "클릭3", Toast.LENGTH_SHORT).show();

trans = manager.beginTransaction();

trans.replace(R.id.frg_1, fragments[2]);

trans.commit();

return true;

}

return super.onOptionsItemSelected(item);

}

}



- activity_action_bar_test.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   

 xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:con="" >


    <fragment

        android:id="@+id/frg_1"

        android:name="study.bar.Fragment1"

        android:layout_width="match_parent"

        android:layout_height="match_parent"/>


</LinearLayout>

 



- res/menu/action_bar_test.xml

<menu 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"

    tools:context="com.example.day0328.ActionBarTest" >


    <item

        android:id="@+id/action_settings"

        android:orderInCategory="100"

        android:title="new"

        android:icon="@drawable/ic_action_new"

        app:showAsAction="always"/>

     <item

        android:id="@+id/action_settings2"

        android:orderInCategory="100"

        android:title="search"

        android:icon="@drawable/ic_action_search"

        app:showAsAction="always"/>

      <item

        android:id="@+id/action_settings3"

        android:orderInCategory="100"

        android:title="@string/action_settings"

        app:showAsAction="always"/>


</menu>




- Fragment1.java

package study.bar;


import com.example.day0328.R;


import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


public class Fragment1 extends Fragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

//3번째 인수는 return한 결과를 시스템이 알아서 구성해주므로

//true로 하지 말고 false로 하면 된다.

return inflater.inflate(R.layout.fragment1, container, false);

}


}




- fragment1.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:background="#0100FF" >

    


</LinearLayout>

 



- Fragment2.java

package study.bar;


import com.example.day0328.R;


import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


public class Fragment2 extends Fragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment2, container, false);

}


}




- fragment2.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:background="#660033" >

    


</LinearLayout>




- Fragment3.java

package study.bar;


import com.example.day0328.R;


import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


public class Fragment3 extends Fragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment3, container, false);

}


}




- fragment3.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:background="#8C8C8C" >

    


</LinearLayout>















반응형

댓글