رفتن به مطلب

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


jeqele

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

خوب با این ماژول که نوشتم میتونید برای label اندازه فونت رو درست کنین بدون اینکه در اسکرین های مختلف مشکل داشته باشین. در واقع با تغییر سایز فونت تو گوشی های مختلف فونت شما هم کم یا زیاد میشه.

ماژولو یه نگاهی بندازین خیلی ساده نوشته شده و همونطور که قبلا گفتم یه جورایی کلک رشتیه اما در نبود کتابخانه AutoSizeTextLabel خوب کار میکنه.

دوتا sub براش گذاشتم که توضیح میدم.

ChangeFontByLabelSize.MinimomFontlabel(SampelLabel, Font)

با این کد می تونید یه فونت دلخواه به label بدید که اگه نوشته از Label بیرون نزنه از این فونت استفاده میکنه اما اگه نوشته کامل دیده نشه تا اندازه ای که قابل رویت بشه فونت رو کم می کنه.

ChangeFontByLabelSize.FitToLabelSize(SampelLabel)

با این یکی همیشه فونت رو دقیقا تا حدی که نه کوچکتر از label باشه نه بزرگ تنظیم میکنه.

خوب مطمعنا اگه یکم با b4a آشنایی داشته باشین هم میتونین ماژولو بسته به نیازتون تغییر بدین هم مثلا برای listview ازش استفاده کنین. خودم برای button استفاده کردم زیاد خوب در نیومد واسه همین اینجا نگذاشتم.

http://s5.picofile.com/file/8152432742/ChangeFontByLabelSize.rar.html

حالا مثال برای اعمال تغییرات روی لیبل:

اول از همه باید کتابخانه StringUtils رو به پوشه Library اضافه کنید که اگه ندارید از اینجا دانلول کنید از حالت فشرده خارج کنید و اضافه کنید.

http://s5.picofile.com/file/8154297092/StringUtils.rar.html

بعدش

ماژول رو از طریق Project>add existing moduls به برنامه اضافه کنید. بعد مثل این مثال عمل کنید.

ِDim SV1 As ScrollView
   Dim label1 As Label
   SV1.Initialize(100%y)
   label1.Initialize("label")
   label1.Text = "your text"
SV1.Panel.AddView(label1, 0, 0, 300dip, 600dip)  
ChangeFontByLabelSize.FitToLabelSize(label1)

تو کد بالا خط به خط توضیح میدم.

خط 1: یه اسکرول ویو تغریف کردم.

خط 2: یه لیبل تعریف کردم.

خط 3: اسکرول ویو رو اینیشیالایز کردم که اگه شما با دیزاینر تعرف کنی نیاز به این خط نیست.

خط 4: لیبل رو رو اینیشیالایز کردم که اگه شما با دیزاینر تعرف کنی نیاز به این خط نیست.

خط 5: به لیبل یه تکست دادم، شما هر تکستی خواستی به لیبل بده به جاش. مثلا میتونی از دیتانیس یا Edit text متنتو بگیری.

خط 6: لیبل رو توی اسکرول ویو اضافه میکنه. پیشنهاد میشه سایز ها رو توی این خط به جای dip با %X و %y بدبد.

خط 7: این خط همون روش استفاده از ماژوله. این خط کد مقدار فونت لیبل رو با دقیقا به انداطه ای که توی لیبل دیده بشه بزرگ با کوچیک می کنه.

توی پست بعد آموزشش واسه لیست ویو گذاشتم

یا حق

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

  • پاسخ 50
  • ایجاد شد
  • آخرین پاسخ

خوب حالا برای آشنایی دوستان یه مثال از کاربرد این ماژول برای لیست ویو میزارم
برای این کار شما باید اول یه label تعریف کنید و اندازه گیری ها رو روی اون انجام بدید بعد اندازه ها رو به لیست ویو منتقل کنید و در نهایت لیبل رو remove کنید.
این مثال برای یک لیست ویو با نام listview1 و با هر تعداد سطر که داشته باشه نوشته شده و جواب میده که در ابتدا بلند ترین سطر انتخاب میشه و اندازه گیری font بر پایه اون انجام میشه
اول ماژول بالا رو به پروژه اضافه کنید و بعد از این کد استفاده کنید

