nestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
    View view = (View) v.getChildAt(v.getChildCount() - 1);
    int diff = (view.getBottom() - (v.getHeight() + v.getScrollY()));
    Dlog.d(diff + "");
    if (diff == 0) {
        Dlog.d("more");

    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public abstract class HidingScrollListener extends RecyclerView.OnScrollListener {
    private static final int HIDE_THRESHOLD = 20;
    private int scrolledDistance = 0;
    private boolean controlsVisible = true;
 
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        if (scrolledDistance > HIDE_THRESHOLD && controlsVisible) {
            onHide();
            controlsVisible = false;
            scrolledDistance = 0;
        } else if (scrolledDistance < -HIDE_THRESHOLD && !controlsVisible) {
            onShow();
            controlsVisible = true;
            scrolledDistance = 0;
        }
        if ((controlsVisible && dy > 0|| (!controlsVisible && dy < 0)) {
            scrolledDistance += dy;
        }
    }
 
    public abstract void onHide();
 
    public abstract void onShow();
 
}
 
/*스크롤 방향 감지 하여 툴바 히든 처리 할때 사용*/
recycler_view.setOnScrollListener(new HidingScrollListener() {
    @Override
    public void onHide() {
        Dlog.d("onHide");
    }
 
    @Override
    public void onShow() {
        Dlog.d("onShow");
    }
});
 
 
/*하단 감지*/
recycler_view.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if (!recyclerView.canScrollVertically(1&& newState == RecyclerView.SCROLL_STATE_IDLE) {
            Dlog.d("bottom");
        }
    }
});
cs

'Android' 카테고리의 다른 글

