2019.06.26 00:31


 

 

구글 Developers 사이트에서 제공하는 Android 인앱 결제 구현 가이드

 

https://developer.android.com/google/play/billing/billing_integrate.html?hl=ko

 

인앱 결제 구현  |  Android Developers

In-app Billing on Google Play provides a straightforward, simple interface for sending In-app Billing requests and managing In-app Billing transactions using Google Play. The information below covers the basics of how to make calls from your application…

developer.android.com

 



Posted by injunech
2019.02.13 00:48


[Android] calling ui thread from worker thread



Method compress must be called from the worker thread, currently inferred thread is UI thread less... (Ctrl+F1)  

Inspection info:Ensures that a method which expects to be called on a specific thread, is actually called from that thread. For example, calls on methods in widgets should always be made on the UI thread


위와 같이 View와 같은 Class내에서 Bitmap Compress 함수 사용시

Activity의 context 의 runOnUiThread 에서 수행해주도록 아래와 같이 구현한다.


public static Bitmap croppedBitmap;
public static File croppedFile;

File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/" + Data.PIC_FOLDERNAME + "/" + Data.PIC_FILENAME);
if (dir.exists() == false) {
dir.mkdir();
}

String path = sdCard.getAbsolutePath() + "/" + Data.PIC_FOLDERNAME + "/" + Data.PIC_FILENAME + "/" + Data.CROP_FILENAME;
croppedFile = new File(path);

((CropActivity) getContext()).runOnUiThread(new Runnable() {
public void run() {
// things need to work on ui thread
Bitmap croppedBitmap = CropImageView.croppedBitmap;
FileOutputStream out;
try {
out = new FileOutputStream(croppedFile);
croppedBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
} catch (Exception e) {
e.printStackTrace();
}
}
});


아래와 같이  UI Thread 이용하며 CropActivity는 위의 코드가 동작하는 View와 같은 Class가 호출되어 Activity 로 동작하는 Class 이다.

    ((CropActivity) getContext()).runOnUiThread(new Runnable() {
public void run() {
// things need to work on ui thread


}
});







Posted by injunech
2019.02.09 19:02


Google Android Sample Code Git

구글 안드로이드 샘플 코드 Git


Google Samples

https://github.com/googlesamples



Google Play In-app Billing Samples

https://github.com/googlesamples/android-play-billing






Posted by injunech
2019.02.04 21:36


구글계정 지급보류 문제해결


구글 개발자 계정에서 아래와 같은 에러 문구가 발생하는 경우

구글에 문의를 해서 원인 확인과 해결요청을 해야 한다.


은행 계좌가 잘못된 경우라면 쉽게 해결되지만 그밖에 경우라면 복잡하고 오래 걸리기 때문에

이러한 문제가 발생한 즉시 구글에 문의를 하는것이 좋다.


Contact us about your payments account status

You're currently unable to receive payouts because there's a hold on your payments account.




상단 물음표를 눌러서 구글 지원팀에 이메일로 문의하기 요청하고

관련 내용에 대해 문의요청한다.




혹은 위와 같이 Google Play Console 지원팀에 문의하기를 통해

채팅/이메일 두가지 방법을 선택해서 확인 요청할수 있다.




Posted by injunech
2019.01.06 03:00


TextView 줄간격, 자간, 장평 설정하기


ㆍ 줄간격 : lineSpacingExtra, lineSpacingMultiplier

ㆍ 자간 : letterSpacing

ㆍ 장평 : textScaleX



줄 간격


android:lineSpacingExtra ="0dp"(기본)


android:lineSpacingExtra ="5dp"


android:lineSpacingMultiplier="1"(기본)


android:lineSpacingMultiplier="1.5"




자간


android:letterSpacing="0"(기본)


android:letterSpacing="0.2"


장평


android:textScaleX="1"(기본)


android:textScaleX="1.5"(기본)







Posted by injunech
2018.12.26 01:41


스크롤바(ScrollBar) 색상, 위치 변경해보기


ㆍ스크롤바의 위치와 색상 설정 방법.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical"
android:gravity="center">

<ScrollView
android:layout_width="300dp"
android:layout_height="300dp">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="어쩌구"
android:textColor="#000000" />
</ScrollView>

</LinearLayout>


스크롤바를 항상보이게 하기

android:scrollbarFadeDuration = "0"
android:scrollbarAlwaysDrawVerticalTrack = "True"

혹은

android:scrollbarDefaultDelayBeforeFade="500000"


스크롤바 위치를 우측에서 좌측으로 바꾸기

android:VerticalScrollbarPosition = "left"


스크롤바가 밖으로, 내부 콘텐츠를 가리지 않도록 설정하기

android:scrollbarStyle="outsideInset"


스크롤바를 원하는 그림으로 변경하기, Size 변경하기


android:scrollbarThumbVertical="@drawable/scroll_thumb"
android:scrollbarSize="2dp"

스크롤바 배경 라인 변경하기


android:scrollbarTrackVertical="@drawable/scroll_track"



















Posted by injunech
2018.05.13 21:48


[Android] Handler Message obj 전달 (what, arg1, arg2)

