رفتن به مطلب
  • 0

دریافت عرض خودکار لیبل


sajjadrastin

سوال

سلام من یک متنی رو از سرور دریافت میکنم و اونو داخل یک لیبل میریزم و معلوم نیست که متن چقد طولانی باشه و لایوت حالت چت مانند داره

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

سرچ کردم و بهاین نتیجه رسیدم که اگه Width رو برابر -2 کنیم خودکار میشه و واقعا هم درسته ولی من میخام مقدار عددی Width خودکار رو هم بدست بیارم چون باهاش کار دارم واسه چن تا پنل و ابچکت دیگه و هر کاری کردم نشد مقدار Width رو دریافت کنم

توجه کنید که نمیخام سایز متن رو با لیبل تنظیم خودکار کنم و کوچیک و بزرگ کنم ، میخام سایز متن ثابت باشه و باتوجه به طول متن Width لیبل خودکار بزرگ بشه و اون Width تنظیم شده رو بصورت عدد دریافت کنم.

چیکار کنم؟

مرسی

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

7 پاسخ به این سوال تاکنون داده شده است

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

در در 1397/10/17, 12:24:25، sajjadrastin گفته است :

سلام من یک متنی رو از سرور دریافت میکنم و اونو داخل یک لیبل میریزم و معلوم نیست که متن چقد طولانی باشه و لایوت حالت چت مانند داره

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

سرچ کردم و بهاین نتیجه رسیدم که اگه Width رو برابر -2 کنیم خودکار میشه و واقعا هم درسته ولی من میخام مقدار عددی Width خودکار رو هم بدست بیارم چون باهاش کار دارم واسه چن تا پنل و ابچکت دیگه و هر کاری کردم نشد مقدار Width رو دریافت کنم

توجه کنید که نمیخام سایز متن رو با لیبل تنظیم خودکار کنم و کوچیک و بزرگ کنم ، میخام سایز متن ثابت باشه و باتوجه به طول متن Width لیبل خودکار بزرگ بشه و اون Width تنظیم شده رو بصورت عدد دریافت کنم.

چیکار کنم؟

مرسی

سلام 

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

گرفتن اندازه عرض(width) متن (یا متن لیبل)

••• قبلا با کتابخانه StringUtils میومدیم height متن لیبل رو میگرفتیم
حالا با روش زیر میتونیم width متن هم بگیریم و برابر با label.width قرار بدیم. •••1. کد جاوای زیر رو اضافه و کتابخانه javaObject رو تیک بزنید:

#if java
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;

public int getTextWidth(String txt,int size,Typeface typeface){
  Paint paint = new Paint();
  paint.setTextSize(size);
  paint.setTypeface(typeface);
  paint.setColor(Color.BLACK);
  paint.setStyle(Paint.Style.FILL);
  Rect result = new Rect();
  paint.getTextBounds(txt, 0, txt.length(), result);

  return result.width();
}
#End If

2. گرفتن سایز و لاگ دادن:

 


Dim jo As JavaObject
  jo.InitializeContext
  Log( jo.RunMethod("getTextWidth",Array(label1.Text,label1.TextSize,label1.Typeface)) ) 'لاگ کردن عرض

 

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

در 13 ساعت قبل، m007moh گفته است :

سلام 

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

گرفتن اندازه عرض(width) متن (یا متن لیبل)

••• قبلا با کتابخانه StringUtils میومدیم height متن لیبل رو میگرفتیم
حالا با روش زیر میتونیم width متن هم بگیریم و برابر با label.width قرار بدیم. •••1. کد جاوای زیر رو اضافه و کتابخانه javaObject رو تیک بزنید:


#if java
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;

public int getTextWidth(String txt,int size,Typeface typeface){
  Paint paint = new Paint();
  paint.setTextSize(size);
  paint.setTypeface(typeface);
  paint.setColor(Color.BLACK);
  paint.setStyle(Paint.Style.FILL);
  Rect result = new Rect();
  paint.getTextBounds(txt, 0, txt.length(), result);

  return result.width();
}
#End If

2. گرفتن سایز و لاگ دادن:

 



