본문으로 바로가기

안드로이드 어플리케이션 만들기 3주차 


- 앞으로 1주일마다 혹은 중간중간 업데이트 사항이 있을 때마다 포스팅 할 예정입니다.

(내용에 틀린부분이 있으면 지적 꼭 부탁드립니다 ! 개발 초보라 제가 이해한 대로 쓰고 있으니 꼭 지적 부탁드립니다.)



SplashActivity에서 ActionBar 없애기


 SplashActivity에도 ActionBar가 나타납니다. 없애주기 위해서 AndroidManifest.xml에서 

<activity android:name=".SplashActivity"
android:theme="@style/Theme.AppCompat.NoActionBar">
</activity>

- AndroidMenifest.xml

액티비티 내부에  android:theme="@style/Theme.AppCompat.NoActionBar"를 추가해줍니다. 지니모션에서 실행하면 액션바가 사라지는 것을 확인할 수 있습니다.




MainActivity에서 ActionBar의 Write버튼을 눌렀을 때 액티비티 전환하기 (ActionBar에서 Intent 사용)


1) Activity와 xml 파일을 추가하고, Manifest에 추가합니다. (이거 안 해서 오류 찾는데 1시간...)

2) MainActivity에 ActionBar 아이템이 선택 되었을 때 실행시키는 함수를 추가합니다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.write_actionBar:
startActivity(new Intent(this, WriteActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}

} 

-MainActivity.class

switch - case를 사용하여, 해당 Item의 id(menu_main.xml에 적혀있는)가 선택 되었을 때 새로운 Activity가 실행되게 합니다.



ActionBar에 뒤로가기 버튼 만들기

1) Activity의 onCreate() 내부에 아래 내용을 추가해준다.

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

-MainActivity.class

구글링 결과 getActionBar().setDisplayHomeAsUpEnabled(true);

를 추가하는 것으로 나오지만, 에러가 발생한다. 이 때는 getActionBar()를 위처럼 getSupportActionBar()로 변경해주면 에러가 사라진다.  


참고 사이트 : http://stackoverflow.com/questions/28144657/android-error-attempt-to-invoke-virtual-method-void-android-app-actionbar-on 

( Android Error [Attempt to invoke virtual method 'void android.app.ActionBar' on a null object reference]) 


2) Activity에 아래 내용을 추가해준다.

public boolean onOptionsItemSelected(android.view.MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// NavUtils.navigateUpFromSameTask(this);
finish();
return true;
}
return super.onOptionsItemSelected(item);
};

-MainActivity.class

주석처리가 된 줄은 액티비티 스택의 최상위로 이동할 때 나머지 액티비티들을 destory 시키는 것이라고 한다. 

+ 추가 : Warning:(45, 9) Method invocation 'getSupportActionBar().setDisplayHomeAsUpEnabled(true)' may produce 'java.lang.NullPointerException' 에러 발생.

 -> 

if(getSupportActionBar()!=null) {

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

형태로 적어준다. 

참고 사이트 : http://smile8916.tistory.com/75 (Action Bar에서 뒤로가기 버튼 만들기)




DatePicker 만들기

1)activity_write.xml에서 DatePicker를 드래그로 가져오고, id값을 설정한다.

2)WriteActivity.class에 DatePicker 변수를 설정하고, onCreate 내부에 datePicker를 설정해준다. 

//datePicker setting
datePicker = (DatePicker) findViewById(R.id.datePicker_write);
datePicker.init(datePicker.getYear(),
datePicker.getMonth(),
datePicker.getDayOfMonth(),
new DatePicker.OnDateChangedListener(){
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
String msg = String.format("%d / %d / %d", year, monthOfYear+1, dayOfMonth);
Toast.makeText(getApplicationContext(),"msg", Toast.LENGTH_SHORT).show();
}
});

-WriteActivity.class의 onCreate()내부

참고 사이트 : http://gtothe1.tistory.com/entry/%EB%82%A0%EC%A7%9C%EC%99%80-%EC%8B%9C%EA%B0%84-DatePicker (날짜와 시간 - DatePicker)



DatePicker Dialog 만들기 - EditText 연동( DatePicker가 조그만한 Dialog창으로 뜸 )


위의 DatePicker는 시험용으로 만들어봤고, 실제로 사용할 DatePicker Dialog를 EditText를 누르면 나오게 만들어봤습니다.

1) xml 파일에서 EditText만들기 

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="date"
android:ems="10"
android:hint="Touch"
android:id="@+id/dateText"
android:onClick="dateDialog"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

-activity_write.xml 

onClick 설정을 해줍니다. 


2) Activity에서 변수 선언

private DatePickerDialog dialog;
private EditText dateText;

3) oncreate() 내부에 객체화를 해줍니다. 

dateText = (EditText)findViewById(R.id.dateText);
dialog = new DatePickerDialog(this, listener, cal.get(cal.YEAR),cal.get(cal.MONTH),cal.get(cal.DATE));

그리고 EditText의 onClick을 설정해주었기 때문에(dateDialog), 해당 함수를 만들어줍니다. EditText입력칸을 누르면 dialog가 나타납니다.

public void dateDialog (View v){
//dialog를 보여주는 메소드
dialog.show();
}

-WriteActivity.class

4) 제일 중요한 Dialog listener를 설정해줍니다. 

private android.app.DatePickerDialog.OnDateSetListener listener = new android.app.DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
dateText.setText(year+"-"+(monthOfYear+1)+"-"+dayOfMonth);
Toast.makeText(getApplicationContext(), year + "" + (monthOfYear+1) + "" + dayOfMonth + "", Toast.LENGTH_SHORT).show();
}
};

-WriteActivity.class

제 경우는 dialog의 확인 버튼을 눌렀을 때 EditText의 입력란에 선택한 날짜가 입력되고, 토스트메시지가 짧게 나오는 것으로 설정했습니다. 바꾸고 싶으신분은 onDateSet()내부를 수정하면 됩니다.