android.os.Handler 를 이용해서 다른 쓰레드에서의 UI를 핸들링 하려면 Message object 를 전달하여 Handler 내부에서 처리한다.


안드로이드에서 작업시 통신이나 기타 작업을 위해서 쓰레드를 이용하는 경우에 타 쓰레드에서 액티비티 등의 UI 를 변경할 경우 android.os.Handler 를 사용하게 됩니다.


Handler 클래스를 Activity 클래스 내에서 정의 해 줍니다.

Handler handler = new Handler() { // 메인에서 생성한 핸들러
@Override
public void handleMessage(Message msg) {
if(msg.what == 0){
// 메세지를 통해 받은 값을 TextView에 출력
textView.setText("arg1="+msg.arg1);
textView.setText("arg2="+msg.arg2);
}
}
};


쓰레드에서 액티비티의 UI 를 변경해야 할 경우 액티비티의 핸들러에게 메시지를 보냅니다. 쓰레드로 핸들러 인스턴스를 넘겨주는 방법은 각자 필요에 맞게 넘겨주면 됩니다.

// obtain 메소드로 메세지 생성
Message msg = Message.obtain(mHandler, 0, arg1, arg2);
mHandler.sendMessage(msg); // 메인스레드의 핸들러에 메세지 보내기





Posted by injunech
2018.05.08 16:56


[Android] Layout겹치기


윈도우는 빈 채로 생성되며 빈 윈도우 안에 레이아웃을 채워 넣어 UI를 구성하는데 이때는 다음 메소드를 호출 한다.

 

void setContentView(int layoutResID)

void setContentView(View view, [ViewGroup.LayoutParams params])

void addContentView(View view, ViewGroup.LayoutParams params)

 

다음 예제는 2개의 xml파일을 겹쳐서 보여주는 예제이다.

 

overlay1.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

 

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="바닥 레이아웃" />

    <Button

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:text="바닥의 버튼"

     />

 

</LinearLayout>

 

overlay2.xml

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

    android:gravity="center"

    android:background="#40ffff00"

>

    <TextView

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:text="이것은 위쪽의 레이아웃 입니다."/>

 

    <Button

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:text="위쪽 버튼"/>

 

</LinearLayout>

 

Overlay.java

 

package com.example.overlay;

 

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.Window;

import android.widget.LinearLayout;

 

public class Overlay extends Activity {

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Window win = getWindow();

        win.setContentView(R.layout.overlay1);

        

        //전개자로 xml파일을 가져옴

        LayoutInflater inflater = (LayoutInflater)getSystemService(

                Context.LAYOUT_INFLATER_SERVICE);

        LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.overlay2null);

          

        //파라미터를 세팅해줌

        LinearLayout.LayoutParams paramlinear = new LinearLayout.LayoutParams(

                LinearLayout.LayoutParams.MATCH_PARENT,

                LinearLayout.LayoutParams.MATCH_PARENT

                );

        

        //윈도우에 추가시킴

        win.addContentView(linear, paramlinear);

        

        

    }

 

 

}

 

실행화면

 

아래쪽 레이아웃은 위쪽 레이아웃 때문에 색상이 약간 변한다. 하지만 두 버튼은 독립적으로 동작해서 클릭 리스너를 추가 시킬 수 있다.





출처: http://gakari.tistory.com/entry/안드로이드-LayoutInflater를-활용한-레이아웃-겹치기 [가카리의 공부방]



Posted by injunech
2018.04.15 01:59


Android Studio build error about gradle

Could not find com.android.tools.build.gradle:3.0.0-alpha7


위와 같이 gradle 버전을 찾지 못할때

자신의 android studio 설치 폴더상의 gradle 버전을 확인해서 build.gradle 상에 설정해준다.


 

  1. open the file path(just as the log said): file:/C:/Users/dmin/Documents/android-studio/gradle/m2repository/com/android/tools/build/gradle/
  2. found this file

  3. just change classpath 'com.android.tools.build.gradle:3.0.0-alpha7' to classpath 'com.android.tools.build.gradle:* * * ' ; * * * is the exist gradle file;

  4. buildscript {
      repositories {
        ...
        // You need to add the following repository to download the
        // new plugin.
        google()
      }
    
      dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha5'
      } 
    }







Posted by injunech
2017.02.19 01:07


Color 지정방법에 대한 다양한 방법 소개


You can use various functions from the Color class to get the same effect of course.

  • holder.text.setTextColor(Color.RED);

  • Color.parseColor (Manual) (like LEX uses)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgb and Color.argb (Manual rgb) (Manual argb) (like Ganapathy uses)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • And of course, if you want to define your color in an XML file, you can do this:

    <color name="errorColor">#f00</color>

    because the getColor() function is deprecated1, you need to use it like so:

    ContextCompat.getColor(context, R.color.your_color);
  • You can also insert plain HEX, like so:

    myTextView.setTextColor(0xAARRGGBB);

    Where you have an alpha-channel first, then the color value.

Check out the complete manual of course, public class Color extends Object.


https://developer.android.com/reference/android/graphics/Color.html#parseColor(java.lang.String)





Posted by injunech