안드로이드 스튜디오 FrameLayout, GridLayout, LinearLayout 사용해서 앱 만들기



GridLayout은 TableLayout과 비슷하게 위젯을 표 형식으로 배치할 때 사용하는 Layout인데  


TableLayout은 할 수 없는 행 병합을 할 수 있어서 더 다양하게 만들 수 있습니다.


GridLayoutandroid:rowCount="", android:columnCount="" 속성을 사용해서 row와 column을 미리 지정할 수 있습니다.


GridLayout에 포함되어 있는 위젯에 android:layout_row="android:layout_column="속성을 지정해줘서 해당 위젯)가


몇 번째 행, 몇 번째 column에 위치할 지 지정해 줄 수 있습니다.


android:layout_rowSpan="" , android:layout_columnSpan="" 을 사용해서 몇 개의 행, 열을 합쳐서 사용할지 지정하고


android:layout_columnWeight="", android:layout_rowWeight="" 를 통해 행과 열의 비율을 지정해서 사용할 수 있습니다.




FrameLayout은 위젯을 겹처서 사용하고 싶을때 사용하는 layout입니다.


버튼이 클릭될때 화면이 전환되는 것처럼 보여주기 위해  FrameLayout안에 DatePickerTimePickerLinearLayoutGridLayout을 넣고


위젯의 visibility가 상황에 따라 변하게 설정해 주었습니다.


LinearLayout은 위젯을 수직 혹은 수평으로 배치할 수 있는 layout입니다.


수직으로 배치하고 싶으면 android:orientation="vertical" ,


수평으로 배치하고 싶으면 android:orientation="horizontal" 을 사용하면 됩니다. 







위의 앱은 GridLayout, FrameLayout, LinearLayout을 사용했습니다.


TextView, EditText, Button 외에도 SwitchChronometer, DatePicker, TimePicker를 사용했습니다.


Switch는 두 개의 상태를 표시하는 버튼입니다.


자바 파일에서 .setOnCheckedChangeListener() 이벤트 설정을 통해 상태에 따른 효과를 다르게 줄 수 있습니다.


Chronometer는 시간을 측정하는 위젯입니다.


자바 파일에서 .start()를 통해 Count를 시작 할 수 있고 .stop()을 통해 정지 시킬 수 있습니다.


만약 다시 00:00으로 reset하고 싶으면 .setBase(SystemClock.elapsedRealtime()) 를 사용합니다.


DatePicker는 날짜를 표시하는 위젯입니다.


선택된 정보를 가져오기 위해서는 getYear(), getMonth(), getDayOfMonth()를 사용하는데


DatePicker에서 선택된 정보는 int로 반환되기 때문에 String으로 사용하고 싶다면 형 변환을 해야합니다.

String year = Integer.toString(datePicker.getYear());

String month = Integer.toString(datePicker.getMonth() + 1);

String day = Integer.toString(datePicker.getDayOfMonth());


TimePicker는 시간을 표시하는 위젯입니다.


TimePicker에서 선택된 정보도 int로 반환되기 때문에 String으로 사용하고 싶다면 형 변환을 해야합니다.

String hour = Integer.toString(timePicker.getCurrentHour()) ;

String minute = Integer.toString(timePicker.getCurrentMinute());


아마 TimePicker의 getCurrentHour()와 getCurrentMinute()의 중앙에 밑줄이 그어져 있을텐데


이유는 API 23이후에는 getCurrentHour(), getCurrentMinute()가 사라지고 getHour()와 getMinute()으로 대체되기 때문입니다


저는 API 16을 기준으로 앱을 만들었기 때문에 그냥 getCurrentHour(), getCurrentMinute() 를 사용했습니다.


Button이 실행 중 작동하지 않게 하게 하려면 .setEnabled(false) 다시 작동하게 하려면 Button에 .setEnabled(true)을  사용합니다.


그리고 .setEnabled(false)로 설정된 버튼이 다시 작동하게 하기 위해서는 .setEnabled(true) 값을 설정해 주면 됩니다.



위 앱의 모든 코드는 GitHub에서 볼 수 있습니다!


https://github.com/Ywook/Android.Practice2_2






+ Recent posts