개발하는 두더지

안드로이드 toolbar 중복 코드 지우기 본문

Java,Android

안드로이드 toolbar 중복 코드 지우기

덜지 2018. 4. 21. 01:31

포스팅 이유

서비스 앱 개발이나 토이 프로젝트를 진행하면서 빠르게 초기 스켈레톤 구조를 구성하기 위해 포스팅을 합니다.

저는 아래와 같은 상황일 때 코드를 줄이기 위해 사용합니다.

1. ActionBar 대신 Toolbar를 사용할 때

2. Toolbar를 xml, activity 마다 정의해서 코드가 중복될 때




프로젝트 시작시 자주 쓰는 스켈레톤 구조


style.xml

Custom Toolbar를 사용하기 위해 기본 AppTheme을 NoActionBar로 적용

<!-- 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>



BaseActivity.java

BaseActivity를 상속받은 Activity들은 toolbar 이름, 뒤로가기 버튼이 활성화된다.

abstract public class BaseActivity extends AppCompatActivity {

private Toolbar toolbar;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResource());
configureToolbar();
}

protected abstract void initLayout();            
protected abstract void setDefaultSettings();    
protected abstract int getLayoutResource();
protected abstract int getTitleToolBar();

private void configureToolbar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(getTitleToolBar());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}

}



toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:background="?attr/colorPrimary">
</android.support.v7.widget.Toolbar>




activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">

<!--Custom Toolbar-->
<include layout="@layout/toolbar" />


</android.support.constraint.ConstraintLayout>



MainActivity.java

onCreate에 setContentView(R.layout.activity_main); 이 BaseActivity로 이동함.

public class MainActivity extends BaseActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

initLayout();
setDefaultSettings();
}

@Override
protected void initLayout() {
//UI 초기화
}

@Override
protected void setDefaultSettings() {
//UI 외에 기본으로 설정되어야할 동작 초기화
}

@Override
protected int getLayoutResource() {
return R.layout.activity_main;
}

@Override
protected int getTitleToolBar() {
return R.string.app_name;
}
}


Comments