라벨이 개발인 게시물 표시

android getSharedPreferences 사용법. kotlin

getSharedPreferences을 사용하면  키-값 데이터 저장을 위해 간단하게 사용할 수 있다. Androd studio 오른쪽 하단의 Device Explorer를 열면 저장된 폴더에 접근할 수 있다. 저장 폴더의 위치는 다음과 같다. /data/data/{packageName}/shared_prefs/ getPreferences도 동일하게 사용할 수 있다. getSharedPreferences는 프로젝트의 모든 곳에서 동일한 키값에 접근할 수 있지만  getPreferences는 호출된 액티비티에서만 접근할 수 있다. 코드. private fun load () { val sharedPref = getSharedPreferences( "configApp" , Application. MODE_PRIVATE ) val configVersion = sharedPref.getString( "configVersion" , "" ) } private fun save () { val sharedPref = getSharedPreferences( "configApp" , Application. MODE_PRIVATE ) val editor: SharedPreferences.Editor = sharedPref.edit() editor.putString( "configVersion" , "appVersion" ) editor.commit() }

android 전역 폰트 변경. kotlin

사용하는 테마 설정에 android:typeface 을 추가한다. 코드를 실행한다. 코드 실행후 현재 액티비티에 적용하려면 액티비티 리스타트를 해야 한다. styles.xml <style name ="AppTheme" parent ="Theme.AppCompat.DayNight.DarkActionBar" >      <item name ="android:typeface" > serif </item> </style> 코드. fun setFont (defaultFontNameToOverride: String , newFontFileNameInAssets: String): Boolean { try { val fontMaintext = Typeface.createFromAsset(context(). assets , newFontFileNameInAssets) val defaultFontTypefaceField: Field = Typeface:: class . java .getDeclaredField(defaultFontNameToOverride) defaultFontTypefaceField.setAccessible( true ) defaultFontTypefaceField.set( null, fontMaintext ) } catch (e: java.lang.Exception) { return false } return true } 액티비티 리스타트. val intent: Intent = getIntent() finish() startActivity(intent)

android theme 다크 테마 구현. kotlin

스타일은 DayNight 를 상속받게 해야한다.  이후 setTheme 로 적용한다. setTheme 실행후 현재 액티비티에 적용하려면 액티비티 리스타트를 해야 한다. styles.xml <style name ="AppTheme" parent ="Theme.AppCompat.DayNight.DarkActionBar" > 코드. val LIGHT_THEME = "light" val DARK_THEME = "dark" val DEFAULT_THEME = "system" fun setTheme (themeName: String) { when (themeName) { LIGHT_THEME -> { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate. MODE_NIGHT_NO ) } DARK_THEME -> { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate. MODE_NIGHT_YES ) } else -> { if (Build.VERSION. SDK_INT >= Build.VERSION_CODES. Q ) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate. MODE_NIGHT_FOLLOW_SYSTEM ) } else { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate. MODE_NIGHT_AUTO_BATTERY ) } } } } 액티비티 리스타트. val intent: Intent

android RecyclerView의 TextView에서 textIsSelectable ="true "가 작동하지 않을때 해결방법.

android  RecyclerView의 TextView에서 textIsSelectable ="true "가 작동하지 않는다. - 증상. 리스트 상단에서는 텍스트 선택이 되다가 하단으로 스크롤 시키면 텍스트가 선택되지 않는다. - 해결. Adapter의 onBindViewHolder에 다음과 같은 코드를 추가한다. override fun onBindViewHolder (holder: TextHolder , position: Int) { holder.textView.setTextIsSelectable( false ) ; holder.textView.measure(- 1 , - 1 ) ; holder.textView.setTextIsSelectable( true ) ; } - 출처. https://stackoverflow.com/questions/36801486/androidtextisselectable-true-not-working-for-textview-in-recyclerview

안드로이드 툴바 ScrollView 스크롤시 툴바 감추기. kotlin

