ProgressDialog는 더 이상 사용되지 않는다. 프로그레스다이얼로그를 대신할 ProgressBar를 사용해보자.
ProgressDialog가 deprecated되었다는 것을 오늘 알게되었다.
API level 26에서 부터 더 이상 사용되지 않고 있었는데
내가 구현하는 앱들에서는 거의 사용할 일이 없다보니 모르고 있었다.
하지만 9월 30일부터 시행되는 더 나은 광고 경험 정책을 위반하지 않기 위해
처리하는 방안을 생각하던 중 프로그레스다이얼로그를 사용해야겠다는 생각을 하게 되면서
코드상에 가운데 줄이 그어져서 알게 되었다.
모바일 앱] 더 나은 광고 경험(Better Ads Experiences) 정책 위반 미리 대응 방법
ProgressBar 생성 방법
1. 루트 레이아웃 id를 찾은 후 변수를 선언해준다. 레이아웃은 본인이 선언한 타입의 레이아웃 클래스를 사용하면 된다.
<activity_main.xml>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/shrine_pink">
<RelativeLayout
android:id="@+id/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</RelativeLayout>
ProgressBar progressBar = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout layout = findViewById(R.id.mainLayout);
....생략
2. 프로그레스바 코드를 추가한다.
progressBar = new ProgressBar(youractivity.this, null, android.R.attr.progressBarStyleLarge);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(300, 300);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
layout.addView(progressBar, params);
//메인액티비티에서 선언하는 경우 홈 화면에 오자마자 노출됨으로 안보이게 처리해준다
progressBar.setVisibility(View.GONE);
3. 프로그레스발로 보이기/감추기 코드를 구현한다.
progressBar.setVisibility(View.VISIBLE);
--감추기
progressBar.setVisibility(View.GONE);
4. 사용자 상호작용을 비활성 또는 활성화 하려면 다음 코드를 추가한다. 로딩하는 동안 버튼이나 화면이 클릭되어 동작하면 안됨으로
스크린 터치 비활성화 처리 코드를 추가해준다.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
터치 활성화 처리 코드
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
나중에 참조할 수 있도록 로 변경 android.R.attr.progressBarStyleSmall를 android.R.attr.progressBarStyleHorizontal로 변경한다.
색상변경 코드는 Api level 21 이상에서만 동작한다.
progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
커스텀 프로그레스바를 사용하고자 하는 경우 xml 레이아웃 생성하기
<ProgressBar
android:id="@+id/progressbar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:max="100"
android:backgroundTint="@color/white"
android:layout_below="@+id/framelauout"
android:indeterminateTint="#1a09d6"
android:layout_marginTop="-7dp"/>
1. 프로그레스바 activiy 지정
progressBar = (ProgressBar) findViewById(R.id.progressbar);
2. 프로그레스바 표기/감추기
progressBar.setVisibility(View.VISIBLE); // To show the ProgressBar
progressBar.setVisibility(View.INVISIBLE); // To hide the ProgressBar
[REFERENCE]
- https://developer.android.com/reference/android/widget/ProgressBar
- https://stackoverflow.com/questions/45373007/progressdialog-is-deprecated-what-is-the-alternate-one-to-use
- https://www.android--code.com/2015/08/android-create-progressbar.html
- https://stackoverflow.com/questions/16893209/how-to-customize-a-progress-bar-in-android