رفتن به مطلب

ساخت Toast شخصی


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

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

سلام

برای اینکه یه toast شخصی بسازیم ابتدا از Project->Add New Module->Class Module->Standard Class یه Class به اسم CustomToast میسازیم و کدهای پیشفرضشو پاک می کنیم و کدهای زیر رو قرار میدیم:

Private Sub Class_Globals
	Private ToastLBL As Label
	Dim QueueList As List
End Sub

Sub Initialize
	QueueList.Initialize
	QueueList.Clear
End Sub

Private Sub Isinitialized
End Sub

Sub Show(Text As String,LongDuration As Boolean)
	If ToastLBL.IsInitialized Then
		If ToastLBL.Visible Then
			QueueList.Add(CreateMap("Text":Text,"LongDuration":LongDuration))
			Return
		End If
	End If
	
	Dim R As Reflector
	R.Target = R.GetActivityBA
	
	ToastLBL.Initialize("")
	ToastLBL.Visible=False
	R.GetField("vg").As(Activity).AddView(ToastLBL,20%x,80%x,60%x,10%y)
	Dim CD As ColorDrawable
	CD.Initialize(Colors.DarkGray,10)
	ToastLBL.Background=CD
	ToastLBL.Text=Text
	ToastLBL.Gravity=Gravity.CENTER
	ToastLBL.TextSize=18
	ToastLBL.TextColor=Colors.White
	ToastLBL.SingleLine=False
	ToastLBL.SetVisibleAnimated(500,True)
	
	Dim SU As StringUtils
	ToastLBL.Height=SU.MeasureMultilineTextHeight(ToastLBL,ToastLBL.Text)+1%y
	
	Dim jo As JavaObject=ToastLBL
	Dim TextWidth As Int=jo.RunMethodJO("getPaint",Null).RunMethod("measureText",Array(ToastLBL.Text))
	If TextWidth<60%x Then
		ToastLBL.Width=TextWidth+4%x
	End If
	
	ToastLBL.Top=92.8%y-ToastLBL.Height
	ToastLBL.Left=50%x-ToastLBL.Width/2
	
	Dim MyLongDuration As Int=3500
	If LongDuration=False Then
		MyLongDuration=2000
	End If
	
	Sleep(MyLongDuration)
	
	ToastLBL.SetVisibleAnimated(500,False)
	ToastLBL.Visible=False
	ToastLBL.RemoveView
	
	Queue
End Sub

Sub Queue
	If QueueList.IsInitialized Then
		If QueueList.Size>0 Then
			Dim mymap As Map=QueueList.Get(0).As(Map)
			QueueList.RemoveAt(0)
			Show(mymap.Get("Text"),mymap.Get("LongDuration"))
		End If
	End If
End Sub

از کلاسی که ساختیم در داخل اکتیویتی به این شکل استفاده میکنیم:

Sub Globals
	Dim Toast As CustomToast
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Toast.Initialize
End Sub

Private Sub Button1_Click
	Toast.Show("تست",False)
End Sub

اگر چندین بار پشت سر هم روی دکمه کلیک کنین و درخواست نمایش Toast رو بدین درخواست هاتون توی صف قرار میگیرن و بعد از اینکه Toast اولی نمایش داده شد، Toast دومی و بعد Toast سومی و... نمایش داده خواهد شد.

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

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

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

در ۱۴۰۱/۹/۱۳ در 01:46، امیرحسین قاسمی گفته است:

سلام

برای اینکه یه toast شخصی بسازیم ابتدا از Project->Add New Module->Class Module->Standard Class یه Class به اسم CustomToast میسازیم و کدهای پیشفرضشو پاک می کنیم و کدهای زیر رو قرار میدیم:

Private Sub Class_Globals
	Private ToastLBL As Label
	Dim QueueList As List
End Sub

Sub Initialize
	QueueList.Initialize
	QueueList.Clear
End Sub

Private Sub Isinitialized
End Sub

Sub Show(Text As String,LongDuration As Boolean)
	If ToastLBL.IsInitialized Then
		If ToastLBL.Visible Then
			QueueList.Add(CreateMap("Text":Text,"LongDuration":LongDuration))
			Return
		End If
	End If
	
	Dim R As Reflector
	R.Target = R.GetActivityBA
	
	ToastLBL.Initialize("")
	ToastLBL.Visible=False
	R.GetField("vg").As(Activity).AddView(ToastLBL,20%x,80%x,60%x,10%y)
	Dim CD As ColorDrawable
	CD.Initialize(Colors.DarkGray,10)
	ToastLBL.Background=CD
	ToastLBL.Text=Text
	ToastLBL.Gravity=Gravity.CENTER
	ToastLBL.TextSize=18
	ToastLBL.TextColor=Colors.White
	ToastLBL.SingleLine=False
	ToastLBL.SetVisibleAnimated(500,True)
	
	Dim SU As StringUtils
	ToastLBL.Height=SU.MeasureMultilineTextHeight(ToastLBL,ToastLBL.Text)+1%y
	
	Dim jo As JavaObject=ToastLBL
	Dim TextWidth As Int=jo.RunMethodJO("getPaint",Null).RunMethod("measureText",Array(ToastLBL.Text))
	If TextWidth<60%x Then
		ToastLBL.Width=TextWidth+4%x
	End If
	
	ToastLBL.Top=92.8%y-ToastLBL.Height
	ToastLBL.Left=50%x-ToastLBL.Width/2
	
	Dim MyLongDuration As Int=3500
	If LongDuration=False Then
		MyLongDuration=2000
	End If
	
	Sleep(MyLongDuration)
	
	ToastLBL.SetVisibleAnimated(500,False)
	ToastLBL.Visible=False
	ToastLBL.RemoveView
	
	Queue
