답변:
예, API level 26
더 이상 사용되지 않습니다. 대신을 사용할 수 있습니다 progressBar
.
프로그래밍 방식으로 작성하려면 다음을 수행하십시오.
먼저 루트 레이아웃에 대한 참조를 얻으십시오
RelativeLayout layout = findViewById(R.id.display); //specify here Root layout Id
또는
RelativeLayout layout = findViewById(this);
그런 다음 진행률 표시 줄을 추가하십시오
progressBar = new ProgressBar(youractivity.this, null, android.R.attr.progressBarStyleLarge);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100, 100);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
layout.addView(progressBar, params);
진행률 표시 줄을 표시하려면
progressBar.setVisibility(View.VISIBLE);
진행률 표시 줄을 숨기려면
progressBar.setVisibility(View.GONE);
사용자 상호 작용을 비활성화하려면 다음 코드 만 추가하면됩니다.
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"/>
당신의 활동에서
progressBar = (ProgressBar) findViewById(R.id.progressbar);
진행률 표시 줄 표시 / 숨기기는 동일합니다
progressBar.setVisibility(View.VISIBLE); // To show the ProgressBar
progressBar.setVisibility(View.INVISIBLE); // To hide the ProgressBar
다음은 그 모습에 대한 샘플 이미지입니다.
당신은 사용할 수 있습니다 AlertDialog
로 ProgressDialog
에 대한 코드 아래를 참조하십시오 ProgressDialog
. 이 기능은 진행 대화 상자를 표시 할 때마다 호출해야합니다.
암호:
public void setProgressDialog() {
int llPadding = 30;
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.setPadding(llPadding, llPadding, llPadding, llPadding);
ll.setGravity(Gravity.CENTER);
LinearLayout.LayoutParams llParam = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
llParam.gravity = Gravity.CENTER;
ll.setLayoutParams(llParam);
ProgressBar progressBar = new ProgressBar(this);
progressBar.setIndeterminate(true);
progressBar.setPadding(0, 0, llPadding, 0);
progressBar.setLayoutParams(llParam);
llParam = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
llParam.gravity = Gravity.CENTER;
TextView tvText = new TextView(this);
tvText.setText("Loading ...");
tvText.setTextColor(Color.parseColor("#000000"));
tvText.setTextSize(20);
tvText.setLayoutParams(llParam);
ll.addView(progressBar);
ll.addView(tvText);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setView(ll);
AlertDialog dialog = builder.create();
dialog.show();
Window window = dialog.getWindow();
if (window != null) {
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.copyFrom(dialog.getWindow().getAttributes());
layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
dialog.getWindow().setAttributes(layoutParams);
}
}
산출:
AlertDialog
여기서 사용해서는 안됩니다.
이 클래스는 API 레벨 26에서 더 이상 사용되지 않습니다. ProgressDialog는 모달 대화 상자이므로 사용자가 앱과 상호 작용할 수 없습니다. 이 클래스를 사용하는 대신 앱의 UI에 포함 할 수있는 ProgressBar와 같은 진행률 표시기를 사용해야합니다. 또는 알림을 사용하여 사용자에게 작업 진행 상황을 알릴 수 있습니다. 링크
새로운 UI 표준으로 Android O
인해 더 이상 사용되지 않습니다.Google
진행률 표시 줄에 대한 XML 인터페이스를 디자인하고 AlertDialog 에보기로 전달 한 다음 언제든지 대화 상자를 표시하거나 닫을 수 있습니다.
progress.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:padding="13dp"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/loader"
android:layout_marginEnd="5dp"
android:layout_width="45dp"
android:layout_height="45dp" />
<TextView
android:layout_width="wrap_content"
android:text="Loading..."
android:textAppearance="?android:textAppearanceSmall"
android:layout_gravity="center_vertical"
android:id="@+id/loading_msg"
android:layout_toEndOf="@+id/loader"
android:layout_height="wrap_content" />
</LinearLayout>
진행률 대화 상자를 표시하는 코드 코드입니다. 이 코드를 복사하여 조각에 붙여 넣으십시오.
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
private void setDialog(boolean show){
builder.setView(R.layout.progress);
Dialog dialog = builder.create();
if (show)dialog.show();
else dialog.dismiss();
}
그런 다음 진행률 대화 상자를 표시 할 때마다 메소드를 호출하고 인수로 true를 전달하여 표시하거나 대화 상자를 닫으려면 false를 전달하십시오.
this
이것을 다음과 같이 바꾸십시오 AlertDialog.Builder builder = new AlertDialog.Builder(this);
. 올바른 코드를 복사하고 있는지 확인하십시오.
layout_toEndOf
하지 않기 때문에 제거 가능LinearLayout
ProgressBar는 매우 간단하고 사용하기 쉽습니다. 간단한 진행 대화 상자와 동일하게 만들려고합니다. 첫 번째 단계는 표시하려는 대화 상자의 xml 레이아웃을 만들 수 있다는 것입니다.
layout_loading_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="20dp">
<ProgressBar
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center"
android:text="Please wait! This may take a moment." />
</LinearLayout>
다음 단계는 AlertBar를 생성하여 ProgressBar와 함께이 레이아웃을 보여줍니다.
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(false); // if you want user to wait for some process to finish,
builder.setView(R.layout.layout_loading_dialog);
AlertDialog dialog = builder.create();
이제 남은 것은 다음과 같은 클릭 이벤트에서이 대화 상자를 표시하고 숨기는 것입니다.
dialog.show(); // to show this dialog
dialog.dismiss(); // to hide this dialog
그리고 그것은 ProgressDialog 대신 ProgressBar를 구현하는 것이 매우 간단하고 쉽다는 것을 알 수 있듯이 작동합니다. 이제 Handler 또는 ASyncTask에서이 대화 상자를 표시 / 해제 할 수 있습니다.
progress_dialog.show();
에 builder.show();
. 감사합니다.
show()
/ dismiss()
,하지만 난 두지 않은 builder.show()
다음을 해제하기 때문에 우리가해야 할 것입니다 dialog.dismiss()
종류 이해하기 쉽게 자신의 코드를 간단하게 유지하기 좋아하는 사람을 혼란의 인도 왜냐하면 객체를 builder.show()
반환 하기 때문입니다. 그래서 AlertDialog
우리는 그와 같이 참조를 저장해야합니다 . 어떤 객체에서는 리턴 하기가 더 쉬우 며, 그 객체를 사용하여 대화 상자를 표시하고 숨길 수 있습니다AlertDialog dialog = builder.show();
dialog.dismiss()
builder.create()
AlertDialog
예, ProgressDialog는 더 이상 사용되지 않지만 Dialog는 사용되지 않습니다.
진행률 표시 줄 및 로딩 텍스트가 포함 된 고유 한 XML 파일을 대화 상자 객체에 부풀린 다음 show()
및 dismiss()
기능을 사용하여 표시하거나 숨길 수 있습니다. 다음은 예입니다 (코 틀린).
ProgressDialog 클래스 :
class ProgressDialog {
companion object {
fun progressDialog(context: Context): Dialog{
val dialog = Dialog(context)
val inflate = LayoutInflater.from(context).inflate(R.layout.progress_dialog, null)
dialog.setContentView(inflate)
dialog.setCancelable(false)
dialog.window!!.setBackgroundDrawable(
ColorDrawable(Color.TRANSPARENT))
return dialog
}
}
}
XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:background="#fff"
android:padding="13dp"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="100dp"
android:layout_margin="7dp"
android:layout_height="100dp"
android:layout_above="@+id/no_jobs_pickups"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_margin="7dp"
android:layout_toEndOf="@+id/progressBar"
android:text="Loading..." />
</RelativeLayout>
귀하의 코드에서 : 그냥 하십시오var dialog = ProgressDialog.progressDialog(context)
표시하려면 : dialog.show()
숨기려고: dialog.dismiss()
글쎄, 당신이 정말로 그들의 의지에 반대하고 싶다면, 당신은 여전히 Sweet Alert Dialog를 사용 하거나 직접 만들 수 있습니다.
progress_dialog_layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="64dp" >
<ProgressBar
android:id="@+id/progressBar2"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:gravity="center|left"
android:id="@+id/textView9"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/black"
android:textSize="18sp"
android:text="Downloading data. Please wait.." />
</TableRow>
</RelativeLayout>
자바 코드 :
AlertDialog b;
AlertDialog.Builder dialogBuilder;
public void ShowProgressDialog() {
dialogBuilder = new AlertDialog.Builder(DataDownloadActivity.this);
LayoutInflater inflater = (LayoutInflater) getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View dialogView = inflater.inflate(R.layout.progress_dialog_layout, null);
dialogBuilder.setView(dialogView);
dialogBuilder.setCancelable(false);
b = dialogBuilder.create();
b.show();
}
public void HideProgressDialog(){
b.dismiss();
}
HideProgress
아무것도하지 않습니다.
ProgressBar는 ProgressDialog의 가장 좋은 대안입니다. 작업 진행률을 나타내는 사용자 인터페이스 요소입니다.
자세한 내용은 다음 Google 문서를 참조하십시오 : https://developer.android.com/reference/android/widget/ProgressBar.html
사용자 정의 라이브러리를 가져올 필요는 없습니다.
이 페이지에서 Kishan Donga 가 게시 한 위대한 답변에 대한 Kotlin 버전 AlertDialog
이므로 현대를 선호 합니다.
fun setProgressDialog(context:Context, message:String):AlertDialog {
val llPadding = 30
val ll = LinearLayout(context)
ll.orientation = LinearLayout.HORIZONTAL
ll.setPadding(llPadding, llPadding, llPadding, llPadding)
ll.gravity = Gravity.CENTER
var llParam = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT)
llParam.gravity = Gravity.CENTER
ll.layoutParams = llParam
val progressBar = ProgressBar(context)
progressBar.isIndeterminate = true
progressBar.setPadding(0, 0, llPadding, 0)
progressBar.layoutParams = llParam
llParam = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT)
llParam.gravity = Gravity.CENTER
val tvText = TextView(context)
tvText.text = message
tvText.setTextColor(Color.parseColor("#000000"))
tvText.textSize = 20.toFloat()
tvText.layoutParams = llParam
ll.addView(progressBar)
ll.addView(tvText)
val builder = AlertDialog.Builder(context)
builder.setCancelable(true)
builder.setView(ll)
val dialog = builder.create()
val window = dialog.window
if (window != null) {
val layoutParams = WindowManager.LayoutParams()
layoutParams.copyFrom(dialog.window?.attributes)
layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT
layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT
dialog.window?.attributes = layoutParams
}
return dialog
}
val dialog = setProgressDialog(this, "Loading..")
dialog.show()
view!!.context
문서 페이지 에서 언급했듯이 대안 은 ProgressBar
입니다. ProgressDialog
의 모습은을 배치하여 복제 할 수 ProgressBar
로AlertDialog
.
여전히 사용할 수는 있지만 Android에서는 사용하지 않기 때문에 더 이상 사용되지 않습니다. 따라서을에 삽입하는 것과 같은 다른 방법으로 문제를 해결하는 것을 고려해야 ProgressBar
합니다 Layout
.
ProgressDialog
API 레벨 26에서 더 이상 사용되지 않습니다.
새로운 것으로 교체되는 기능이나 요소를 말합니다."Deprecated"
ProgressDialog는 모달 대화 상자로, 사용자가 앱과 상호 작용하지 못하게합니다. 이 클래스를 사용하는 대신
ProgressBar
앱의 UI에 포함 할 수 있는 진행률 표시기를 사용해야합니다 .
이점
나는 개인적으로 ProgressBar
그 둘보다 우위에 있다고 말할 것 입니다. ProgressBar
작업 진행을 나타내는 사용자 인터페이스 요소입니다. 진행률 표시 줄을 중단없이 표시 합니다. 앱의 사용자 인터페이스에 진행률 표시 줄을 표시하십시오.
https://github.com/Q115/DelayedProgressDialog 에서 DelayedProgressDialog를 사용합니다. 합니다. 필요한 경우 지연의 이점을 추가하여 ProgressDialog와 동일하게 수행합니다.
그것을 사용하는 것은 Android O 이전의 ProgressDialog와 유사합니다.
DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");
내가 쓴 이 수업을 사용할 수 있습니다 . 기본 기능 만 제공합니다. 완전한 기능을 갖춘 ProgressDialog를 원한다면이 경량 라이브러리 를 사용하십시오 .
module / build.gradle에 다음 종속성을 추가하십시오.
compile 'com.lmntrx.android.library.livin.missme:missme:0.1.5'
사용법은 원래 ProgressDialog와 유사합니다.
ProgressDialog progressDialog = new
progressDialog(YourActivity.this);
progressDialog.setMessage("Please wait");
progressDialog.setCancelable(false);
progressDialog.show();
progressDialog.dismiss();
NB : 활동을 무시해야합니다.onBackPressed()
Java8 구현 :
@Override
public void onBackPressed() {
progressDialog.onBackPressed(
() -> {
super.onBackPressed();
return null;
}
);
}
코 틀린 구현 :
override fun onBackPressed() {
progressDialog.onBackPressed { super.onBackPressed() }
}
이 안내서 가 도움 이 될 수 있습니다.
일반적으로 지표가있는 사용자 정의 AlertDialogs를 선호합니다. 앱보기 사용자 정의와 같은 문제를 해결합니다.
당신은 사용할 수 있습니다 SpotDialog를 다음 링크에서 전체 자습서를 찾을 수 있습니다 wasabeef 라이브러리를 사용하여 :