본문 바로가기

Android/Dev32

LayoutParams의 사용시 주의점, Dp를 Px로 변환하기 1. LayoutParams 사용시 주의점 2. Dp를 Px로 변환하기 1. LayoutParams 사용시 주의점 이전에 Layout의 속성을 xml이 아닌 code상에서 조절하는 방법에 대해서 짧게 글을 쓴 적이 있습니다. LayoutParam의 사용방법에 대해서 약간 더 내용을 추가하고자 합니다. xml의 속성이 다음과 같은 Layout을 가정해 봅시다. 해당 레이아웃에서 LinearLayout의 height를 Code상에서 56dp에서 48dp로 조절하기 위해서는 아래와 같은 방법을 이용하여야 합니다. LinearLayout mLinearLayout = findViewById(R.id.linear1); RelativeLayout.LayoutParams params = new RelativeLayou.. 2020. 4. 3.
Layout의 위치를 xml이 아닌 Code를 통해 조절하기 안드로이드 어플리케이션에서 눈으로 보이는 부분과 실제 기능을 구현하는 부분은 구분되어 있습니다. 앱을 실행하면 Hello world 라는 TextView가 뜨는 간단한 MainActivity 하나로만 구성된 앱이 있다면 보이는 앱의 화면은 MainActivity.xml로 디자인하고, 구현되는 코드부분은 MainActivity.java(코틀린이라면 .kt)로 구현합니다. xml 레이아웃 파일에는 버튼이나 텍스트뷰의 위치, @+id로 부여하는 각 요소들의 id와 같은 속성이 여기에 다 있습니다. 앱을 개발할 때 앱의 특정 기능 실행에 따라 버튼의 위치를 변경한다던지 유기적인 레이아웃을 구성해야 할 때가 있습니다. 레이아웃의 위치를 xml 파일에 설정한 것과 다르게 코드를 통해서 바꾸고 싶다면 아래의 Layo.. 2020. 4. 1.
AsyncTask, Coroutine, RxJava를 이용한 비동기의 구현 비동기를 구현하는 이유 AsynkTask RxJava Coroutine 안드로이드의 어플리케이션은 UI 쓰레드 라고 하는 메인쓰레드가 UI(각종 버튼, 리스트등)를 관리하고 처리합니다. 이 메인쓰레드는 유저의 앱 사용성에 직결된 요소이기 때문에 항상 막힘없이 처리되어야 합니다. 이 때문에, 메인쓰레드를 통해서 할 수 있는 작업에는 안드로이드 OS가 제약을 두고 있습니다. 간단한 예를 들면, 네트워크를 사용하여 정보를 받아 이를 업데이트 하는 작업이 있다고 가정하고, 이를 메인쓰레드에서 수행하려고 하면 NetworkOnMainThreadException을 뿜어내며 앱이 종료되는것을 확인할 수 있습니다. 때문에 비동기를 구현해서 네트워크작업을 처리해주어야 하고, 이를 위한 여러가지 방법들이 존재하는데, 이때.. 2020. 3. 12.
textView를 하이퍼 링크로 만들기 autoLink textview를 하이퍼 링크처럼 보이게 + onClickListener 1. autoLink TextView의 텍스트를 클릭하면 웹브라우저가 열리도록 할 수 있습니다. onClickListner를 달아 세부적인 기능 추가를 할 수도 있으나 간단하게 열릴 수 있도록 하는 옵션은 하단의 autoLink 옵션을 달아주는것으로 충분합니다. android:autoLink="web" 사용방법은 아래와 같습니다. 이외에도 다양한 옵션 부여가 가능합니다. 안드로이드 개발자문서에 따르면 아래와 같습니다. *all로 해두면 자동으로 판단하여 해당 종류에 해당하는 앱을 실행하여 줍니다. all Match all patterns (equivalent to web|email|phone|map). email M.. 2020. 3. 10.
리다이렉트되는 페이지를 Jsoup로 파싱하기 Jsoup는 특정 페이지를 파싱할때 편리하게 사용되는 라이브러리 입니다. 네트워크 작업이기 때문에 메인쓰레드에서 사용할 수는 없고 AsynkTask나 RxJava, Coroutine등을 이용해서 비동기를 구현해 주어야 합니다. 일반적인 사용방법은 아래와 같습니다 public static class GetTITLE extends android.os.AsyncTask { String title; @Override public void onPreExecute() { super.onPreExecute(); progressBar.setVisibility(View.VISIBLE); } @Override public String doInBackground(Void... params) { try { Document d.. 2020. 3. 10.
windowSoftInputMode : 키보드 입력 시의 화면조절 옵션 안드로이드의 EditText등에 포커스가 갈 경우 소프트 키보드가 올라옵니다. 이때, 사용자가 화면 구성요소와 작용하는데 키보드가 방해되지 않도록 화면의 레이아웃이 키보드에 맞게 자동으로 조절되게 됩니다. 하지만, 일부 화면의 경우에는 레이아웃이 변하지 않도록 할 경우가 필요한데, 이때에는 manifest의 activity에 windowSoftInputMode속성을 부여하여야 합니다. ..... ..... 위와 같이 android:windowSoftInputMode="adjustPan"속성을 activity에 지정해 주면 소프트 키보드가 올라올 경우에도 화면의 레이아웃이 조절되지 않습니다. 좀 더 자세한 내용은 구글 개발자 문서의 windowSoftInputMode에 관한 부분을 참고 하시면 됩니다. 2020. 2. 11.
TabLayout이 태블릿에서 작게 나타날때 TabLayout을 사용할 때 태블릿과 같이 큰 화면에서는 아래의 그림과 같이 TabItem이 화면에 꽉차지 않는 경우가 있습니다. 원인은 Widget.Design.TabLayout내부의 xml 설정때문입니다. 자세한 내용은 stackOverflow를 참고 해 주세요. 이때는 아래와 같이 TabLayout의 XML 설정을 간단하게 변경해주면 TabItem이 화면에 꽉차도록 배열됩니다. TabLayout의 XML 속성에 아래와 같이 tabGravity 속성을 간단히 추가해주면 잘 적용되는것을 볼 수 있습니다. app:tabMaxWidth="0dp" app:tabGravity="fill" 2020. 2. 1.
웹뷰 등에서 OnTouchListener 적용하기 일부 View를 사용할 때 ClickListener가 적용되지 않는 경우가 있습니다. Webview 같은경우, 메소드에 setOnClickListener가 존재하지만, 이를 적용해도 아무 작업도 할 수 없습니다. View와 터치로 상호작용 할 경우 일부 UI의 Visible을 조절한다던가 하는 작업이 필요할 때 Listener를 붙여주어야 가능한데 난감한 경우라고 할 수 있습니다. 하지만, 간단한 방법으로 구현할 수 있으니 걱정하지 않으셔도 됩니다. OnTouchListener를 implements 해주는것으로 OnTouchListener를 사용할 수 있습니다. public class SomeFragment extends Fragment implements View.OnTouchListener { Vie.. 2020. 1. 29.
리사이클러뷰 역순으로 출력하기 리사이클러뷰를 사용할 때, 아이템을 역순으로 출력해야 하는 경우가 있습니다. SQL등에서 가져온 아이템을 역순으로 뽑아서 출력하는 방법도 있지만 Layoutmanager를 이용하면 아주 간단하게 역순으로 출력할 수 있습니다. LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true); recyclerView.setLayoutManager(mLayoutManager); 2020. 1. 29.
화면크기에 따라 일정한 비율로 크기가 자동조절되는 TextView 모바일 기기, 특히 안드로이드 기기들은 다양한 화면크기와 해상도를 가지고 있습니다. 따라서 앱의 UI를 디자인할 때 각 요소들의 사이즈를 주의해서 설정 해 주어야 합니다. 버튼이나 이미지와 같은 UI 오브젝트에 px 이나 inch 값을 주게되면 기기마다 다른 크기로 보이게 되기 때문에 기기에 무관하게 동일한 크기로 보일 수 있도록 dp 값을 사용하는것이 기본이 된지 오래되었습니다. 같은 dp 값을 가지고 있다면 해당 오브젝트는 어떤 기기에서도 거의 동일한 크기로 보이게 되는데 기기의 화면크기가 모두 다르다는데서 또다른 문제가 다시 한번 발생합니다. 예를 들어 가로 900dp 세로300dp의 오브젝트를 배치한다고 가정해 보면, 작은 스크린 사이즈의 기기에서는 해당 오브젝트가 잘리게 되기 때문입니다. 특정한.. 2019. 7. 13.