امیرحسین قاسمی 610 ارسال شده در 12 آذر، ۱۴۰۱ اشتراک گذاری ارسال شده در 12 آذر، ۱۴۰۱ سلام گاهی اوقات نیاز داریم 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 صلوات بر محمد و آل محمد لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
ارسالهای توصیه شده
بایگانی شده
این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.