모바일(126)
-
Socket 소켓, Data Stream
Java Socket 스트림 성능 향상 보조 스트림 메모리 버퍼를 제공하여 프로그램의 실행 성능을 향상시킨다. 직접 하드 디스크에 데이터를 보내지 않고 메모리 버퍼에 데이터를 보낸다(쓰기속도 향상) 버퍼는 데이터가 꽉 차게 되면, 데이터를 한꺼번에 하드 디스크로 보낸다. 바이트 기반(바이트 입력 스트림에 연결) 스트림 BufferedInputStream, OutputStream 문자 기반(문자 입력 스트림에 연결) 스트림 BufferedReader, BufferedWriter 파일읽기 FileInputStream fis = new FileInputStrea("경로"); BufferedInputStrea bis = new BufferedInputStream(fis); while(bis.read()!=01)..
2020.11.17 -
NavigationView onNavigationItemSelected not Working, 반응 없음 현상
xml에서 NavigationView가 DrawerLayout 마지막 요소에 존재해야 onNavigationItemSelected 가 호출된다 예를들어 위와 같은 순서로 존재하면 리스너가 작동하지 않게된다 모두 유의하세요~!
2020.11.15 -
MAC OSX에서 터미널 adb 사용하기
윈도우에서만 하다가 맥에서 하려니 모르는게 많다. 윈도우의 경우 sdk 설치 후 콘솔에서 바로 사용이 가능하지만, 맥의 경우는 adb실행파일의 경로를 path에 추가해줘야 사용이 가능하다. path 설정 방법은 다음과 같다. 1. 터미널 실행 2. .bash_profile이 있는지 확인 $ ls -a 3-1. 없으면 생성한다. $ touch .bash_profile 3-2. 있으면 열어준다. $ open -e .bash_profile 4. 내용 입력 후 저장 (cmd+s) export PATH=${PATH}:[SDK가 설치된 절대경로]/tools:${PATH}:[SDK가 설치된 절대경로]/platform-tools export PATH=${PATH}:/Users/UserId/library/android/..
2020.11.11 -
AppBarLayout, ToolBar, CollapsingToolBar 정리
AppBarLayout OnOffsetChangedListener 로 스크롤 상태를 관찰하는것으로 보인다 AppBarLayout.OnOffsetChangedListener ~~ = (appBarLayout,verticallOffset)->{ appBarLayout.post(()->{ int totalOffset = getBinding().appbarLayout.getTotalScrollRagne(); int offset = Math.abs(verticalOffset); float ratio = 0; if(offset!=0){ ratio = (float) offset / (float) totallOffset; } }) }; //스크롤을 위로올리면(아래 방향으로 내려가게) verticalOffset이 -로 ..
2020.11.11 -
슬라이딩 업 레이아웃(SlidingUpPanelLayout) 구현일기..
SlidingUpPanelLayout 요즘 나오는 앱들.. 네이버, 네이버카페 에어비앤비, 빔등등 거의 대부분의 앱에서 사용되고있는 슬라이딩 업 패널 레이아웃이다 혼자 구현하기 버거워서 자료를 찾아보니 오픈소스로 공개되어있는 코드가 있었음.. 아래내용을 gradle에 //sliding up layout implementation 'com.sothree.slidinguppanel:library:3.4.0' 추가하고.. 이런방식으로 구현하면 된다.. 사용법 layout.setPanelSlideListener(new PanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) { // TODO Au..
2020.11.07 -
Kotlin Class, 상속
Class 초기화 class Person (name : String ){ var name = name; } 클래스를 상속하는 경우 반드시 부모 클래스의 생성자를 호출해야 한다. 위에서는 AppCompatActivity의 기본 생성자를 호출하는 것을 확인할 수 있다. 부모 클래스의 생성자가 여러 형태일 경우, 클래스 선언부에서 부모 클래스의 생성자를 호출하는 대신 별도의 생성자 선언에서 부모 클래스의 생성자를 호출하도록 구현할 수 있다. class HelloActivity : View{ constructor(context: Context) : super(context){ } } Class Init // class Student(name : String){ init{ println(name) } } == c..
2020.11.05