NestedScrollView 하단감지..  (0) 2023.01.31
3자리 콤마, HTML태그 제거  (0) 2022.11.30
URL LINK 크롤링하는 메소드  (1) 2022.09.19
ButterKnife EditText Search actionId  (0) 2022.07.13
AsyncTask Deprecated 대응 Rxjava  (0) 2022.04.06
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static String addComma(String str) {
    return str.replaceAll("\\B(?=(\\d{3})+(?!\\d))"",");
}
 
 
public static String removeTag(String html) {
    String tmp = html.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>""");
    tmp = tmp.replaceAll("[@$^]""");
    tmp = tmp.replaceAll("&amp;""");
    tmp = tmp.replaceAll("&quot;""");
    tmp = tmp.replaceAll("&lt;""");
    tmp = tmp.replaceAll("&gt;""");
    return tmp;
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// URL LINK 크롤링하는 메소드
Disposable backgroundTask;
    private void linkCrawling(String url) {
        // 크롤링한 메타데이터 정보를 담아 반환할 Hashmap
        HashMap<StringString> map = new HashMap<>();
 
        backgroundTask = Observable.fromCallable(() -> {
            try {
                Connection con = Jsoup.connect(url);
                Document doc = con.get();
                Elements ogTags = doc.select("meta[property^=og:]");
                if (ogTags.size() <= 0) {
                    return map; // 아무것도 안 들은 map 반환
                }
                // 필요한 OGTag
                for (int i = 0; i < ogTags.size(); i++) {
                    Element tag = ogTags.get(i);
                    String text = tag.attr("property");
                    if ("og:url".equals(text)) {
                        map.put("url", tag.attr("content"));
 
                    } else if ("og:title".equals(text)) {
                        map.put("title", tag.attr("content"));
 
                    } else if ("og:image".equals(text)) {
                        map.put("image", tag.attr("content"));
 
                    } else if ("og:description".equals(text)) {
                        map.put("description", tag.attr("content"));
                    }
                }
                return map;
 
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
 
        }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<HashMap<StringString>>() {
            @Override
            public void accept(HashMap<StringString> map) {
 
                backgroundTask.dispose();
            }
        });
cs
@OnEditorAction(R.id.et_q)
public boolean onEditorAction(TextView v, int actionId, KeyEvent key) {
    Dlog.d("actionId: "+ actionId);
    if (actionId == 3) {
        search();
    }
    return true;
}
@OnTextChanged(R.id.et_q)
public void onTextChanged(CharSequence name) {
    mList.clear();
    if (name.length() > 0) {
        for (EyedocDicVO row : mOriginList) {
            if (row.getTitle().contains(name) || row.getDesc().contains(name)) {
                mList.add(row);
            }
        }
    } else {
        mList.addAll(mOriginList);
    }
    mRecyclerAdapter.notifyDataSetChanged();
}
@OnFocusChange({R.id.et_l_sph,R.id.et_r_sph})
public void onFocusChange(View v, boolean hasFocus) {
	if (hasFocus) {
            
    }
}
@OnCheckedChanged({R.id.chk_use_terms, R.id.chk_policy})
public void checked(CompoundButton button, boolean checked) {
    validCheckbox();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//RxJava
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.7'
 
Disposable backgroundTask;
 
backgroundTask = Observable.fromCallable(() -> {
    //background process
    
    return httpList;
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<ArrayList<String>>() {
    @Override
    public void accept(ArrayList<String> strings) throws Throwable {
 
        backgroundTask.dispose();
    }
});
cs

Display display = getWindowManager().getDefaultDisplay();  // in Activity
/* getActivity().getWindowManager().getDefaultDisplay() */ // in Fragment
Point size = new Point();
display.getRealSize(size); // or getSize(size)
int width = size.x;
int height = size.y;

'Android' 카테고리의 다른 글

ButterKnife EditText Search actionId  (0) 2022.07.13
AsyncTask Deprecated 대응 Rxjava  (0) 2022.04.06
안드로이드 스튜디오 JDK11로 설정!  (0) 2022.01.03
안드로이드 Debug SHA Key 추출 방법  (0) 2021.12.06
ArrayList 정렬  (0) 2021.09.03

'Android' 카테고리의 다른 글

AsyncTask Deprecated 대응 Rxjava  (0) 2022.04.06
안드로이드 화면 사이즈 구하기!  (0) 2022.01.14
안드로이드 Debug SHA Key 추출 방법  (0) 2021.12.06
ArrayList 정렬  (0) 2021.09.03
AlertDialog EditText 마진 넣기  (0) 2020.11.05

안드로이드 스튜디오 터미널창에다 아래 명령어를 실행한다!

./gradlew signingReport

 

 

수동 릴리즈 빌드시 sha1 get하기

keytool -list -v -keystore key.jks -alias key0

'Android' 카테고리의 다른 글

안드로이드 화면 사이즈 구하기!  (0) 2022.01.14
안드로이드 스튜디오 JDK11로 설정!  (0) 2022.01.03
ArrayList 정렬  (0) 2021.09.03
AlertDialog EditText 마진 넣기  (0) 2020.11.05
안드로이드 상태바 색상 변경  (0) 2020.10.22
Collections.sort(mList, new Comparator<JinlyoTimeVO>() {
	@Override
	public int compare(JinlyoTimeVO s1, JinlyoTimeVO s2) {
		if (s1.getSorting() < s2.getSorting()) {
			return -1;
		} else if (s1.getSorting() > s2.getSorting()) {
			return 1;
		}
		return 0;
	}
});

 

글자를 정렬할때!

Collections.sort(tmpList, new Comparator<ItemVO>() {
	public int compare(ItemVO s1, ItemVO s2) {
		return s2.edate.compareTo(s1.edate);
	}
});

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
        ad.setMessage("사용하실 닉네임을 입력해주세요.");
 
        // EditText 삽입하기
        final EditText et = new EditText(getApplicationContext());
        et.setText(AppInfo.NICK);
        FrameLayout container = new FrameLayout(MainActivity.this);
        FrameLayout.LayoutParams params = new  FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        params.leftMargin = 50;
        params.rightMargin = 50;
        et.setLayoutParams(params);
        container.addView(et);
        ad.setView(container);
        //
 
        // 확인 버튼 설정
        ad.setPositiveButton("변경"new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String value = et.getText().toString();
                if (value.trim().equals("")) {
                    Toast.makeText(getApplicationContext(),"닉네임을 입력해주세요.", Toast.LENGTH_SHORT).show();
                    return;
                }
                //닉네임이 금지단어에 포함 되는지 체크
                String tmp[] = AppInfo.BLOCK_KEYWORD.split(",");
                for (String row: tmp) {
                    if (value.contains(row)) {
                        Toast.makeText(getApplicationContext(),"닉네임에 금지단어가 포함되어 있네요.", Toast.LENGTH_SHORT).show();
                        return;
                    }
                }
                //
                dialog.dismiss();
 
                changeNick(value);
            }
        });
 
        // 취소 버튼 설정
        ad.setNegativeButton("취소"new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        ad.show();
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * 상태바 색상 변경..
 * */
public class Utils {
    public enum StatusBarColorType {
        BLACK_STATUS_BAR(android.R.color.black),
        PRIMARY_DARK_STATUS_BAR(R.color.colorPrimaryDark),
        WHITE_STATUS_BAR(android.R.color.white);
 
        private int backgroundColorId;
 
        StatusBarColorType(int backgroundColorId){
            this.backgroundColorId = backgroundColorId;
        }
 
        public int getBackgroundColorId() {
            return backgroundColorId;
        }
    }
 
    public static void setStatusBarColor(Activity activity, StatusBarColorType colorType) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, colorType.getBackgroundColorId()));
        }
    }
}
cs
1
Utils.setStatusBarColor(this, Utils.StatusBarColorType.WHITE_STATUS_BAR);
cs


'Android' 카테고리의 다른 글

ArrayList 정렬  (0) 2021.09.03
AlertDialog EditText 마진 넣기  (0) 2020.11.05
안드로이드 키보드 내리기 및 화면 리사이즈  (0) 2020.04.16
안드로이드 나만의 기본 세팅!!  (0) 2020.04.06
adb shell 명령어  (0) 2020.03.29




