목록분류 전체보기 (23)
layered
https://www.acmicpc.net/problem/27447 27447번: 주문은 토기입니까? 첫 번째 줄에는 손님의 수를 나타내는 정수 $N$과 토기에 담겨진 커피가 흙탕물이 되는 시간을 나타내는 정수 $M$이 공백을 사이에 두고 주어진다. ($1\le N,M\le 1\, 000\, 000$) 두 번째 줄에는 각 손님 www.acmicpc.net 한별이는 매시간마다 다음 중 하나의 일을 할 수 있다. 1. 토기를 만든다 2. 커피를 담는다 3. 서빙한다 이 일들은 시간과 횟수의 두 가지 관점에서 볼 수 있는데 1. 토기는 언제든 만들어도 되고 남아도 상관이 없다 2. 커피는 너무 일찍 담으면 흙탕물이 되므로 제한된 시간 내에 만들어야 한다 3. 서빙은 손님이 방문한 시간에 해야 하므로 고정되어 ..
개념 표나 엑셀 시트와 같은 형태로 화면을 나타내는 레이아웃. 레이아웃 안에 TableRow 태그를 통해 행을, 그 안에 여러 개의 뷰들을 넣는 방식으로 열을 구상한다. (TableRow 말고 다른 걸 넣을 수도 있다고 한다.) 안에 넣은 뷰들은 왼쪽부터 순서대로 0, 1, 2 ...와 같은 열 번호를 부여받는다. 메모 테이블 레이아웃의 자식 뷰들은 layout_width와 layout_height에 제약이 걸려 있다. TableRow의 layout_width와 layout_height는 설정할 수 없으며 고정된 값은 각각 match_parent, wrap_content이다. (가로 공간을 꽉 채우기 위함이다!) 나머지 자식들의 layout_height는 설정할 수 있다. TableRow 안에 들어 있는..
계속 수정할 예정! 4/11 두 시간이나 걸렸다... 별점 부분은 힘들어서 다음에 하려고 남겨 뒀다...ㅎㅎ 확실히 개념만 공부하는 거랑 적용하는 건 너무 달라서 연습이 많이 필요한 것 같다. 레이아웃이나 속성을 제대로 사용했는지도 모르겠다. 왜 점점 디자인 화면보다는 xml 코드를 직접 건드리게 된다고 하는지 느꼈다. Attributes에서 속성을 찾는 것보다 쓰는 게 훨씬 빠르다. 스크롤뷰는 공부를 안 하고 넘어와서 이게 어떻게 되는 걸까 싶었는데, 스크롤뷰를 화면에 넣고 안을 열심히 채우다 보면 화면에 스크롤이 생긴다! 보다 보니 내부적으로 스크롤뷰가 인식되는 과정이 궁금해서 이건 한번 찾아봐야겠다. 개인적으로 예매하기 부분은 스크롤하는 게 아니라 화면의 밑에 고정하고 싶어서 시도해 봤는데 의도한 ..
메모는 개인적으로 느낀 부분을 아무렇게나 적은 것이어서 오류가 있을 수 있다! 개념 보통 뷰에 이미지를 넣을 때에는 background라는 속성을 사용하게 된다. 하지만 만약 좋아요를 눌렀을 때 하트가 칠해지는 것처럼, 어떤 이벤트가 발생할 때 이미지에 변화를 주고 싶다면 어떻게 해야 할까? 이때 드로어블을 사용하게 된다. 드로어블은 뷰에 설정할 수 있는 객체로, 그 위에 그래픽을 그릴 수 있다. 상태에 따라 그래픽이나 이미지가 선택적으로 보이게 할 수도 있다. 따라서 이미지 같은 것을 그냥 바로 /res/drawble에 넣는 게 아니라 xml로 만들어서 넣게 된다. A Drawable is a general abstraction for "something that can be drawn." 안드로이드 ..
개념 여러 개의 뷰가 중첩된 경우 가장 위에 있는 하나의 뷰만 화면에 보여준다. visibility 속성을 통해 뷰를 화면에 보이거나 보이지 않게 설정할 수도 있다. 뷰를 전환하는 느낌으로 많이 사용된다. 코드는 이렇다! public class MainActivity extends AppCompatActivity { int index; int arr[]; ImageView images[]; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); index = 0; arr = new int[] { 1, 0 }; images = new..
개념 제약 레이아웃 이전에 기본으로 사용되던 레이아웃으로, 다른 뷰와의 상대적 위치를 이용해 화면에 배치한다. 중첩된 뷰 그룹을 없애고 레이아웃 계층 구조를 평면으로 유지하여 성능을 개선한다. 팔레트에서 Layouts가 아니라 legacy 항목에 있다! 이걸 리니어 레이아웃으로 구현하면 Button 5가 Button 6를 가리게 된다. 레이아웃에 의해 위쪽부터 아래쪽으로 자리하게 되므로 Button 5는 다음 버튼이 어디서부터 시작하는지 모르기 때문이다. 추가: 해보니까 리니어 레이아웃으로도 가능하긴 하다! 2023.04.05 - [안드로이드/안드로이드 앱 프로그래밍] - 3. 리니어 레이아웃(LinearLayout) 상대 레이아웃으로 만들 수 있는 화면 레이아웃은 모두 제약 레이아웃으로도 가능하므로, ..
에디트텍스트(EditText) 사용자로부터 값을 입력받을 때 사용한다. 입력하는 문자의 유형을 다양하게 설정할 수 있다. 속성 설명 XML 예시 hint 입력 안내 글자 표시 android:hint="글자를 입력하세요!" textColorHint hint 글자 색상 지정 inputType 입력하는 문자 유형 지정 기본값은 textPersonName 여러 개 지정 가능! android:inputType="date|textPersonName" selectAllOnFocus 문자열 전체 선택 (그 더블 클릭하면 글자들 파란색 되는 그 느낌...) 기본적으로는 커서를 갖다 대면 문자열의 마지막에 위치함 android:selectAllOnFocus="true" cursorVisible 커서 노출 여부 androi..
개념 화면에 글자를 보여주는 역할을 한다. 사실상 글자를 사용하는 모든 뷰들의 부모 클래스라고 할 수 있다. 글자는 text 속성에 추가하면 되는데 다음과 같이 2가지의 방법이 있다. 1 직접 글자를 넣는다 하드코딩이라고도 하는데, 데이터가 코드에 그대로 드러나므로 그렇게 좋은 방법은 아니다. 특히 데이터를 변경할 때엔 해당 데이터가 작성된 부분을 일일이 다 고쳐야 하기 때문에 번거롭다. android:text="Hello World!" 2 strings.xml에 정의한 문자열을 참조한다 기본적으로 XML 레이아웃 파일은 화면 전체 또는 일부를 어떻게 구성할지 정의하는 파일이다. 따라서 그 목적에 집중할 수 있도록 문자열 파일을 이용해 따로 구분해 주는 것이 좋다. 이 방법은 특히 다국어 지원에서 효율을..
개념 - 화면에 있는 모든 구성 요소들(버튼, 텍스트 등등) - 직사각형의 영역을 차지한다 - 그리기 및 이벤트 처리를 담당 - 다른 뷰를 상속해서 속성을 그대로 사용할 수 있다 ex) TextView -> Button 텍스트 뷰 하나 가져다놓고 태그만 슬쩍 바꾸면 버튼이 된다 뷰 그룹(View Group) - 뷰들을 하나로 묶은 것 - 뷰 클래스를 상속했기 때문에 역시 뷰처럼 다룰 수 있다 - 뷰와 뷰 그룹의 관계는 여러 디자인 패턴 중 컴포지트 패턴으로, 뛰어난 확장성을 가진다 컴포지트 패턴(Composite Pattern): 객체들을 트리 구조로 묶은 것 위젯과 레이아웃 뷰와 뷰 그룹의 역할을 구분하기 위해 뷰의 종류에 따라 이름을 붙인다 - 위젯(Widget): 일반적인 컨트롤의 역할을 하는 뷰 ..
개념 박스 모델을 사용하는 레이아웃. 각각의 뷰를 박스라고 보고 한쪽 방향으로 쌓으면서 화면을 구성한다. 레이아웃 역시 뷰이므로 여러 레이아웃을 묶어서 사용할 수 있다. 따라서 가로 방향(Horizontal)으로 쌓을지, 세로 방향(Vertical)으로 쌓을지를 정하는 orientation 속성을 필수로 적어야 한다. 메모 순차적으로 화면을 구성하는 데에는 유용하지만, 자식 뷰들의 크기를 정하는 건 좀 경직된 것 같다. match_parent를 이용하면 자칫하다가 다른 뷰들을 다 가려버리기 때문에 wrap_content나 값을 직접 지정해야 하기 때문이다. 아, 그래서 layout_weight이 존재하는 것 같다(밑에 설명해 두었다)! 사실상 크기를 정한다기보다는 여유 공간을 분할해서 가져다 붙이는 느낌..