رفتن به مطلب

راه حل جلوگیری از افزایش سایز فونت پیش فرض دستگاه و مقدار دهی مجدد


ali mo

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

سلام بر همه دوستان ❤️

حتما دیدید که وقتی کاربر سایز فونت اصلی دستگاهش رو زیاد میکنه و میاد داخل برنامه شما فوت برنامه شما خیلی زیاد بزرگ میشه 

کدهای زیر که یه شخصی داخل سایت مرجع زده بودو برای رفع این مشکل رو براتون میزام البته با کمی تغییر و توضیح انشالله که مفید باشه.

 من چند بار این مطلب پرسیده بودم ولی متاسفانه گفتن راه حلی نداره داخل اندروید استدیو دستمون بازه و فکر کنم با sp یا dp میشه این مشکل حل کرد ولی داخل b4a من 2 سال بود چیزی پیدا نکردم البته روش های مثل اتوسایز لیبل هست ولی خوب این که میگم هم ی روشیه برا خودش 

و روش کلیش اینه که میاد مقیاس میگیره و نسبت به اون مقایش فونت پیش فرض کوچیک بزرگ میکنه

 


#Region کد های مربوط به جلو گیری کردن از تغییر سایز فونت پیش فرض دستگاه



'ممکنه این کد باگ های مثل فریز شدن تو پروژه رو داشته باشه و سنگین باشه 
'توجایی که خیلی ویو دارید شاید خیلی سنگ بشه 
'و فورس کلوز کنه اپ
'البته چون داخل نخ استفاده کردیم شاید در نهایت نخ اجرا نشه
'لینک این مطلب داخل سایت مرجع :
'https://www.b4x.com/android/forum/threads/get-size-of-system-font-in-use.28065/#post-181853
'اگرم مشکلی داشتید به ایدی زیر داخل تل پیام بدید
'@alimo1111
Sub StartTherad_DefulttFontSize
	Try
		
	Dim th As Thread
	th.Initialise("therdsetdefultfontsize")
		th.Start(Me,"SetDefulttFontSize",Null)
	
	Catch
		Log(LastException)
	End Try
End Sub
Private Sub therdsetdefultfontsize_Ended(endedOK As Boolean, error As String) 'The thread has terminated. If endedOK is False error holds the reason for failure
'	Msgbox(error,endedOK)
End Sub
Sub SetDefulttFontSize
	
	Try

	
	Dim access_fonssize As Accessiblity
	Dim fscale As Double
	fscale = access_fonssize.GetUserFontScale
		
'این شرط زیر اگر برقرار باشه باعث میشه فونت تطبیق بیابه با کوچک شدن فونت دستگاه هم
		If fscale > 1 Then

		For Each v As View In Activity.GetAllViewsRecursive
			If v Is Label Then
				Dim lbl As Label = v
				lbl.TextSize = NumberFormat2(lbl.TextSize / fscale,1,0,0,False)
'				خود ارل گفت کد زیر نیاز نیست ولی اگر برای باتون کار نکرد میتونید و کد های زیرم فعال کنید.
'			Else If v Is Button Then
'				Dim s As Button = v
'				s.TextSize = NumberFormat2(s.TextSize / fscale,1,0,0,False)
			End If
		Next

		End If
	
			
	Catch
		Log(LastException)
	End Try
End Sub
'این تابع هم به صورت دستی میره و سایز پیش فرض میگیره 
'میتونید این مقدار رو بدید به ویتون به صورت زیر
'lbl.TextSize = Get_DefultTextsize(lbl.TextSize)
Public Sub Get_DefultTextsize(TextSizeView As Float) As Float
	Try
		Dim access_fonssize As Accessiblity
		Dim fscale As Double
		fscale = access_fonssize.GetUserFontScale

		If fscale > 1 Then
			
			Return NumberFormat2(TextSizeView / fscale,1,0,0,False).As(Float)

	
		End If
		Return TextSizeView
	Catch
		Log(LastException)
	End Try
End Sub


#End Region

البته شاید روشی از این بهتر باشه مثل اتوسایز لیبل اون رو هم تحقیق کنید.

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

بایگانی شده

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

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

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