Dim st As String = ""
    Dim a As String
    Dim samplelabel As Label
    For i = 0 To Listview1.Size - 1
        a = Listview1.GetItem(i)
        If a.Length > st.Length Then
			st = a
		End If
	Next
    samplelabel.Initialize("SampleLabel")
    samplelabel.Visible = False
    Activity.AddView(samplelabel, Listview1.Left, Listview1.Top, Listview1.Width, Listview1.SingleLineLayout.ItemHeight)
    samplelabel.Text = st
    samplelabel.TextSize = Listview1.SingleLineLayout.Label.TextSize
    ChangeFontByLabelSize.MinimomFontLabel(samplelabel, samplelabel.TextSize)
    Listview1.SingleLineLayout.Label.TextSize = samplelabel.TextSize
    samplelabel.RemoveView

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

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

با سلام

متن داخل ScrollView رو چطور میشه تنظیم کرد

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

با سلام

متن داخل ScrollView رو چطور میشه تنظیم کرد

متن داخل ScrollView منظورت چیه؟ باید متن رو بزاری تو لیبل بعد بیاری اسکرول ویو دگ

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

متن داخل ScrollView منظورت چیه؟ باید متن رو بزاری تو لیبل بعد بیاری اسکرول ویو دگ

ببخشید اشتباه شد

بله متن داخل لیبل هستش

لطفا بگید که این ماژول را چطور بکار ببرم و کجا قرارش بدم

لطفا روان و واضح راهنمایی کنید ...

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

اول باید کتابخانه string utils رو اگه ندارید به برنامه اضافه کنید بعد

ماژول رو از طریق Project>add existing moduls به برنامه اضافه کنید. بعد مثل این مثال عمل کنید.

ِDim SV1 As ScrollView
   Dim label1 As Label
   SV1.Initialize(100%y)
   label1.Initialize("label")
   label1.Text = "your text"
   ChangeFontByLabelSize.FitToLabelSize(label1)
   SV1.Panel.AddView(label1, 0, 0, 300dip, 600dip)

تو کد بالا خط به خط توضیح میدم.

خط 1: یه اسکرول ویو تغریف کردم.

خط 2: یه لیبل تعریف کردم.

خط 3: اسکرول ویو رو اینیشیالایز کردم که اگه شما با دیزاینر تعرف کنی نیاز به این خط نیست.

خط 4: لیبل رو رو اینیشیالایز کردم که اگه شما با دیزاینر تعرف کنی نیاز به این خط نیست.

خط 5: به لیبل یه تکست دادم، شما هر تکستی خواستی به لیبل بده به جاش. مثلا میتونی از دیتانیس یا Edit text متنتو بگیری.

خط 6: این خط همون روش استفاده از ماژوله. این خط کد مقدار فونت لیبل رو با دقیقا به انداطه ای که توی لیبل دیده بشه بزرگ با کوچیک می کنه.

خط 7: لیبل رو توی اسکرول ویو اضافه میکنه. پیشنهاد میشه سایز ها رو توی این خط به جای dip با %X و %y بدبد.

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

سلام

من از این استفاده میکنم ماژول رو هم گذاشتم ولی اخطار میده و متن رو نشون نمیده

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.

   Private ScrollView1 As ScrollView

End Sub

Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:    
   Activity.LoadLayout("frm2")

   If File.Exists(File.DirInternal,"data.db")= False Then
   File.Copy(File.DirAssets,"data.db",File.DirInternal,"data.db")
   End If

   If Menu.SQL1.IsInitialized=False Then
   Menu.SQL1.Initialize(File.DirInternal,"data.db",False)
   End If


   Dim cur As Cursor
   cur=Menu.SQL1.ExecQuery("SELECT * FROM Tbl WHERE id="&Menu.Fasl)
   cur.Position=0


   Dim label1 As Label
   ScrollView1.Initialize(100%y)
   label1.Initialize("Label1")
   label1.text=cur.GetString("Matn")
   ChangeFontByLabelSize.FitToLabelSize(label1)
   ScrollView1.Panel.AddView(label1, 0, 0, 300dip, 600dip)

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

