ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 하나의 툴바를 여러개의 액티비티에 동일하게 적용하기
    Tip&Tech/안드로이드 스튜디오 2018. 11. 5. 12:21

    툴바를 만들어 사용할때 메인액티비티에만 사용하는게 아니라 원하는 액티비티에 이 툴바를 동일하게 사용하고 싶다면 어떻게 해야 할까? 액티비티마다 일일히 반복해서 만들어야 한다면 여간 귀찮은게 아니다. 편리한 방법이 있다. 공통으로 하나를 만들어 놓고 상속 받아서 사용하면 된다.
    일단 새로운 프로젝트를 만든다.

    그리고 공통으로 사용될 새로운 액티비티를 만들자. 적당히 BaseActivity라고 이름을 지어 준다. 

    <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources>

    기존 액션바를 사용하지 않도록 styles.xml파일을 NoActionBar로 수정해 준다. 앱바가 사라진다.
    이제 공통으로 사용되는 BaseActivity를 설정해 주자.

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/fullView" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" app:titleTextColor="@android:color/white" android:layout_width="match_parent" android:layout_height="?actionBarSize" android:background="@color/colorPrimary" /> <FrameLayout android:id="@+id/activity_content" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>

    activity_base.xml을 위와 같이 툴바를 넣어 주고 구성해 준다.

    <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- "Mark Favorite", should appear as action button if possible --> <item android:id="@+id/action_menu1" android:title="메뉴1" app:showAsAction="ifRoom"/> <item android:id="@+id/action_menu2" android:title="메뉴2" app:showAsAction="ifRoom"/> <!-- Settings, should always be in the overflow --> <item android:id="@+id/action_settings" android:title="설정" app:showAsAction="never"/> </menu>

    res>menu>mymenu.xml 을 추가해 준다. 툴바에 넣어서 메뉴로 사용된다.

    public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base); } @Override public void setContentView(int layoutResID){ LinearLayout fullView = (LinearLayout) getLayoutInflater().inflate(R.layout.activity_base, null); FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content); getLayoutInflater().inflate(layoutResID, activityContainer, true); super.setContentView(fullView); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); //툴바 사용여부 결정(기본적으로 사용) if(useToolbar()){ setSupportActionBar(toolbar); setTitle("툴바예제"); } else { toolbar.setVisibility(View.GONE); } } //툴바를 사용할지 말지 정함 protected boolean useToolbar(){ return true; } //메뉴 등록하기 @Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.mymenu, menu); return true; } //앱바 메뉴 클릭 이벤트 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_menu1: Toast.makeText(getApplicationContext(),"메뉴1 클릭", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(this, SubActivity.class); startActivity(intent); return true; case R.id.action_menu2: Toast.makeText(getApplicationContext(),"메뉴2 클릭", Toast.LENGTH_SHORT).show(); Intent intent2 = new Intent(this, Sub2Activity.class); startActivity(intent2); return true; case R.id.action_settings: // User chose the "Settings" item, show the app settings UI... Toast.makeText(getApplicationContext(),"앱설정", Toast.LENGTH_SHORT).show(); return true; default: // If we got here, the user's action was not recognized. // Invoke the superclass to handle it. return super.onOptionsItemSelected(item); } } }

    BaseActivity 자바 파일의 코드를 작성해 준다. 앞으로 다른 액티비티들이 이것을 상속 받아서 공통된 툴바를 사용하게 될것이다. 메인액티비티 이외에 메뉴1, 메뉴2를 클릭하면 열리게 할 액티비티 두개를 추가해 준다. 먼저 메인액티비티부터 보자.

    public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }

    간단하다. extends BaseActivity 라고 해주면 끝이다. 앞으로 추가되는 액티비티들에게도 마찬가지로 BaseActivity를 상속받도록 해주면 툴바가 나타나게 된다. 

    public class Sub2Activity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub2); Button bt_close = (Button) findViewById(R.id.button_close); bt_close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); } @Override protected boolean useToolbar(){ return false; } }

    툴바를 공통으로 사용할때가 있고 사용하고 싶지 않을때가 있다. 그래서 BaseActivity에 사용여부를 설정하는 메소드를 정의해 놓았다. 이 메소드를 false로 오버라이드 해주면 된다. 위 액티비티에서는 툴바가 나타나지 않는다.



    댓글 2

Designed by Tistory.