2018/12

Android/Development Tips

중첩 프래그먼트와 제어 및 헤드리스 프래그먼트

중첩 프래그먼트의 특징은 XML로 추가할 수가 없고, 항상 동적으로 추가해야한다. 그렇기 때문에 부모 프래그먼트는 자식 프레그먼트를 관리하고 자식프래그먼트가 UI를 담당하는 구조로 자주 설계된다. 액티비티에서 프래그먼트를 다룰 때는 getSupportFragmentManager()를 사용하였지만 중첩 프래그먼트를 다룰 때는, getChildFragmentManager()를 사용한다. public class TestFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInsta..

Android/Development Tips

커스텀 뷰의 초기화 시점

보통 캔버스에 그리는 것이 아닌 뷰그룹을 상속받아 내부에 뷰를 사용할때는 생성자에서 xml을 인플레이트 시키고, 이후 인플레이트 된 뷰들을 찾아 사용할때, 시점을 onCreate()에서 초기화 하여 사용했었는데, 더 정확한 시점이 있었다. public CircleProgressView(Context context) { super(context); initView(); //inflate } @Overrideprotected void onFinishInflate() { super.onFinishInflate(); mIvStar = findViewById(R.id.star); mIvRect = findViewById(R.id.rect); mIvCircle = findViewById(R.id.circle);} ..

Android/Development Tips

커스텀뷰와 merge 태그

커스텀 뷰를 만들때 상속받아 뷰와 커스텀 뷰를 포함하는 뷰 그룹과 불필요한 중첩을 피하기 위해 merge 태그를 사용한다. 가령 예를 들어 이런 식으로 사용하면 된다. merge 대신 LinearLayout을 사용할 수 있지만, 저 xml을 사용하는 커스텀 뷰가 LinearLayout을 상속받아 만든 것이라면 LinearLayout 안에 또 LinearLayout이 존재하는데 이 경우 중복 되기 때문에 merge를 사용하면 중첩을 피할수 있다.

Android/Development Tips

안드로이드 패딩과 마진

가끔 패딩과 마진을 헷갈하는 경우를 보아 간단히 정리. 패딩은 뷰 크기에 포함이 되지만, 마진은 포함 되지 않는다. 따라서 패딩으로 지정한 간격은 그 뷰의 배경색으로 칠해지고, 마진으로 지정된 간격은 공백으로 표현된다.

Android/Development Tips

액티비티의 백스택, taskAffinity

안드로이드 백스택은 몇번 봤는데도, 기억에 잘 남지 않아 가볍게 정리 해둡니다. 새로운 액티비티가 시작되면, 실행 중이던 액티비티는 백스택에 들어가게 된다. 그리고 시작된 액티비티는 태스크라는 그룹에 속한다. 내가 보는 책에서는 백스택에 대해서 3가지로 정리하고 있다. 같은 앱에서 시작된 액티비티는 같은 백스택에 쌓인다. TaskAffinity의 속성에 따라 소속되는 태스크가 달라진다. LaunchMode에 따라 액티비티 생성의 여부, 새로운 태스크에 속하는 등 액티비티의 시작이 달리진다. 백스택에 쌓인 액티비티는 뒤로가기 키 등으로 액티비티를 종료하면 스택 자료구조의 특징과 같게 위에서부터 차례로 꺼내어 제거된다. 또한 TaskAffinity는 태스크의 이름으로 이해하는 것이 더 이해하기 쉽다. Tas..

Android/Development Tips

안드로이드 디바이스 설정(언어설정, SIM 교체, 화면 돌림) 데이터 보존

안드로이드 설정 값의 변경이 발생하면, 기본적으로 시스템에서는 현재 액티비티를 폐기하고 새로 생성한다. 예를 들어 화면을 세로에서 가로로 변경하거나, 언어 설정, SIM 교체 등이 있다. 사용자가 앱 가입을 하기위해 정보를 AppcompatEditText등에 입력을 하였는데, 화면 모드 변경으로 인해 현재 액티비티를 폐기하고 새로 생성하면, 기존의 입력된 데이터가 모두 없어져서 사용자에게 불편함을 줄 수 있다. 따라서 이런 디바이스 설정 변경이 있을때는, Bundle 객체에 저장하였다가, onRestoreInstanceState을 오버라이드 하여, 값을 찾아 원래의 뷰에 담아주면 된다. public class TestActivity extends AppCompatActivity { public stati..

Nanamare
'2018/12 글 목록