End Sub

Sub Queue
	If QueueList.IsInitialized Then
		If QueueList.Size>0 Then
			Dim mymap As Map=QueueList.Get(0).As(Map)
			QueueList.RemoveAt(0)
			Show(mymap.Get("Text"),mymap.Get("LongDuration"))
		End If
	End If
End Sub

از کلاسی که ساختیم در داخل اکتیویتی به این شکل استفاده میکنیم:

Sub Globals
	Dim Toast As CustomToast
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Toast.Initialize
End Sub

Private Sub Button1_Click
	Toast.Show("تست",False)
End Sub

اگر چندین بار پشت سر هم روی دکمه کلیک کنین و درخواست نمایش Toast رو بدین درخواست هاتون توی صف قرار میگیرن و بعد از اینکه Toast اولی نمایش داده شد، Toast دومی و بعد Toast سومی و... نمایش داده خواهد شد.

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

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

سلام.

تشکر از این که علمتان را در اختیار بقیه قرار میدهید.

فقط کلاسی که نوشتید دوتا خطا داره:

8_154g.png

و هردوشون هم میگن متغیر فلان تعریف نشده!!

البته این سورس نیاز به کتابخانه جاوا هم داره

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

من الان امتحان کردم هیچ خطایی نداره و نباید هم داشته باشه.

کلاس رو پیوست میکنم تست کنین.

کتابخونه های StringUtils و Reflection و JavaObject هم تیک بزنین هرچند که ربطی به این خطاهای شما نداره.

اگه خطا همچنان پابرجا بود مربوط به Core خواهد بود و B4A نسخه 12 و SDK مخصوصش رو از اینجا دریافت و نصب کنین.

mToast.zip

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

2 دقیقه قبل، امیرحسین قاسمی گفته است:

من الان امتحان کردم هیچ خطایی نداره و نباید هم داشته باشه.

کلاس رو پیوست میکنم تست کنین.

کتابخونه های StringUtils و Reflection و JavaObject هم تیک بزنین هرچند که ربطی به این خطاهای شما نداره.

اگه خطا همچنان پابرجا بود مربوط به Core خواهد بود و B4A نسخه 12 و SDK مخصوصش رو از اینجا دریافت و نصب کنین.

mToast.zip 937 B · 0 دریافت

آخخخخخخخخخخخخخخخخخخخخ
داداش شرمنده.
کداش شکل کدای b4a بود، من به این دقت نکردم که این سورس برای کاتلین هست.

بازهم پوزش میطلبم.

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

9 دقیقه قبل، batman123 گفته است:

این سورس برای کاتلین هست

دوست عزیز برای B4A هست نه کاتلین!

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

۱ ساعت قبل، امیرحسین قاسمی گفته است:

دوست عزیز برای B4A هست نه کاتلین!

پس این چه آدرسه؟!

https://s6.uupload.ir/files/8_oyt4.png

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

20 دقیقه قبل، batman123 گفته است:

پس این چه آدرسه؟!

https://s6.uupload.ir/files/8_oyt4.png

اشتباه شده میگم اصلاح میکنن.

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

19 ساعت قبل، batman123 گفته است:

سلام.

تشکر از این که علمتان را در اختیار بقیه قرار میدهید.

فقط کلاسی که نوشتید دوتا خطا داره:

8_154g.png

و هردوشون هم میگن متغیر فلان تعریف نشده!!

البته این سورس نیاز به کتابخانه جاوا هم داره

شاید از B4A نسخه قدیمی استفاده میکنید که متد AS هنوز اضافه نشده سیع کنید از آخری نسخه استفاده کنید که دچار چنین مشکلاتی نشید

اگر هم میخواید بدون مشکل کارتون راه بیوفته 2 بخش As.(Activity) و As.(Map) پاک کنید به احتمال زیاد به مشکل نمیخورید مگر اینکه ورودی ها را اشتباه وارد کنید و از نوع Map و Activity نباشن

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

بایگانی شده

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

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

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