NestedScrollView 대신 ScrollView로 스크롤시 툴바를 감출수 있다. ScrollView에 다음 속성을 넣어주면 된다. android:nestedScrollingEnabled="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns: android ="http://schemas.android.com/apk/res/android" xmlns: app ="http://schemas.android.com/apk/res-auto" android :id ="@+id/coordinator" android :layout_width ="match_parent" android :layout_height ="match_parent" android :fitsSystemWindows ="true" > <com.google.android.material.appbar.AppBarLayout android :id ="@+id/appBarLayout" android :layout_width ="match_parent" android :layout_height ="wrap_content" > <androidx.appcompat.widget.Toolbar android :id ="@+id/toolbar" android :layout_width ="match_parent" android :layout_height ="?attr/actionBarSize"

Visual Studio Code(VS Code) Settings Sync 설정 동기화가 내장기능이 됐습니다.

이미지
설정 동기화가 VS Code의 내장 기능으로 출시 됐습니다. ms나 github 계정으로 로그인하고 기능을 켜주면 됩니다. 셋팅 가이드. https://code.visualstudio.com/docs/editor/settings-sync July 2020 (version 1.48) 버전부터 지원합니다. https://code.visualstudio.com/updates/v1_48

kotlin SharedPreferences Generic MutableList 읽기, 쓰기.

https://stackoverflow.com/questions/7361627/how-can-write-code-to-make-sharedpreferences-for-array-in-android stackoverflow 에 올라온 코드를 참조해 제네릭하게 만들어 봤습니다. 사용법은 아래와 같습니다. val sharedPref = getSharedPreferences("config", MODE_PRIVATE) setArrayPref<String>(sharedPref, "testList ", <<inList>> ) val testList = getArrayPref<String>(sharedPref, "testList") fun < T > setArrayPref (prefs: SharedPreferences , key: String , values: MutableList< T >) { val editor = prefs.edit() val jArray = JSONArray() for (i in 0 until values. size ) { jArray.put(values[i]) } if (values. isNotEmpty ()) { editor.putString(key , jArray.toString()) } else { editor.putString(key , null ) } editor.commit() } fun < T > getArrayPref (prefs: SharedPreferences , key: String): MutableList< T > { val json = prefs.getString(key , null ) val list = mutableListOf < T >() if (json

python 실행파일 만들기.

1. pyinstaller을 설치합니다. pip install pyinstaller 2. exe로 만들 파이썬 파일이 있는 폴더에서 아래 명령어를 실행합니다. pyinstaller -w -F test.py -w 콘솔창 뜨지 않게 하기. -F 실행파일 하나만 만들기. 3. dist 폴더안에 실행 파일이 있습니다.

Kotlin 문법 정리.

// 주석. /* 주석 */ // private 현재 파일에서만. // internal 같은 모듈에서만.  // protected 상속받은 클래스에서. class Test {     // Double, float, Long, int, Short, Byte, String, Char     val hello : String = """ hi                             hello """     // val 읽기 전용, var 쓰기 가능.     val a: Int = 1       var b: Int? = null       // lateinit 늦은 초기화.     lateinit private var mHandler: Handler     fun voidFunc() {}     fun sum(a: Int, b: Int) = a + b     fun sum(a: Int, b: Int = 10): Int { return a + b }     // int? 널타입 리턴 가능.     fun parseInt(str: String): Int? { return null }          fun NullCheck() {         var aa: Int? = 11         var bb: Int? = null           var cc: Int = aa!! // !! 널이 아님을 보증.         var str: String? = null         var ch : Char = str?.get(1) // ?. 널이 아닐때 호출         var ch2 : Char = str?.get(1) ?: 'a' // ?: 널일때 호출     }     fun StringTemplates() {          val s1 = "a is $a"          val s2 = "${s1.replace("is", "was&qu

Kotlin 개발 참고.

https://kotlinlang.org https://kotlinlang.org/docs/reference/  - 레퍼런스. https://play.kotlinlang.org  - 온라인 연습. https://kotlinlang.org/docs/reference/basic-syntax.html  - 간단 문법. https://play.kotlinlang.org/byExample/overview  문법 예제. https://github.com/android/user-interface-samples  - 실제 사용예를 볼수 있다. https://kotlinlang.org/docs/reference/collections-overview.html  - 콜렉션. https://kotlinlang.org/docs/reference/functions.html  - 함수, 람다. https://kotlinlang.org/docs/reference/classes.html  - 클래스. https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html  - 코루틴. https://kotlinlang.org/api/latest/jvm/stdlib/  - Kotlin Standard Library.

