উত্তর:
হ্যাঁ, 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));
এটি এক্সএমএল এর মাধ্যমে তৈরি করতে:
<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);
অগ্রগতি বারটি দেখানো / লুকিয়ে রাখা একই is
progressBar.setVisibility(View.VISIBLE); // To show the ProgressBar
progressBar.setVisibility(View.INVISIBLE); // To hide the ProgressBar
এটি দেখতে কেমন হবে তার একটি নমুনা চিত্র এখানে দেওয়া হয়েছে:
আরও তথ্যের জন্য:
1. রেফারেন্স এক
2. রেফারেন্স দুই
আপনি নীচের কোড 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
এখানে ব্যবহার করা উচিত নয়।
এই শ্রেণিটি এপিআই স্তরের ২re এ অবমুক্ত করা হয়েছিল Prog এই শ্রেণিটি ব্যবহার করার পরিবর্তে, আপনার অগ্রগতি বারের মতো একটি অগ্রগতি সূচক ব্যবহার করা উচিত, যা আপনার অ্যাপের ইউআইতে এম্বেড করা যেতে পারে। বিকল্পভাবে, আপনি কাজের অগ্রগতি সম্পর্কে ব্যবহারকারীকে অবহিত করতে একটি বিজ্ঞপ্তি ব্যবহার করতে পারেন। লিংক
নতুন ইউআই স্ট্যান্ডার্ডের Android O
কারণে এটি হ্রাস পেয়েছেGoogle
আপনি কেবল আপনার প্রগতিবারের জন্য একটি এক্সএমএল ইন্টারফেস ডিজাইন করতে পারেন এবং এটিকে একটি সতর্কতা ডায়ালগের মতামত হিসাবে পাস করতে পারেন, তারপরে আপনি যে কোনও সময় ডায়ালগটি প্রদর্শন বা খারিজ করতে পারেন।
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();
}
তারপরে আপনি যখনই প্রগতি ডায়ালগটি প্রদর্শন করতে চান তখন কেবল পদ্ধতিটি কল করুন এবং ডায়লগটি খারিজ করার জন্য এটি মিথ্যা বা মিথ্যা হিসাবে প্রদর্শন করার জন্য সত্য হিসাবে পাস করুন।
this
, যাতে এটি দেখতে এটির মতো লাগে lease AlertDialog.Builder builder = new AlertDialog.Builder(this);
দয়া করে নিশ্চিত হন যে আপনি সঠিক কোডটি অনুলিপি করছেন।
layout_toEndOf
এর জন্য না থেকে অপসারণ করা যেতে পারেLinearLayout
প্রগতিবারটি খুব সহজ এবং সহজেই ব্যবহারযোগ্য, আমি এটিকে সাধারণ অগ্রগতি ডায়ালগ হিসাবে তৈরি করার ইচ্ছা করছি। প্রথম পদক্ষেপটি হ'ল যে ডায়ালগটি আপনি প্রদর্শন করতে চান তার 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>
পরবর্তী পদক্ষেপটি সতর্কতা ডায়ালগ তৈরি করা হবে যা প্রগতিবারের সাথে এই বিন্যাসটি প্রদর্শন করবে
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
এবং এটি হ'ল এটি কাজ করা উচিত, আপনি দেখতে পাচ্ছেন যে এটি প্রগ্রেডায়ালগের পরিবর্তে প্রগ্রেসবার বাস্তবায়ন করা খুব সহজ এবং সহজ। এখন আপনি এই ডায়ালগ বাক্সটি হ্যান্ডলার বা এ্যাসিঙ্কটাস্কের মধ্যে আপনার প্রয়োজন অনুসারে প্রদর্শন / খারিজ করতে পারবেন
progress_dialog.show();
করুন builder.show();
। ধন্যবাদ.
show()
/ dismiss()
, তবে আমি রাখিনি builder.show()
কারণ তখন তা খারিজ করার জন্য আমাদের এমন কাজ করতে হবে dialog.dismiss()
যা তাদের কোডকে সহজ এবং সহজেই বুঝতে সহজতর করতে পছন্দ করে এমন ব্যক্তির পক্ষে বিভ্রান্তিকর ঘটনা, এবং এছাড়াও কারণ builder.show()
রিটার্ন AlertDialog
অবজেক্ট, এবং আমাদের সেই রেফারেন্সটি সেভাবে সংরক্ষণ করতে AlertDialog dialog = builder.show();
হবে dialog.dismiss()
, builder.create()
কোনও AlertDialog
কিছুতে ফিরে আসা সহজ , এবং তারপরে ডায়লগটি দেখানোর জন্য এবং লুকানোর জন্য সেই অবজেক্টটি ব্যবহার করতে হবে
হ্যাঁ, প্রগ্রেসডায়ালগ হ্রাস করা হয়েছে তবে ডায়ালগটি নেই।
আপনি আপনার নিজস্ব এক্সএমএল ফাইল (একটি অগ্রগতি বার এবং একটি লোডিং পাঠ্য সমন্বিত) আপনার ডায়ালগ অবজেক্টে স্ফীত করতে পারেন এবং তারপরে show()
এবং dismiss()
ফাংশনগুলি ব্যবহার করে এটি প্রদর্শন বা আড়াল করতে পারেন । এখানে একটি উদাহরণ (কোটলিন):
অগ্রগতি ডায়ালগ শ্রেণি :
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 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()
আচ্ছা আপনি যদি সত্যিই তাদের ইচ্ছার বিরুদ্ধে যেতে চান তবে এখনও আপনি মিষ্টি সতর্কতা ডায়ালগ ব্যবহার করতে পারেন বা একটি নিজস্ব তৈরি করতে পারেন।
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
কিছুই করে না।
প্রগ্রেসবারটি অগ্রগতি ডায়ালগের জন্য সেরা বিকল্প। একটি ব্যবহারকারী ইন্টারফেস উপাদান যা অপারেশনের অগ্রগতি নির্দেশ করে।
আরও তথ্যের জন্য এই গুগল ডকটি দেখুন: https://developer.android.com/references/android/widget/ProgressBar.html
আপনার কোনও কাস্টম লাইব্রেরি আমদানি করার দরকার নেই।
আমি আধুনিকটি ব্যবহার করতে পছন্দ করি 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
।
আপনি এখনও এটি ব্যবহার করতে পারেন, তবে অ্যান্ড্রয়েড আপনি এটি ব্যবহার করতে চান না, এজন্যই এটি হ্রাস করা হয়েছে। সুতরাং আপনার নিজের সমস্যাটিকে অন্যভাবে সমাধান করার কথা বিবেচনা করা উচিত, যেমন কোনও নিজের মধ্যে এম্বেড ProgressBar
করা Layout
।
ProgressDialog
এপিআই 26 স্তরে অবনতি হয়েছে।
নতুন ক্রিয়াকলাপগুলি প্রতিস্থাপনের প্রক্রিয়াধীন ফাংশন বা উপাদানগুলিকে বোঝায়।"Deprecated"
প্রগ্রেসডায়ালগ হ'ল একটি মডেল ডায়লগ, যা ব্যবহারকারীকে অ্যাপের সাথে ইন্টারঅ্যাক্ট করতে বাধা দেয়। এই শ্রেণিটি ব্যবহার করার পরিবর্তে, আপনার মতো অগ্রগতি সূচক ব্যবহার করা উচিত
ProgressBar
, যা আপনার অ্যাপের ইউআইতে এমবেড করা যেতে পারে।
সুবিধা
আমি ব্যক্তিগতভাবে বলতে চাই যে ProgressBar
দুটি এর প্রান্ত আছে। ProgressBar
একটি ব্যবহারকারী ইন্টারফেস উপাদান যা অপারেশনের অগ্রগতি নির্দেশ করে। কোনও ব্যবহারকারীর কাছে অ-বাধাজনক উপায়ে অগ্রগতি বারগুলি প্রদর্শন করুন । আপনার অ্যাপ্লিকেশনটির ইউজার ইন্টারফেসে অগ্রগতি বারটি দেখান।
আমি https://github.com/Q115/DelayedProgressDialog থেকে বিলম্বিত প্রোগ্রেস ডায়ালগ ব্যবহার করি এটি প্রয়োজনে বিলম্বের অতিরিক্ত সুবিধা সহ প্রগ্রেসডায়ালগের মতোই।
এটি ব্যবহার করা অ্যান্ড্রয়েড ও এর আগে প্রগ্রেস ডায়ালগের অনুরূপ:
DelayedProgressDialog progressDialog = new DelayedProgressDialog();
progressDialog.show(getSupportFragmentManager(), "tag");
আমার লেখা এই ক্লাসটি আপনি ব্যবহার করতে পারেন । এটি কেবলমাত্র প্রাথমিক কার্যাদি সরবরাহ করে। আপনি যদি একটি সম্পূর্ণ ক্রিয়ামূলক প্রগ্রেস ডায়ালগ চান তবে এই হালকা ওজনের লাইব্রেরিটি ব্যবহার করুন ।
মডিউল / build.gradle এ নিম্নলিখিত নির্ভরতা যুক্ত করুন:
compile 'com.lmntrx.android.library.livin.missme:missme:0.1.5'
ব্যবহার মূল প্রগ্রেসডায়ালগের মতো
ProgressDialog progressDialog = new
progressDialog(YourActivity.this);
progressDialog.setMessage("Please wait");
progressDialog.setCancelable(false);
progressDialog.show();
progressDialog.dismiss();
নোট : আপনার অবশ্যই কার্যকলাপের ওভাররাইড করতে হবেonBackPressed()
জাভা 8 বাস্তবায়ন:
@Override
public void onBackPressed() {
progressDialog.onBackPressed(
() -> {
super.onBackPressed();
return null;
}
);
}
কোটলিন বাস্তবায়ন:
override fun onBackPressed() {
progressDialog.onBackPressed { super.onBackPressed() }
}
হতে পারে এই গাইড আপনাকে সাহায্য করতে পারে।
সাধারণত আমি সূচকগুলি সহ কাস্টম সতর্কতা ডায়ালগগুলি তৈরি করতে পছন্দ করি। এটি অ্যাপের ভিউকে অনুকূলিতকরণের মতো সমস্যার সমাধান করে।
এটি অন্য লোকেদের সহায়তা করতে পারে।
নেটওয়ার্ক অ্যাপ্লিকেশন, ফাইল লোডিং ইত্যাদির মতো কোনও কিছুর অগ্রগতি দেখানোর জন্য প্রচুর জনপ্রিয় অ্যাপ্লিকেশনের আলাদা পদ্ধতির রয়েছে লোডিং স্পিনার দেখায় না যে কতগুলি সামগ্রী লোড করা হয়েছে বা লোড হওয়া বাকি রয়েছে। অনিশ্চয়তার একটি সময়কাল থাকে যা ইউআই / ইউএক্সের দৃষ্টিকোণে খারাপ। প্রচুর জনপ্রিয় অ্যাপস (ফেসবুক, লিংকডিন ইত্যাদি) প্রথমে খালি হাড়ের ইউআই প্রদর্শন করে এই সমস্যাটি সমাধান করেছে। তারপরে লোড হওয়া সামগ্রী ধীরে ধীরে অন স্ক্রিনে পপুলেশন হয়।
আমি শিহরণ ব্যবহার করেছি আমার অ্যাপ্লিকেশানগুলি এই সমস্যা সমাধানের জন্য।
এটি সম্পর্কে একটি ভাল নিবন্ধ আছে যা অন্যান্য মানুষের জন্য উপকারী হবে
অগ্রগতি সংলাপে, ব্যবহারকারী কোনও ধরণের কাজ করতে পারবেন না। অগ্রগতি সংলাপ চলাকালীন সমস্ত পটভূমি প্রক্রিয়া বন্ধ হয়ে যায়। সুতরাং, এটি অগ্রগতি ডায়ালগের পরিবর্তে ব্যবহারকারীর অগ্রগতি বারের পরামর্শ দেওয়া হয়।
আপনি নীচের লিঙ্কটি থেকে সম্পূর্ণ টিউটোরিয়ালটি পেতে পারেন লাইব্রেরি ওয়াসাবিফ ব্যবহার করে স্পটডায়ালগ ব্যবহার করতে পারেন: