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

مشکل در نمایش متون ترکیبی (فارسی و انگلیسی)


rasool.g

سوال

سلام. عبارت هایی مثل عبارت زیر رو نمیشه به خوبی نمایش داد.

"cpu چیست؟"

از اون جایی که متن با حرف انگلیسی شروع شده  . جهت متن (textDirection) چپ به راست انتخاب میشه و نیاز هست که جهت متن مثلا برای لیبیل راست به چپ انتخاب بشه.

چجوری میشه این مشکل رو حل کرد؟

پروزه

چند نکته :

1 - خود متن کاملا درست و استاندارده و تست شده

2 - gravity این مشکل رو حل نمیکنه و تست شده

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

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

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

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

همین عبارت رو اگه تو یه لیبل یا msgbox نمایش بدید . میبینید چجوری میشه :pardon:

بهم میریزه

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

من قبلا این مشکل رو داشتم که دوستان راهنمایی فرمودند و حل شد 
به سادگی براتون سرچ کردم " چپچین راسچین"  و تو نتایج جستجو پیدا شد 
سرچ کنید سریع تر به جواب میرسید تا تاپیک بزنید و منتظر باشید دوستان جواب بدن

موفق باشید

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

در 2 ساعت قبل، arastooms گفته است :

من قبلا این مشکل رو داشتم که دوستان راهنمایی فرمودند و حل شد 
به سادگی براتون سرچ کردم " چپچین راسچین"  و تو نتایج جستجو پیدا شد 
سرچ کنید سریع تر به جواب میرسید تا تاپیک بزنید و منتظر باشید دوستان جواب بدن

موفق باشید

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

من خودمم همیشه اول سرچ میکنم. چیزی یافت نشد :pardon:

البته gravity تا جایی که من میدونم معادل text-align در html هستش و به direction و rtl و ltr زیاد ربطی نداره.

 

Label8.Gravity = Gravity.RIGHT
Label1.Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.RIGHT)

این دو کد هم که یکیه ! (دومی فقط ار بالا به پایین متن رو وسط قرار میده). چجوری مشکلتون حل شد؟

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

دوستان معادل این کد ها در b4a چیه

ظاهرا راه حل استفاده از این کد هاست

android:textDirection="rtl"
android:textDirection="anyRtl"
textview.setTextDirection(View.TEXT_DIRECTION_RTL);
textview.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);

 

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

با جاوا باید این کار رو بکنید عزیز.

این متد رو به اکتیوتی اضافه کنید.

#If java
import android.view.View;
import android.widget.TextView;
public void setDirection(View label) {   
   ((TextView)label).setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
}
#End If

کتابخونه جاوا آبجکت و متد زیر دیگه...

Dim j As JavaObject
j.InitializeContext.RunMethod("setDirection",Array As Object(Label1))

 

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

در 27 دقیقه قبل، محمدرضا شاهپیری گفته است :

با جاوا باید این کار رو بکنید عزیز.

این متد رو به اکتیوتی اضافه کنید.


#If java
import android.view.View;
import android.widget.TextView;
public void setDirection(View label) {   
   ((TextView)label).setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
}
#End If

کتابخونه جاوا آبجکت و متد زیر دیگه...


Dim j As JavaObject
j.InitializeContext.RunMethod("setDirection",Array As Object(Label1))

 

ممنون جناب شاهپیری

کد در زیر هم اگه اشتباه نکنم مربوط به فایل ها و کد های xml میشه؟ همینطوره؟

 android:textDirection="rtl"

 

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

Bi-directional text

s = Chr(0x202B) & s & Chr(0x202C)

RLE -	Right-to-Left Embedding - 	U+202B
PDF -	Pop Directional Format 	-   U+202C

 

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

در در 1396/07/29, 14:20:35، محمدرضا شاهپیری گفته است :

با جاوا باید این کار رو بکنید عزیز.

این متد رو به اکتیوتی اضافه کنید.


#If java
import android.view.View;
import android.widget.TextView;
public void setDirection(View label) {   
   ((TextView)label).setTextDirection(View.TEXT_DIRECTION_ANY_RTL);
}
#End If

کتابخونه جاوا آبجکت و متد زیر دیگه...


Dim j As JavaObject
j.InitializeContext.RunMethod("setDirection",Array As Object(Label1))

 

سلام جناب شاهپیری .

من این کد رو هر چی تست میکنم جواب نمیده. بی زحمت ببینید کدهای زیر مشکلی داره؟

Sub Globals

	Private Label1 As Label
	Private Button1 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
	
	Activity.LoadLayout("Layout1")
	Dim s As String = File.GetText(File.DirAssets,"1.txt")
	
	Label1.Text = s
	
	Label1.Gravity = Gravity.RIGHT
	
	Dim j As JavaObject
	j.InitializeContext.RunMethod("setDirection",Array As Object(Label1))
	
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

#If java
import android.view.View;
import android.widget.TextView;
public void setDirection(View label) {   
   ((TextView)label).setTextDirection(View.TEXT_DIRECTION_RTL);
}
#End If


Sub Button1_Click
	ToastMessageShow("---",False)
	Dim j As JavaObject
	j.InitializeContext.RunMethod("setDirection",Array As Object(Label1))
End Sub

هر دو تا گزینه ی زیر رو هم امتحان کردم. طبیعتا باید جواب بده. ولی جهت متن تغییری نمیکنه

textview.setTextDirection(View.TEXT_DIRECTION_RTL);
textview.setTextDirection(View.TEXT_DIRECTION_ANY_RTL);

 

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

این متدها جواب نمیده متاسفانه. توی اندروید استودیو هم تست کردم فایده نداشت.

تنها راهش که من به ذهنم میرسه به صورت زیره.

اول متد زیر رو اضافه کنید. این متد متن رو به rtl تبدیل میکنه

#If java
import android.text.Html;
import android.text.Spanned;
	@SuppressWarnings("deprecation")
	public  String fromHtml(String string){
	    Spanned result;
	    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
	       result = Html.fromHtml("‫"+string,Html.FROM_HTML_MODE_LEGACY);
	    } else {
	       result = Html.fromHtml("‫"+string);
	    }
	    return result.toString();
	}
#End If

بعد هم به صورت زیر متن رو به لیبل بدید

Dim jo As JavaObject
Dim str As String=jo.InitializeContext.RunMethod("fromHtml",Array As String("cpu چیست؟"))
Label1.Text=str

 

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

در 17 ساعت قبل، محمدرضا شاهپیری گفته است :

این متدها جواب نمیده متاسفانه. توی اندروید استودیو هم تست کردم فایده نداشت.

تنها راهش که من به ذهنم میرسه به صورت زیره.

اول متد زیر رو اضافه کنید. این متد متن رو به rtl تبدیل میکنه


#If java
import android.text.Html;
import android.text.Spanned;
	@SuppressWarnings("deprecation")
	public  String fromHtml(String string){
	    Spanned result;
	    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
	       result = Html.fromHtml("‫"+string,Html.FROM_HTML_MODE_LEGACY);
	    } else {
	       result = Html.fromHtml("‫"+string);
	    }
	    return result.toString();
	}
#End If

بعد هم به صورت زیر متن رو به لیبل بدید


Dim jo As JavaObject
Dim str As String=jo.InitializeContext.RunMethod("fromHtml",Array As String("cpu چیست؟"))
Label1.Text=str

 

سلام. من از معادل یونیکد کارکتر های html ای که استفاده کردید، استفاده کردم. این کد هم جواب داد.

s = Chr(0x202B) & s & Chr(0x202C)

 

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

بایگانی شده

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

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

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