android studio assets raw 차이.

res/, assets/ - res 레이아웃, 아이콘 등이 위치하며 R클래스로 편리하게 접근할 수 있다. 즉 컴파일러가 데이터 처리를 위한 각종 동작을 한다. 파일 이름이 소문자, 숫자, 마침표, 언더바 로만 구성. - assets 모든 유형의 파일을 포함할 수 있고 파일 이름 제약이 거의 없다. apk 파일을 열어보면 보인다. 즉 사전처리 하지 않고 apk에 포함 시킨다. 여러 이름으로 여러개의 폴더를 만들수 있다. AssetManager로 접근할 수 있다. 읽기 전용. - 결론. 이미지, xml, 폰트 등 아래 링크에서 지원하는 형태의 데이터는 res 를 사용하면 된다. https://developer.android.com/guide/topics/resources/available-resources?hl=ko res에서 지원하지 않거나 이런 저런 이유로 직접 컨트롤하는 데이터는 assets을 사용하면 된다. R클래스를 사용할 수 없어서 좀 불편하긴 하지만 아무데나 만능으로 사용할 수 있다.

tkinter 파이썬 기본 UI 프레임 - 파일, 폴더 선택 등.. python

이미지
파일, 폴더 경로명 적어주기 귀찮아서 만들었습니다. tkinter는 파이썬에 기본으로 들어있어 따로 라이브러리를 설치할 필요 없습니다. 파이썬으로 간단한 프로그램 만들때 사용할 기본 UI 프레임. 파일 선택, 폴더 선택, 텍스트 에디터, Run 으로 구성. import tkinter import tkinter . filedialog import tkinter . messagebox def open_file ():     path = tkinter . filedialog . askopenfilename (         initialdir = "/" ,         title = "Select file" ,         filetypes =(( "txt files" , "*.txt" ), ( "all files" , "*.*" )),     )     return path def save_file ():     path = tkinter . filedialog . asksaveasfilename (         initialdir = "/" ,         title = "Select file" ,         filetypes =(( "txt files" , "*.txt" ), ( "all files" , "*.*" )),     )     return path def select_folder ():     path = tkinter . filedialog . askdirectory ()     return path def select_file ():     path = tkinter . filedialog . askopenfilename ()     return path def insert_text ( str

flutter MaterialApp - themeMode, theme, darkTheme

themeMode -  App 테마를 선택한다. light - OS 시스템 설정에 관계없이 항상 라이트 모드. theme 사용. dark - OS 시스템 설정에 관계없이 항상 다크 모드. darkTheme 사용. darkTheme가 null이면 테마 사용으로 대체됨. system - OS 시스템 설정에 따른다. 기본값이다. API 문서에 이런 말도 있습니다. MediaQuery.platformBrightnessOf가 Brightness.light 라면 theme가 사용된다. Brightness.dark인 경우 darkTheme가 사용된다.  darkTheme  themeMode가 dark이거나 시스템 설정이 dark 일때 사용됩니다. ThemeData.brightness가 Brightness.dark으로 설정되어야 합니다. darkTheme가 null일 경우 Theme가 대신 사용됩니다. darkTheme가 null이고 Theme도 null이면 ThemeData.light()로 설정됩니다. Theme themeMode가 light 이거나 시스템 설정이 light 일때 사용됩니다. 사용방법. Theme, darkTheme에 ThemeData(테마 속성 세부값)을 세팅한다. themeMode 를 어떻게 사용할지 정하여 사용한다. 참고. https://api.flutter.dev/flutter/material/MaterialApp/theme.html https://api.flutter.dev/flutter/material/MaterialApp/darkTheme.html https://api.flutter.dev/flutter/material/MaterialApp/themeMode.html https://api.flutter.dev/flutter/material/ThemeData-class.html

.net core 3.1 winforms 도구상자에서 button(버튼)이 안보이는 문제 해결방법.

이미지
.net core 3.1 winforms 도구상자에서 버튼이 안보이는 오류가 있습니다. 아마 이전 버전에서 업데이트로 .net core 3.1을 설치한 경우 아닐까 싶습니다. 해결방법은 아래 스샷과 같이 도구상자 아무데서나  우클릭 -> '도구 상자 다시 설정' 을 하면 됩니다. 참고로 제 Visual Studio 버전은 16.6.3 입니다.

Google.Cloud.Speech 개발 참조 페이지 정리.

개발자 콘솔 https://console.cloud.google.com/ .net 개발 환경 설정 https://cloud.google.com/dotnet/docs/setup?hl=ko 할당량 및 한도 https://cloud.google.com/speech-to-text/quotas?hl=ko 콘텐츠 한도 오디오 길이 동기식 요청 약 1분 비동기식 요청 약 480분* 스트리밍 요청 약 5분** 지원 언어 목록. https://cloud.google.com/speech-to-text/docs/class-tokens?hl=ko 각 언어의 지원 기능 목록. 영문페이지로 봐야함. https://cloud.google.com/speech-to-text/docs/languages 긴 오디오 파일을 텍스트로 변환 https://cloud.google.com/speech-to-text/docs/async-recognize?hl=ko 기본사항 - 옵션 필수 사항 내용도 있음. https://cloud.google.com/speech-to-text/docs/basics?hl=ko 샘플 및 가이드 https://cloud.google.com/speech-to-text/docs/tutorials?hl=ko https://cloud.google.com/speech-to-text/docs/video-model?hl=ko  - 동영상 오디오를 텍스트로 변환 https://github.com/GoogleCloudPlatform/dotnet-docs-samples  c# 예제파일 github C# API 문서 https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Speech.V1/index.html https://googleapis.github.io/google-cloud-dotnet/docs/Google.Cloud.Speech.V1/api/Google.Cloud.Speech.V1.html https://cloud.goog

Google.Cloud.Translation.V2 개발 참조 페이지 정리.

Cloud Translation 메인. https://cloud.google.com/translate/docs?hl=ko 텍스트번역. https://cloud.google.com/translate/docs/basic/translating-text?hl=ko 언어감지. https://cloud.google.com/translate/docs/basic/detecting-language?hl=ko 지원 언어 목록. https://cloud.google.com/translate/docs/languages?hl=ko

플러터(flutter) 개발 참고 사이트들.

플러터 프로젝트 사이트. https://flutter.dev/ https://api.flutter-ko.dev/ - API 레퍼런스. https://flutter-ko.dev/docs/cookbook - 사용방법. https://flutter-ko.dev/docs/get-started/install/windows - 플러터 설치. https://flutter-ko.dev/docs/development/ui/widgets - Widget catalog 카테고리 https://flutter-ko.dev/docs/reference/widgets - Widget catalog 알파벳 플러터 패키지 사이트. https://pub.dev/flutter/packages 플러터 라이브러리, 툴, 튜토리얼을 정리한 곳. https://github.com/Solido/awesome-flutter 예제 코드들. https://codelabs.developers.google.com/?cat=Flutter  - 코드랩 https://x-wei.github.io/flutter_catalog/#/  - 웹브라우저에서 위젯 예제와 코드를 볼수 있다. 플러터로 만들어진 App들을 볼수 있다. https://flutterawesome.com/ 플러터 UI를 웹브라우저에서 배치. https://flutterstudio.app/ https://widget.studio/#/ 다트 프로젝트 사이트. https://dart.dev/ https://api.dart.dev/ - API 레퍼런스. https://dartpad.dev/ - Dart 웹 코딩. 테스트 코드용. https://dart.dev/guides/language/language-tour - 간단한 문법.

flutter 개발환경 세팅 - Android Studio.

1. sdk 다운로드. https://flutter.dev/docs/get-started/install 2. 압축을 푼후 시스템 환경변수에 PATH를 추가한다. 예) D:\Dev\flutter\bin 3. flutter doctor 실행. 개발에 필요한 사항을 체크하여 알려준다. 예) 콘솔(cmd.exe)에서 위의 경로로(D:\Dev\flutter\bin) 이동후 flutter doctor 실행. 4. Android Studio 설치. 아래 경로에서 다운받아 설치하세요. https://developer.android.com/studio 5. Android Studio에서 flutter 플러그인 설치. file - setting - pluguns 로 이동하여 flutter 검색후 설치 후 Android Studio 재시작. - 트러블슈팅. 가상 안드로이드 실행시 adb를 못찾는다는 에러와 함께 디버깅이 되지 않았습니다. 해결은 다음과 같이 했습니다. 파일 - Close project 로 Welcome to Android Studio 창으로 이동합니다. 하단 Configure - SDK Manager 로 이동하여 sdk를 업데이트 했습니다.  이 외에도 Android  sdk 재설치를 해도 해결될거 같습니다. Android SDK Platform-Tools 재설치로는 해결되지 않았습니다. - 트러블슈팅2. cmdline-tools component is missing Android Studio를 실행하고 SDK Tools 옵션에서 Android SDK Command-line Tools (latest) 설치. 참고. 윈도우에서 설치 https://flutter-ko.dev/docs/get-started/install/windows

electronjs react vue nodejs 간단 리뷰.

개인적으로 사용할 ui 라이브러리 찾고 있습니다. 요건 - 2-3달만에 켜도 잊어버리지 않고 사용할 수 있을것, ui 작업 최소화. 대략보고 작성한 거라 오류가 있을수 있습니다. - nodejs 자바스크립트로 서버 사이드 작업을 할수 있게 만든것. 최근엔 클라이언트에서도 작업. 자바스크립트 엔진은  Chrome V8 이다. - react 자바스크립트로 ios, 안드로드, 윈도우 등 프로그램을 만들수 있다. 네이티브 api를 랩핑한 라이브러리 같다. - vue  react 와 거의 비슷하나 라이브러리 구조가 다른거 같다. - electronjs  자바스크립트로 크롬 브라우저를 제어해 ios, 안드로이드, 데스크탑 프로그램을 만들수 있다. 여러 플래폼에서도 랜더러가 동일해 거의 같은 화면을 구현할 수 있다. - flutter 라이브러리 자체에 렌더러가 내장되어 있어 electronjs 와 비슷하게 여러 플래폼에서 동일한 화면을 볼수 있다. 타입스크립트를 개량한 dart라는 언어를 사용한다. - 프론트엔드 개발자 웹으로 치면 html코더 + 자바스크립트 프로그래머를 합쳐놓은 직군 같네요. electronjs, flutter가 자체 렌더링 엔진이 있어 멀티플래폼 지원에 있어 가장 앞서는거 같네요. vs code를 사용해보면 성능문제도 거의 없는거 같습니다. 그런데 거의 모든 라이브러리가 예전 html 코딩하듯 텍스트 기반으로 타이핑해야 하네요. otl OS와 개발툴이 거의 공짜로 풀리면서 비용은 낮아졌지만 돈이 안되다보니 질좋은 UI에디터를 개발하는 업체가 없는거 같습니다.  이렇다 보니 필요한 업체가 어느정도 개발하고 오픈소스화한 후 활성화되어 여러 라이브러리가 나오면 결국 업체의 비용을 낮추는 순환으로 생태계가 만들어져 있네요. 대부분 개발자 위주로 만들어져 디자인툴은 그다지 품질이 좋지 못하네요. Visual Studio Blend 가 나온지 꽤 됐는데 능가하는 에디터가 없다니... 개발환경도 꽤 파편화되어 있어 시행착오와 함께 개발 난이도는 더 높아져 초보나

visual studio code(vs code) 포터블(Portable) 설정.

작업 순서. 윈도우일때. 다른 OS는 아래 참고. 1. 반드시 zip 파일을 받는다. https://code.visualstudio.com/download 2. 압축을 푼다. 3. 압축을 푼 폴더안에 data 폴더를 만든다. 앞으로 플러그인과 설정은 여기에 저장된다. 구글드라이브, git 저장소에 올려서 사용하면 여러 컴퓨터에서 동기화가 된다. 참고. Portable Mode - code.visualstudio.com https://code.visualstudio.com/docs/editor/portable