Dim jo As JavaObject
  jo.InitializeContext
  Log( jo.RunMethod("getTextWidth",Array(label1.Text,label1.TextSize,label1.Typeface)) ) 'لاگ کردن عرض

 

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

java.lang.RuntimeException: Method: getTextWidth not matched.
	at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:129)
	at b4a.example.main._vv2(main.java:468)
	at b4a.example.main._jobdone(main.java:401)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:515)
	at anywheresoftware.b4a.BA.raiseEvent2(BA.java:191)
	at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1154)
	at android.os.Handler.handleCallback(Handler.java:733)
	at android.os.Handler.dispatchMessage(Handler.java:95)
	at android.os.Looper.loop(Looper.java:136)
	at android.app.ActivityThread.main(ActivityThread.java:5019)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:515)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
	at dalvik.system.NativeStart.main(Native Method)

 

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

در در 1397/10/19, 10:45:21، sajjadrastin گفته است :

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


java.lang.RuntimeException: Method: getTextWidth not matched.
	at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:129)
	at b4a.example.main._vv2(main.java:468)
	at b4a.example.main._jobdone(main.java:401)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:515)
	at anywheresoftware.b4a.BA.raiseEvent2(BA.java:191)
	at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1154)
	at android.os.Handler.handleCallback(Handler.java:733)
	at android.os.Handler.dispatchMessage(Handler.java:95)
	at android.os.Looper.loop(Looper.java:136)
	at android.app.ActivityThread.main(ActivityThread.java:5019)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:515)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
	at dalvik.system.NativeStart.main(Native Method)

 

کتابخونه javaobject رو تیک بزنید و این کد رو جایگزین کنید 

#if java
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;

public int getTextWidth(String txt,int size){
  Paint paint = new Paint();
  paint.setTextSize(size);

  paint.setColor(Color.BLACK);
  paint.setStyle(Paint.Style.FILL);
  Rect result = new Rect();
  paint.getTextBounds(txt, 0, txt.length(), result);

  return result.width();
}


#End If

و اینجور فراخونی کنید

 

Dim jo As JavaObject
  jo.InitializeContext
  Log( jo.RunMethod("getTextWidth",Array(label1.Text,label1.TextSize))

 

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

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

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

در 12 ساعت قبل، rezac گفته است :

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

dim ffv as string
dd.TextColor=Colors.Black
					dd.Text="  "&ffv&"  "
			dd.TextSize=13
			dd.Gravity=Gravity.RIGHT+Gravity.CENTER_VERTICAL
			ScrollView1.Panel.AddView(dd,25%x , tp , 71.875%x , 40dip)
			ScrollView1.Panel.Height=tp

استرینگ ffv از سرور دانلود میشه

الان اگه Width  رو -2 بزارم خودکار میشه ولی کلا لایوت میریزه بهم و من میخام مقدار عددی Width خودکارو نسبت به طول متن استرینگ داشته باشم

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

فکر میکنم منظورتون از width همون height یا ارتفاعه لیبله.

اگه منظورتون همون ارتفاع یا height لیبل هست کد زیر رو بعد کدی که متن رو میزاره توی لیبل بنویسید ارتفاع براساس متن تنظیم میشه:

Dim strutil As StringUtils
lbl.Height = strutil.MeasureMultilineTextHeight(lbl,lbl.Text)

 

درضمن باید کتابخانه ی stringUtils رو فعال کنید.

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

در 10 دقیقه قبل، rezac گفته است :

فکر میکنم منظورتون از width همون height یا ارتفاعه لیبله.

اگه منظورتون همون ارتفاع یا height لیبل هست کد زیر رو بعد کدی که متن رو میزاره توی لیبل بنویسید ارتفاع براساس متن تنظیم میشه:


Dim strutil As StringUtils
lbl.Height = strutil.MeasureMultilineTextHeight(lbl,lbl.Text)

 

درضمن باید کتابخانه ی stringUtils رو فعال کنید.

باتشكر فراوان

ولي منظورم ارتفاع نيست

ارتفاع ليبل يك مقدار ثابته و نميخام تو برنامم تغييرش بدم و تغيير نميكنه

من ميخام طول يا همون پهناي ليبل رو با توجه به طول متن زياد كنم

روشي مثل همين هست؟

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

بایگانی شده

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

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

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