전체 글 (56) 썸네일형 리스트형 [Flutter] 위젯을 컨트롤하는 방법들 이전 글에서 State 안의 레이아웃을 어떻게 잡아야 하는지 설명했다. 단말 Widget 들은 기껏해야 Text, EdgeInsets, IconButton, Icon 같은 애들이라 만져보면 금방 알 수 있다. 이제 중요한건 배치를 끝낸 후 런타임에서 동작되는 위젯을 어떻게 변경해줄지다. 가령 안드로이드에서 텍스트뷰를 상황에 따라 바꿔주려면 Activity 안에 전역변수로 선언해두고 id 를 먹여준 후 TextView.setText() 해주지 않은가? 사실 플러터에서도 비슷한데, 다른 점이 한 가지 있다. 1. 전역변수로 선언하기 처음 헤맸던게, State 의 build 메서드에 Widget 들을 주렁주렁 달고 나니까 런타임 때 Widget 에 접근할 방법이 없다는 거였다. 언어가 달라서인지 전역변수로 선.. [Flutter] 레이아웃 짜기 1. State 를 만든다 class NewState extends State { @override Widget build(BuildContext context) { return Widget(); } } 하면서 느낀거지만 Widget 은 View 와 비슷하고 State 는 모든 UI 동작이 반영된 상태를 나타내는 듯 하다 2. 자식을 가지는 Widget 플러터 사이트에서도 소개하듯이 '모든것은 Widget'이다. 그리고 내 생각에 Widget 은 두 개로 분류된다. 자식을 가지는가 아닌가. 자식을 가지는 건 안드로이드의 ViewGroup 이라 할 수 있을 것이고 안 가진다면 TextView 같은 단말 View 이리라. 2-1) Container 생성자를 확인하면 가장 간편하다. 컨테이너는 하나의 자식을 .. RememberU 진행상황 현재 진행 중인 앱 화면 별 상황 메인화면 기존 기획된 디자인에서 필터가 가로스크롤 방식으로 변경됐고 구글킵에서 매번 고정표시를 보여주지 않는 것에서 착안해, 위치만으로 충분한 UI 라 판단하여 타이틀에만 북마크 표시를 그렸다. 필터는 하나씩만 선택 가능하고 다시 누르면 필터가 해제되는 방식이다. 직관적이라고 생각한다. 인물추가 버튼인 + 버튼은 동그라미에서 그 모양을 다른 카드와 비슷하게 맞췄다. 디자인 들을 보고 참고했다. 인물추가 화면 사용자에게 입력을 받는 화면은 언제나 어렵다. 디자인사이트를 찾아보니 모두 비슷한 고민을 하는 것 같았다. 그런 고민이 글로 써있진 않았지만 이거저거 시도해보는 모습에서 그렇게 느껴졌다. 어떻게 만들어도 만족스럽지가 않다. 그래서 엉성해보이더라도 이렇게 마무리하려 하.. [Android] Snackbar(스낵바) 띄우기 토스트보다 스낵바가 더 맛있... 아니 더 멋있고 유용하다고 생각한다. 토스트는 뭐 Toas..까지만 쳐도 show 메서드까지 붙여서 자동완성을 해주니 그렇게 어렵다고 느껴지지 않지만 Snackbar는 한방에 쓰기엔 헷갈릴 수 있다. * 스낵바는 머터리얼에 포함된 UI다. (토스트가 widget 에 포함된 것과 대비된다) 1. 스낵바 객체 만들기 Snackbar.make() 메서드를 사용해서 리턴되는 Snackbar 를 얻으면 된다. Snackbar snackbar = Snackbar.make(SettingActivity.this, settingLayout, getString(R.string.all), Snackbar.LENGTH_SHORT); make 메서드는 이렇게 생겼다. com.google.and.. [Android] Read contacts(연락처 가져오기) 지인을 관리하는 앱을 개발 중이다. 맨 처음 연락처를 가져오는 정도가 글로벌 적으로 적당할 것 같아서 사용자에게 한 번 물어본 뒤 권한을 요청하고 가져와서 db에 저장할 계획이다. 그러면 연락처 정보는 어떻게 가져올 수 있을까? 1. 권한 추가 AndroidManifest.xml , 태그 안에 0) { while (cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); Uri p.. [Android] Room 을 사용한 초기 DB구축(외래키(Foreign Key / FK), UNIQUE 포함) 웬만한 앱에는 DB가 필요하다. 지금보다 초보일 때 모든 트랜잭션을 서버로만 연동시켰더니 콜백지옥에 갇혔었기 때문에 더 잘 알고 있다. (ex. 삭제버튼 클릭했을 때 -> 다이얼로그를 띄우고 확인 버튼을 눌렀을 때 -> 서버에 요청하고 응답이 왔을 때 -> 그게 성공했을 때 완료. ㅜㅜㅜ) 최대한 Jet Pack 을 써보자는 입장이라서 SQLiteHelper 대신 Room 을 고수하고 있다. 단, 편리함에 매몰되지 않기 위해 쿼리동작은 항상 신경쓴다. 모델링 우선 서비스를 설명해본다. 복수의 사용자가 클라이언트 앱에 로그인 하여 각기 다른 인맥정보를 본다. 사용자는 파이어베이스의 인증 기능을 활용하여 유니크한 uid 로 식별할 수 있다. 사용자별 인맥과 인맥별 메모를 관리하는 앱이다. 사용자, 인맥, 메.. [Android] CSV 파일 만들기/쓰기 1. Manifest 권한추가 2. 코드 try { File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); File exportFile = new File(path, calHistoryRawData.getHashed().substring(0, 10) + "_" + calHistoryRawData.getOrderNumber() + ".csv"); FileWriter fileWriter = new FileWriter(exportFile); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); for (int j = 0; j < data.le.. [Android] SVG 파일 XML 로 바꿔서 drawable 경로에 넣기 피그마나 공식 문서나 공식 문서들에서 제공하는 템플릿에서 안드로이드에 쓰라고 SVG 벡터 파일로 이미지를 출력해주는 곳들이 있다. 해상도별로 경로에 넣는 방법도 있지만 개인적으로는 벡터파일을 선호하니 포스팅해놓고 다른 글들에서 참조하려고 한다 ㅎㅎ 1. SVG 파일 받아놓기 예시에 쓰이는 파일은 구글로그인 템플릿이다. 보이다시피 확장자가 svg이다. 2. Android Studio 에서 Asset Studio 열기 drawable 경로에서 우클릭한 다음 Vector Asset 선택하면 된다. drawable 우클릭 - New - Vector Asset 바로 Asset Studio 가 열린다. 3. Asset Studio 에서 svg 불러오기 Local file (SVG, PSD) 를 선택하고 Path 에.. 이전 1 2 3 4 5 ··· 7 다음