1. 키보드 내리기

//키보드내리기
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(et_query.getWindowToken(), 0);
//










2. 화면 리사이즈

android:windowSoftInputMode="adjustResize"


'Android' 카테고리의 다른 글

AlertDialog EditText 마진 넣기  (0) 2020.11.05
안드로이드 상태바 색상 변경  (0) 2020.10.22
안드로이드 나만의 기본 세팅!!  (0) 2020.04.06
adb shell 명령어  (0) 2020.03.29
TextView ...더보기  (0) 2020.03.29

1. build.gradle(Project)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Top-level build file where you can add configuration options common to all sub-projects/modules.
 
buildscript {
    
    repositories {
        google()
        jcenter()
        //버터나이프
        maven {
            name 'Sonatype SNAPSHOTs'
            url 'https://oss.sonatype.org/content/repositories/snapshots/'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.1'
        classpath 'com.google.firebase:firebase-plugins:2.0.0'
        classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
 
allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://maven.google.com/' }
        maven { url "https://jitpack.io" }
        maven { url "https://s3.amazonaws.com/repo.commonsware.com" }
 
        //버터나이프
        maven {
            name 'Sonatype SNAPSHOTs'
            url 'https://oss.sonatype.org/content/repositories/snapshots/'
        }
 
        //adFit
//        maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
    }
}
 
task clean(type: Delete) {
    delete rootProject.buildDir
}
 
cs



2. build.gradle(App)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
apply plugin: 'com.android.application'
 
android {
    def date = new Date()
    def formattedDate = date.format('yyMMddHHmm')
    def code = formattedDate.toInteger()
 
    compileSdkVersion 29
    buildToolsVersion "29.0.1"
 
    defaultConfig {
        applicationId ""
        minSdkVersion 23
        targetSdkVersion 29
        versionCode code
        versionName "1.2"
        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
 
    buildTypes {
        release {
            minifyEnabled false
            shrinkResources false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            //true 하면 속도빠르게함
            minifyEnabled false
            shrinkResources false
            //
            /*aaptOptions.cruncherEnabled = false
            ext.alwaysUpdateBuildld = false
            splits.abi.enable = false
            splits.density.enable = false
            aaptOptions.cruncherEnabled = false
            ext.alwaysUpdateBuildld = false*/
        }
    }
 
    //dexOptions 추가 : OutOfMemoryError
    dexOptions {
        jumboMode true
        javaMaxHeapSize "4g"
    }
 
    lintOptions {
        checkReleaseBuilds false
    }
 
    //버터이프 구동위해서 필요
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
 
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
 
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
 
    //adFit
//    implementation "com.kakao.adfit:ads-base:3.0.12"
 
    //버터나이프
    implementation 'com.jakewharton:butterknife:10.0.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
 
    //dex
    implementation 'com.android.support:multidex:1.0.3'
 
    //이미지 캐싱 로드
    implementation 'com.github.bumptech.glide:glide:4.8.0'
    implementation 'jp.wasabeef:glide-transformations:4.0.0'
    implementation 'jp.co.cyberagent.android:gpuimage:2.0.0'
 
    //material
    implementation 'com.google.android.material:material:1.1.0'
 
    //ads
    implementation 'com.google.android.gms:play-services-ads:19.0.1'
}
 
cs


3.매니패스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="">
 
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.REORDER_TASKS" />
 
    <application
        android:name=".Libs.AppInfo"
        android:usesCleartextTraffic="true"
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
 
        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />
 
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="@string/ad_id" />
 
        <service
            android:name=".Service.PlayerService"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.SYSTEM_ALERT_WINDOW" />
 
        <activity android:name=".IntroActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <activity android:name=".MainActivity" />
    </application>
 
</manifest>
cs


'Android' 카테고리의 다른 글

안드로이드 상태바 색상 변경  (0) 2020.10.22
안드로이드 키보드 내리기 및 화면 리사이즈  (0) 2020.04.16
adb shell 명령어  (0) 2020.03.29
TextView ...더보기  (0) 2020.03.29
이미지 슬라이더  (0) 2020.03.29

충전중해제

adb shell dumpsys battery unplug


충전중

adb shell dumpsys battery reset


잠자기 모드

adb shell dumpsys deviceidle step

IDLE 상태가 될때까지!!


앱 대기모드

adb shell am set-inactive com.hongkim.TodayRadio true


앱 활성화

adb shell am set-inactive com.hongkim.TodayRadio false

adb shell am get-inactive com.hongkim.TodayRadio



'Android' 카테고리의 다른 글

안드로이드 키보드 내리기 및 화면 리사이즈  (0) 2020.04.16
안드로이드 나만의 기본 세팅!!  (0) 2020.04.06
TextView ...더보기  (0) 2020.03.29
이미지 슬라이더  (0) 2020.03.29
스피너 값넣기  (0) 2020.03.29

+ Recent posts