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

AnswerCenter

مرکز پاسخگویی به سوالات برنامه نویسی

  • مرجع پاسخگویی
  • تولید آموزش
  • سفارش پروژه

درخواست سفارش پروژه

اطلاعیه

کاربر گرامی

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

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


بایگانی شده

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

  • 0
sajjadrastin

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

سوال

sajjadrastin    100

کاربر رو به رشد

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

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

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

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

چیکار کنم؟

مرسی

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


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

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

پست های پیشنهاد شده

rezac    12

کاربر رو به رشد

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

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


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

کاربر رو به رشد

در 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 خودکارو نسبت به طول متن استرینگ داشته باشم

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


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

کاربر رو به رشد

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

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

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

 

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

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


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

کاربر رو به رشد

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

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

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


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

 

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

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

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

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

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

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

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


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

کاربر رو به رشد

در در 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)) ) 'لاگ کردن عرض

 

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


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

کاربر رو به رشد

در 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)

 

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


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

کاربر رو به رشد

در در 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))

 

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


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

×
×
  • جدید...