رفتن به مطلب

ساخت ProgressDialog شخصی


امیرحسین قاسمی

ارسال‌های توصیه شده

سلام

گاهی اوقات نیاز داریم ProgressDialog جزئی از UI برنامه باشه و مثلا با توقف موقت اکتیویتی از بین نره. یا بعضی موقع ها میخوایم رنگ بدنه یا رنگ و سایز و فونت متن ProgressDialog رو تغییر بدیم!

برای این کارها باید خودمون دست به کار بشیم و با پنل و لیبل و Progress این رو بسازیم اما باز ممکنه موقع ساختش به دردسر بخوریم مثلا متن زیاد باشه و از لیبل بیرون بزنه و...

به خاطر همین من کدهاشو نوشتم اینجا هم قرار میدم استفاده کنین.

ابتدا از Project->Add New Module->Class Module->Standard Class یه Class بسازین و اسمشو CustomProgressDialog قرار بدین.

حالا که Class ساخته شد کل کدهاشو پاک کنین و کدهای زیر رو داخلش قرار بدین:

Private Sub Class_Globals
	Private BasePanel As Panel
	Private Deactivator As Button
End Sub

Sub Initialize
End Sub

Private Sub Isinitialized
End Sub

Sub CustomProgressDialogShow(Text As String)
	CustomProgressDialogHide
	
	Dim R As Reflector
	R.Target = R.GetActivityBA
	
	Deactivator.Initialize("")
	Deactivator.Color=Colors.Transparent
	R.GetField("vg").As(Activity).AddView(Deactivator,0,0,100%x,100%y)
	
	BasePanel.Initialize("")
	BasePanel.Visible=False
	R.GetField("vg").As(Activity).AddView(BasePanel,0,0,100%x,100%y)
	BasePanel.RemoveAllViews
	BasePanel.Color=0x82000000
	BasePanel.SetVisibleAnimated(300,True)
	
	Dim ProgressDialogPanel As Panel:ProgressDialogPanel.Initialize("")
	Dim CD As ColorDrawable:CD.Initialize(Colors.White,10)
	ProgressDialogPanel.Elevation=2
	ProgressDialogPanel.Background=CD
	BasePanel.AddView(ProgressDialogPanel,10%x,45%y,80%x,10%y)
	
	Dim MyProgressBar As ProgressBar:MyProgressBar.Initialize("")
	MyProgressBar.Indeterminate=True
	ProgressDialogPanel.AddView(MyProgressBar,2%x,5%y-5%x,10%x,10%x)
	
	Dim TextLBL As Label:TextLBL.Initialize("")
	TextLBL.Text=Text
	TextLBL.Gravity=Gravity.RIGHT+Gravity.CENTER_VERTICAL
	ProgressDialogPanel.AddView(TextLBL,MyProgressBar.Width+4%x,1%y,74%x-MyProgressBar.Width,8%y)
	TextLBL.TextColor=Colors.Black
	TextLBL.TextSize=20
	
	Dim SU As StringUtils
	Dim TextHeight As Int=SU.MeasureMultilineTextHeight(TextLBL,Text)
	
	If TextHeight>TextLBL.Height Then
		ProgressDialogPanel.Height=TextHeight+2%y
		ProgressDialogPanel.Top=49%y-(TextHeight/2)
		TextLBL.Height=TextHeight
		MyProgressBar.Top=ProgressDialogPanel.Height/2-5%x
	End If
End Sub

Sub CustomProgressDialogHide
	If BasePanel.IsInitialized Then
		BasePanel.RemoveView
		Deactivator.RemoveView
	End If
End Sub

حالا توی اکتیویتی به این شکل استفاده میکنیم:

Sub Globals
	Dim MyCustomProgressDialog As CustomProgressDialog
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("Layout")
	MyCustomProgressDialog.Initialize
End Sub

Private Sub Button1_Click
	MyCustomProgressDialog.CustomProgressDialogShow("درحال نصب...")
	Sleep(5000)
	MyCustomProgressDialog.CustomProgressDialogHide
End Sub

کتابخونه های مورد نیاز: StringUtils و Reflection

هزینه استفاده:  3 صلوات بر محمد و آل محمد

image.gif.76de3e548d9e7f95d5791fa1eabe50ff.gif

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...