안드로이드 어플리케이션 만들기 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()내부를 수정하면 됩니다.
'[ IT ] > Android, Java' 카테고리의 다른 글
<Android studio> 오류 (XML rendering) (0) | 2016.04.15 |
---|---|
<android studio> + <github> 안드로이드 스튜디오에서 깃허브 사용하기 (4) | 2016.04.12 |
<안드로이드 개발 일지 2주차> ExerApp 제작기 (0) | 2016.03.28 |
<안드로이드 개발 일지 1주차> ExerApp 제작기 (0) | 2016.03.27 |
안드로이드 어플 만들기 실습 오류 해결 - NewActivity.onCreate(NewActivity.java:22) (0) | 2016.01.02 |