حل مشکل StringUtils در تنظیم ارتفاع لیبل و اسکرول ویو B4A

با سلام و سپاس خدمت کاربران عزیز سایت یاهو ۹۸ YAHOO

 

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

 

اگر در بیسیک۴اندروید از StringUtils و تابع MeasureMultilineTextHeight برای تنظیم ارتفاع لیبل و اسکرول ویو استفاده کرده باشید شاید متوجه‌ی مشکلاتی شده باشید و یا ممکنه در آینده به این مشکلات برخورد کنید. پس این پست رو از دست ندید…

 

 

 مشکل StringUtils چیه؟

 

۱- اگر برای لیبل موردنظرمون از کتابخانه هایی مثل RichString برای تغییر رنگ و سایز بخش هایی از متن استفاده کنیم دیگه تابع تنظیم ارتفاع StringUtils درست عمل نمیکنه!

۲- اگر از تابع setLineSpacing برای تنظیم فاصله بین خطوط لیبل استفاده کنیم دیگه StringUtils درست عمل نمیکنه و فاصله بین خطوط رو در نظر نمیگیره

۳- مشکلات این چنینی دیگه…

 

 

 راه حل این مشکل

 

از کد زیر برای تنظیم ارتفاع Label و scrollview در بیسیک۴اندروید استفاده نکنید!

 

Dim su As StringUtils
lbtext.Height=su.MeasureMultilineTextHeight(lbtext,lbtext.Text)
ScrollView1.Panel.Height=lbtext.Height

 

و بجاش از روش زیر استفاده کنید:

۱- کد جاوا زیر رو خارج از sub ها قرار بدید

 

#if JAVA
import android.text.StaticLayout;
import android.text.Layout.Alignment;
import android.widget.TextView;
public int MeasureMultilineTextHeight(TextView Label) {
StaticLayout sl = new StaticLayout(Label.getText(), Label.getPaint(),
Label.getLayoutParams().width - Label.getPaddingLeft() - Label.getPaddingRight(),
Alignment.ALIGN_NORMAL, 1, 0 , true);
return sl.getLineTop(sl.getLineCount());
}
#end if

 

۲- کتابخانه JavaObject رو تیک بزنید و تابع جاوا بالا رو فراخوانی کنید و بجای label1 و scrollview1 اسم لیبل و اسکرول ویو خودتون رو جایگذاری کنید:

 

Dim j As JavaObject
j.InitializeContext
label1.Height=j.RunMethod("MeasureMultilineTextHeight",Array(label1))
ScrollView1.Panel.Height=label1.Height

 

 

دیدگاهتان را بنویسید