اطلاعیه

کاربر گرامی

به انجمن برنامه نویسی AnswerCenter.ir خوش آمدید

 برای استفاده از تمامی امکانات سایت لطفا در انجمن عضو شوید


sajjadrastin

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

8 ارسال در این موضوع قرار دارد

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

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

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

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

چیکار کنم؟

مرسی

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


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

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

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 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 رو فعال کنید.

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

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

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

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

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

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در در 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))

 

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


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

مطالب شما نیاز است به تایید مدیران برسد

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

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.