목록안드로이드 (11)
layered

개념 버튼을 클릭하거나 화면을 터치하게 되면 이벤트라는 것이 만들어지는데, 이는 화면의 어느 부분에 어떻게 동작이 일어났는지에 대한 정보를 담게 된다. 이 이벤트를 가로채는 방법은 크게 두 가지가 있다. 제대로 이해한 게 맞는지 모르겠다... 1 콜백 메서드 재정의 View 클래스는 onTouchEvent()처럼 안드로이드 프레임워크에 의해 호출되는 콜백 메서드를 기본적으로 가지고 있다. 그리고 이를 이용해 이벤트를 가로채려면 클래스를 상속해서 메서드를 재정의해 줘야 한다. 하지만 이벤트 하나 처리하자고 매번 상속하고 재정의하는 것이 번거롭기 때문에, 안드로이드에서는 2와 같은 이벤트 리스너 기능을 지원한다. 뷰 클래스를 어쩔 수 없이 상속해야 하는 경우엔 이벤트 핸들러라는 것을 별도로 지원한다! 메모 ..

개념 표나 엑셀 시트와 같은 형태로 화면을 나타내는 레이아웃. 레이아웃 안에 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 레이아웃 파일은 화면 전체 또는 일부를 어떻게 구성할지 정의하는 파일이다. 따라서 그 목적에 집중할 수 있도록 문자열 파일을 이용해 따로 구분해 주는 것이 좋다. 이 방법은 특히 다국어 지원에서 효율을..

개념 박스 모델을 사용하는 레이아웃. 각각의 뷰를 박스라고 보고 한쪽 방향으로 쌓으면서 화면을 구성한다. 레이아웃 역시 뷰이므로 여러 레이아웃을 묶어서 사용할 수 있다. 따라서 가로 방향(Horizontal)으로 쌓을지, 세로 방향(Vertical)으로 쌓을지를 정하는 orientation 속성을 필수로 적어야 한다. 메모 순차적으로 화면을 구성하는 데에는 유용하지만, 자식 뷰들의 크기를 정하는 건 좀 경직된 것 같다. match_parent를 이용하면 자칫하다가 다른 뷰들을 다 가려버리기 때문에 wrap_content나 값을 직접 지정해야 하기 때문이다. 아, 그래서 layout_weight이 존재하는 것 같다(밑에 설명해 두었다)! 사실상 크기를 정한다기보다는 여유 공간을 분할해서 가져다 붙이는 느낌..

개념 프로젝트를 처음 만들 때의 기본적인 레이아웃으로, 뷰의 크기와 위치를 결정할 때 제약 조건을 사용한다. 제약 조건이란? 뷰가 레이아웃 안의 다른 요소와 어떻게 연결되는지 알려주는 것(= 연결선) 간단하게 말하자면 다음과 같이 연결선을 통해 뷰의 상대적 위치를 정해 줘야 한다는 것이다. 그리고 위치라는 건 언제나 x와 y로 이루어지므로, 가로나 세로 중 하나라도 연결되지 않은 부분이 있다면 에러가 발생한다. 특성 연결점: 말그대로 뷰들을 연결해 주는 점으로 위 사진의 파란 동그라미이다 핸들: 뷰의 크기를 조정한다(꼭짓점의 파란 네모) 타깃: 제약 조건이 가리키는 뷰. 여기서는 벽(...?) 타깃이 될 수 있는 것은 여러 가지가 있다. 1) 같은 레이아웃 내 다른 뷰 2) 부모 레이아웃 3) 가이드라인..