ببخشید اشتباه از من بود جای خط 6 و 7 رو عوض کن.

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

با تشکر فراوان از امین Jeqele عزیز بخاطر این پست.

به دلیل پر طرفدار بودن این موضوع ، پست مهم شد !!! *مکار*

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

*قلب* ممنون مهدی جان( M.izadi )لطف داری.

انگار یکم آموزشم ضعیف بود برای همین پست اول و دوم با ذکر مثال برای لیبل و لیست ویو به روز شد

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

  • 2 هفته بعد...

با سلام

دوستان ببخشید

من وقتی از این کد استفاده میکنم فقط برای بار اول درست کار میکه یعنی وقتی یه layout دیگه لود میشه این layout دیگه با این کد درست کار نمیکنه

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

  • 6 ماه بعد...

مشکل از کد نویسی شما هست من در چندین لایوت و اکتویتی استفاده کردم و هیج مشکلی نداره

 

فراموش نکنید حتما Label باید Initialize شده باشده

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

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

سلام و تشکر برای پست خوبتون


اما برای من یه مشکلی پیش اومده.


توی قسمت If st.Length این ارور رو میده.


 


B4A version 4.30


Parsing code.                           0.12

Compiling code.                         Error

.Error compiling program

.(Error description: Syntax error (missing parameter

Occurred on line: 51

        if st.Length

Word: length

چیزی باید تو اون قسمت بنویسم؟

 

پیشاپیش مچکرم

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

 

سلام و تشکر برای پست خوبتون

اما برای من یه مشکلی پیش اومده.

توی قسمت If st.Length این ارور رو میده.

 

B4A version 4.30

Parsing code.                           0.12
Compiling code.                         Error
.Error compiling program
.(Error description: Syntax error (missing parameter
Occurred on line: 51
        if st.Length
Word: length
چیزی باید تو اون قسمت بنویسم؟
 
پیشاپیش مچکرم

 

برادر من پست اول رو خوب مطالعه کنید دچار مشکل نشید

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

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

برادر من پست اول رو خوب مطالعه کنید دچار مشکل نشید

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

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

به نظر من بعد از if باید یه شرطی چیزی بذاریم که من نمیدونم چه شرطی.

یا به نظرم یه چیزی تو این مایه ها.

 

به هر حال ممنون

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

 

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

به نظر من بعد از if باید یه شرطی چیزی بذاریم که من نمیدونم چه شرطی.

یا به نظرم یه چیزی تو این مایه ها.

 

به هر حال ممنون

 

حرف Then رو ننوشتید،شرط باید اینجوری باشه:

If st.Length<>0 then

من اینجا <>0 رو برای مثال گذاشتم.

ملا منظورم این بود که بعد از شرط حرف Then رو قرار بدید.

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

ممنون آقای نیکروان.ولی بعد then باید یه شرطی باشه.اما من نمیدونم چه جور شرطی رو بذارم.بازم ممنون


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

ممنون آقای نیکروان.ولی بعد then باید یه شرطی باشه.اما من نمیدونم چه جور شرطی رو بذارم.بازم ممنون

الان مشکل شکا دقیقا کجاست ؟

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

ممنون که پرسیدید


خب مشکل اصلی من اینه که جلوی If st.Length یاید چیزی نوشت 


یا یه کار دیگه؟


یه مشکل دیگه هم تو ماژولی که باز کردم دارم.البته بیشتر شبیه سواله تا مشکل.


ماژول که باز میشه یه صفحه بارگذاری میکنه.کاری توش نباید بکنیم؟؟


 


اینم کل مشکل من


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

بایگانی شده

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

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

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

×
×
  • اضافه کردن...