안드로이드 버튼 background color정보 가져오는 방법

안드로이드 버튼 정보 중에 background를 컬러를 셋팅(setBackgroundColor)하는건 정말 쉬운데,
버튼의 backgroudcolor를 가져오는게 너무 힘들었다.

구글검색, stackoverflow검색 등등 여러가지를 시도해보다가 겨우 방법을 찾아서 내용을 남겨둔다.

찾기 힘들었던 이유 중에 대부분은 안드로이드가 java에서 kotlin으로 바뀌고, 중간중간에 안드로이드가 업데이트되면서 기존에 잘 사용하던 방법이 더이상 안되는 것때문에 방법을 찾는게 너무 힘들었다.

검색하면 나오는 가장 큰 솔루션 중에 themes.xml에 style parent속성이 Theme.AppCompat.Light 로 바뀌는건 이미 되어 있었기 때문에 정답이 아니었다.

두번째로 레이아웃.xml에서 android.widget.Button로 변경하는건, 변경을 해도 동일한 문제가 발생했다.

내가 찾은 방법은 버튼 background정보를 Drawable 클래스로 받아서, 각 클래스(ColorDrawable,StateListDrawable,GradientDrawable,ColorDrawable)에 맞게 color정보를 가져와서 사용하도록 했다.
처음에는 어느 Drawable클래스로 받아야 될지 몰라서 삽질을 계속 했는데, 결국 아래와 같은 처리방법을 찾아서 사용했더니 버튼의 backgroundcolor정보를 접근할 수 있었다.
color정보를 가져오면 기본이 int형 변수인데, 이걸 형변환하면 rgb string값으로 가져올 수 있다.(형변환참고: val hexColor = String.format(“#%06X”, color2))

Kotlin소스코드
private fun startAnimation(bt: android.widget.Button) : Unit {
        val drawable : Drawable = bt.background
        var rtnColor = 0    // 기존버튼의 색을 담을 변수
        when (drawable) {
            is ColorDrawable -> {
                val color = drawable.color
                Log.d(tagName, "startBingoAnimation ColorDrawable color:$color")
                rtnColor = color
            }
            is StateListDrawable -> {
                val drawable2 = drawable?.getStateDrawable(0) //as StateListDrawable
                when (drawable2) {
                    is ShapeDrawable -> {
                        val color = drawable2.paint.color
                        Log.d(tagName, "startBingoAnimation ShapeDrawable color:$color")
                        rtnColor = color
                    }

                    is GradientDrawable -> {
                        val color: ColorStateList? = drawable2.color
                        val color2: Int = color!!.defaultColor
                        Log.d(tagName, "startBingoAnimation GradientDrawable color:${color2}")
                        //val colorStr = color2?.toString(16)
                        val hexColor = String.format("#%06X", color2)
                        //Log.d(tagName, "startBingoAnimation GradientDrawable hexColor:${hexColor}")
                        Log.d(tagName, "startBingoAnimation GradientDrawable color:${color2} to hexColor:${hexColor}")
                        rtnColor = color2
                    }

                    is ColorDrawable -> {
                        val color = drawable2.color
                        Log.d(tagName, "startBingoAnimation ColorDrawable color:$color")
                        rtnColor = color
                    }

                    else -> {
                        Log.d(tagName, "startBingoAnimation Drawable else")
                    }
                }
            }
        }

        val startColor = Color.parseColor("#FFCC33")
        val endColor = if(rtnColor==0) Color.parseColor("#FF9933") else rtnColor


        val animator = ValueAnimator.ofArgb(startColor, endColor)
        animator.duration = 1000
        animator.addUpdateListener { valueAnimator ->
            val animatedValue = valueAnimator.animatedValue as Int
            bt.setBackgroundColor(animatedValue)
        }
        animator.start()

스프링 트랜잭션설정이 정상적으로 안먹는 문제

context-transaction.xml 에 txManager, txAdvise, AOP, annotation-driven 이 정상적으로 되어 있는데, 트랜잭션이 안되는 문제를 찾아보니

context-mapper.xml에
<property name=”dataSource” ref=”dataSource”> 만 있고,
<property name=”transactionFactory”> 설정이 없어서 문제가 있었음

transationFactory설정을 넣으니, context-transaction.xml에 AOP, annotaion-driven 둘 다 정상적으로 됨을 확인함

참고 :
[SPRING] Mybatis-Transaction Management
출처: https://sime.tistory.com/115 [심이 블로그]

엑셀다운로드 했는데 한글이 깨짐문제

윈도우서버에서 리눅스서버로 톰캣을 옮겼다.
리눅스서버로 옮긴 후 서비스도 정상적으로 나오고 문제가 없었는데
엑셀다운로드를 했을 때, 엑셀안에 내용 중에 한글이 깨지는 문제가 발생했다.

엑셀다운로드용 jsp파일을 만들어서 그리드 내용을 엑셀로 다운로드하도록 되어 있는데 한글깨짐이 발생하자 구글링해서 문제를 해결하기 위한 방법을 찾아봤는데
전부다 실패했다.
사용해본 방법은 web.xml에 charset 필터추가 => 실패
server.xml에 charset필터 추가 => 실패

문제를 해결한 방법은 jsp페이지 상단에 page contentType 설정이 문제였음을 알겠됬다.

ㅎ.문제가된 내용
<%@page contentType=”application/vnd.ms-excel; name=’FileName_Excel’, text/html; charset=euc-kr” language=”java”%>

ㅎ.변경한 내용
<%@page contentType=”application/vnd.ms-excel; charset=euc-kr” language=”java”%>

윈도우에서는 문제가 없었는데, 리눅스환경의 톰캣에서는 엑셀에서 한글이 깨지는 문제를 야기시켰다.

jsp파일 인코딩이 utf8로 되어 있어야 엑셀에서 한글이 안깨지는걸 확인했다.
이클립스에서 파일을 선택하고 마우스오른쪽클릭 메뉴중에 properties를 눌러보면, 현재 파일의 text file encoding정보를 볼수 있는데, 이정보가 euckr이 아니라 utf8로 되어 있어야만 문제가 없다.

아무래도 서버리눅스의 locale이 ko_KR.UTF8로 되어 있는데, 이것때문에 이런 문제가 있는게 아닌지 의심스럽다.

pivot을 사용해서 날짜별로 값을 보여주기

시작일자, 종료일자를 가지고 있는 원본데이터와 캘린더 데이터를 조인해서 일별로 사용자의 실적을 만들어 준 후에 pivot을 사용해서 한줄로 사용자의 실적을 보여준다.

SELECT *
FROM (
    SELECT AA.NAME, SUBSTR(BB.DT_DD,-2) AS DT_DD
    FROM  
        (
            select 'HADOOH1' as name , '20210701' as startdt, '20210708' as enddt from dual union all
            select 'HADOOH2' as name , '20210710' as startdt, '20210715' as enddt from dual union all
            select 'HADOOH3' as name , '20210718' as startdt, '20210730' as enddt from dual
        ) AA,
        (
            SELECT *  -- 해당월 캘린더정보
            FROM CALENDAR
            WHERE DT_DD LIKE '202107%'
        ) BB
    WHERE 1=1
        AND BB.DT_DD BETWEEN AA.STARTDT AND AA.ENDDT
    )
PIVOT (
        COUNT(*)
        FOR DT_DD 
        IN ('01' as D01,'02' as D02,'03' as D03,'04' as D04,'05' as D05,'06' as D06,'07' as D07,'08' as D08,'09' as D09,'10' as D10
        ,'11' as D11,'12' as D12,'13' as D13,'14' as D14,'15' as D15,'16' as D16,'17' as D17,'18' as D18,'19' as D19,'20' as D20
        ,'21' as D21,'22' as D22,'23' as D23,'24' as D24,'25' as D25,'26' as D26,'27' as D27,'28' as D28,'29' as D29,'30' as D30
        ,'31' as D31)
      )

원본데이터
결과값

sheetjs사용해서 IE11에서 xlsx 파일 import에러 문제해결

chrome에서는 정상동작하는데 IE11에서 아래와 같은 에러가 발생함
var wb = XLSX.read(fileData, {type : ‘binary’}); 구분때문에 발생하는 문제로 해결방법을 찾다가 결국 알아내서 남겨둔다.

해결방법

xlsx.full.min.js 라이브러리 바로 아래에 xlsx.extendscript.js를 추가한다(xlsx.extendscript.min.js는 안됨)

참고페이지

SheetJS : JS로 엑셀 파일 읽기 예제
https://eblo.tistory.com/83

SheetJS IE호환성 문제 해결
https://velog.io/@y46028911/1.-SheetJS-IE%ED%98%B8%ED%99%98%EC%84%B1-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0

[안드로이드] 버튼 클릭시 이벤트동작할 때 레이아웃 깨지는 문제


버튼을 클릭할 때마다 이벤트로 버튼 글자 사이즈를 변경하는 이벤트를 넣었는데 위와같이 레이아웃이 깨지는 문제가 발생함

뭐가 문제인지 한참을 헤매다가 결국 해결했다.
아래의 링크에서 나와 똑같은 문제가 있었고 해결방법은 버튼에 layout_gravity=”center_vertical”을 주면 해결된다!!

http://www.masterqna.com/android/35066/%EB%B2%84%ED%8A%BC-text-%EA%B0%9C%ED%96%89%EC%8B%9C-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83-%EA%B9%A8%EC%A7%90

유닉스 test 명령어 와 crontab

두번째 주의 수요일에 배치작업을 실행
= 8-14일 사이에 수요일이 있으면 배치작업을 실행한다

crontab
00 10 8-14 * * test `date +\%u` == 3 && batch.sh

테스트방법
echo `date +\%u` 를 실행하면 숫자가 나옴
숫자의미 : 1 월요일 , 2 화요일 … 5 금요일 .. 7 일요일

test `date +\%u` == 3
echo $? => 바로전에 실행한 결과값을 출력한다
같으면 0 다르면 1을 출력한다.

정리하자면 8-14일 사이에 계속 실행을 하지만
test명령어를 사용해서 해당요일이 수요일이면 배치가 실행되고 아니면 배치를 실행하지 않는다.