رفتن به مطلب

امیرحسین قاسمی

کاربر فعال
  • تعداد ارسال ها

    532
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    122

پست ها ارسال شده توسط امیرحسین قاسمی

  1. سلام،

    توی مستندات B4A ادیوری نحوه پیاده سازی تبلیغ همسان توضیح داده نشده و کتابخونه رسمی ادیوری هم متدی برای اینکار نداره!

    ولی توی مستندات اندروید استودیو اومده از طریق xml پیاده سازی کرده...

  2. سلام

    من به این شکل بخشی از متن یک لیبل رو رنگی و همچنین قابل کلیک میکنم:

    #If java
    import android.graphics.Color;
    import android.text.SpannableStringBuilder;
    import android.text.Spannable;
    import android.text.style.ClickableSpan;
    import android.text.style.ForegroundColorSpan;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.text.method.LinkMovementMethod;
    
    public static void makeTextViewClickable(TextView textView, int color, String metaChar) {
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(textView.getText());
    
        String text = textView.getText().toString();
        int startIndex = text.indexOf(metaChar) + 1;
        int endIndex = text.indexOf(metaChar, startIndex);
    
        String extractedText = text.substring(startIndex, endIndex);
    
        int start = textView.getText().toString().indexOf(extractedText);
        int end = start + extractedText.length();
    
        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                Toast.makeText(widget.getContext(), "کلیک شد", Toast.LENGTH_SHORT).show();
            }
        };
    
        spannableStringBuilder.setSpan(clickableSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableStringBuilder.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    	
    	int index = spannableStringBuilder.toString().indexOf("$");
    	
    	while (index >= 0) {
        	spannableStringBuilder.replace(index, index + 1, "");
        	index = spannableStringBuilder.toString().indexOf("$", index);
    	}
    	
        textView.setText(spannableStringBuilder);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
        textView.setHighlightColor(Color.TRANSPARENT);
    }
    #End If

    از تابع بالا به این شکل استفاده میکنم:

    Dim jo As JavaObject
    jo.InitializeContext
    jo.RunMethod("makeTextViewClickable",Array(Label10,Colors.Red,"$"))

    همه چی به درستی کار میکنه اما پایین متن قابل کلیک شده یه خط ایجاد میشه:

    image.png.420d947263835dda6ae60910687984a6.png

     

    من چطوری میتونم این زیرخط رو حذف کنم؟

    • پسندیدن 1
  3. ۱۲ ساعت قبل، محمدرضا شاهپیری گفته است:

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

    اول فایل زیپ رو دانلود و تو مسیر پروژه اکسترکت کنید

    و توی Region  Project Attributes کد زیر رو اضافه کنید

    #AdditionalRes: ..\res

    حالا کدهای زیر رو اضافه کنید به اکتیویتی

    
    #If java
    import android.util.TypedValue;
    import android.widget.TextView;
    import java.lang.reflect.Field;
    private int getResId(String variableName) {
        Field field;
        int resId = 0;
        try {
            field = R.dimen.class.getField(variableName);
            try {
                field.setAccessible(true);
                resId = field.getInt(null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resId;
    }
    public void setTextSize(TextView txt , int textSize){
        try {
            int resourceID =getResId("_"+textSize+"ssp");
            txt.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(resourceID));
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    public float getDpSize(int textSize) {
    	try {
    	    int resourceID = getResId("_" + textSize + "sdp");
    	    return getResources().getDimension(resourceID);
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    	return 0;
    }
    #End If

    به شکل زیر استفاده کنید

    Dim jo As JavaObject:jo.InitializeContext
    	jo.RunMethod("setTextSize",Array(EditText1,15))
    	Dim size100Dp As Int=jo.RunMethod("getDpSize",Array(100))
    	Button2.Width=size100Dp
    	Button2.Height=size100Dp

     

    ببخشید کدوم فایل zip؟

  4. ۳۵ دقیقه قبل، محمدرضا شاهپیری گفته است:

    سلام منظورتون اینه موقه تایپ و اینتر زدن ارتفاع زیاد بشه؟

    لطفا تصویر زیر رو ببینید:

    image.png.7df368d08c6e0fdedbf267b168b79ffb.png

    اندازه متن از اندازه EditText بیشتره و این باعث شده که نصف متن داخل EditText نمایش داده نشه!

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

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

  5. ۵۷ دقیقه قبل، DexterFstone گفته است:

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

    ول برای چیزی ک شما میخواین فکنم StringUtil متد مد نظر داره MeasureMultilineTextHeight 

    Dim Label1 As Label
    Label1.Initialize("")
    Label1.Text = "this is a long sentence, and we need to " _
      & "know the height required in order To show it completely."
    Label1.TextSize = 20
    Activity.AddView(Label1, 10dip, 10dip, 200dip, 30dip)
    Dim su As StringUtils
    Label1.Height = su.MeasureMultilineTextHeight(Label1, Label1.Text)

    موفق باشید

    ممنونم از راهنماییتون،

    اما این کد شما برای لیبل هست نه ادیت تکست!!

  6. سلام،

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

    EditText1.TextSize=40

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

  7. سلام به همه رفقای انسرسنتری:hi:

    خب ما اومدیم تهِ یه سالِ دیگه! سالی که پر بود از بالا و پایین، از خنده و اشک، از موفقیت و شکست، از تجربه‌های جدید و درس‌های آموزنده.

    با نزدیک شدن به جشن باستانی نوروز و آغاز سال نو، فرصتی دیدم تا به شما عزیزان پیشاپیش سال نو را تبریک بگویم و برایتان سالی پربرکت، شاد و پر از سلامتی آرزو کنم:give_rose:

    امیدوارم سال 1403 برای همه ما سالی سرشار از موفقیت، پیشرفت و شادکامی باشه. سالی که در آن شاهد رشد و شکوفایی روزافزون تک تک مردم دوست داشتنی ایران به خصوص دوستان گل انسرسنتر باشیم.

    حالا وقتشه که یه نفس عمیق بکشیم، به سال گذشته نگاه کنیم و از تجربه‌هامون درس بگیریم.

     

    بیاین توی این تاپیک، خاطرات، تجربیات و اتفاقاتِ سالِ 1402 رو با هم به اشتراک بذاریم.

    بگیم که این سال چطور گذشت، چه چالش‌هایی داشتیم، چه موفقیت‌هایی کسب کردیم، چه درس‌هایی از این سال گرفتیم و برای سال 1403 چه برنامه‌هایی داریم!:gamer2:

    مطمئنم که خوندنِ خاطراتِ شما، برای بقیه رفقای انسرسنتری هم جذاب و آموزنده خواهد بود.

    • پسندیدن 1
    • ذوق زده 1
  8. ۴ ساعت قبل، محمدرضا شاهپیری گفته است:

    باید دستور intoTarget رو بزنید نه into(img)

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

    اما اگه چندتا ImageView داشتیم چیکار کنیم؟

    For i= 0 To 9
    	Dim img As ImageView
    	img.Initialize("o")
    	Activity.AddView(img,40%x,i*10%y,10%x,10%y)
    
    	glide.With("glide").asBitmap.load("https://www.w3schools.com/w3css/img_lights.jpg").intoTarget
    Next

    وقتی ساب glide_onResourceReady صدا زده شد ما نمیدونیم که این تصویر (resource) برای کدوم ImageView هست!

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

    سلام و درود

    از کتابخونه زیر استفاده کنید ببینید اکی هست یا نه

     

    اینبار ساب glide_onResourceReady همون دفعه اولم صدا زده نشد:

    Sub Globals
    	Dim glide As PersianGlide
    	Dim img As ImageView
    End Sub
    
    Sub Activity_Create(FirstTime As Boolean)
    	img.Initialize("o")
    	Activity.AddView(img,30%x,40%x,40%x,40%y)
    	glide.With("glide").asBitmap.load("https://www.w3schools.com/w3css/img_lights.jpg").into(img)
    End Sub
    
    Sub glide_onResourceReady(resource As Object)
    	Log("onResourceReady")
    End Sub

     

  10. سلام
    من به این شکل از Amir Glide برای لود تصویر استفاده میکنم:

    Dim kj As Amir_GlideRequestOptions
    Dim kr As Amir_GlideTransformation
    Dim Glide As Amir_Glide
    
    Glide.Load("https://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Rotating_earth_%28large%29.gif/200px-Rotating_earth_%28large%29.gif").Apply(kj.Transform(kr.RoundedCorners(10,0dip)).Placeholder(bd)).Listener("mGlide",Null).Into(imageView)
    
    Sub mGlide_onResourceReady(Data As Object,Model As Object,DataSourceName As String,isFirstResource As Boolean) As Boolean
      Log("Resource Ready")
    End Sub

    وقتی که برنامه رو برای اولین بار اجرا میکنم و تصویر لود میشه بدون هیچ مشکلی ساب mGlide_onResourceReady صدا زده میشه. اما اگه ایمیج ویو رو Remove کنم و همین عملیات رو مجدد انجام بدم ساب mGlide_onResourceReady صدا زده نمیشه و همچنین تصویر هم لود نمیشه! اما اگه اپلیکیشن رو باز و بسته کنم درست میشه!

    من فکر میکنم مشکل از سیستم cache گلاید باشه. cache خودکار رو غیرفعال کردم برای بار دوم و سوم درست شد اما بار چهارم که ایمیج ویو رو Remove کردم و دوباره ساختم باز تصویر لود نشد! (البته من میخوام cache فعال باشه)

    کسی دقیقا میدونه دلیل این مشکل چیه؟

  11. در ۱۴۰۲/۱۰/۲۵ در ۰۰:۴۷، Majid.۲۰۱۹ گفته است:

    هاای دمت گرم

    نجاتمون دادی 

    میگم دادا این کارش چیه

    سلام

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

    به زبان ساده وقتی که کدهای پروژه زیاد باشه توی یه فایل dex جا نمیشه و باعث به وجود اومدن همین ارور شما میشه.

    حالا راه حل چیه؟

    کلاس ها و کدهای پروژه باید توی دوتا فایل dex یا بیشتر بسته بندی بشن که با کد زیر به کامپایلر اجازه میدیم این کار رو انجام بده:

    #MultiDex: True
    • پسندیدن 1
  12. ۲۲ ساعت قبل، محمدرضا شاهپیری گفته است:

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

    سلام

    تفاوت این نسخه با نسخه قبلی چی هست؟

    من برای برنامه خودم چند روز قبل با نسخه قدیمی کتابخونه آپدیت دادم. ممکنه مشکلی پیش بیاد؟

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

    سلام و درود

    مشکل دقیقا چی هست؟ خطای خاصی بر میگرده؟

    نیاز به اطلاعات دقیقتر هست

    برای من مشکلی وجود نداره و من تا به حال خودم به چنین مشکلی برنخوردم. اما بعضی از کاربران توی نظرات برنامه میگن سکه خریدیم واریز نشد.

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

    Private Sub myket_onIabPurchaseFinished(result As IabResult,purchase As Purchase)
    	Try
    		If purchase.IsInitialized Then
    			If result.isSuccessful=True  Then
    				CallSubDelayed2(Me,"consumeAsync",purchase)
    			Else
    				MyToast.ToastMessage("پرداخت ناموفق بود",False)
    			End If
    		End If
    	Catch
    		MyToast.ToastMessage("خطایی رخ داد",False)
    	End Try
    End Sub
    
    Sub consumeAsync(purchase As Purchase)
    	Try
    		adp.creat_map.Clear
    		adp.creat_map.Put("ac",5)
    		adp.creat_map.Put("acc",2)
    		adp.creat_map.Put("orderId",purchase.orderId)
    		adp.creat_map.Put("productId",purchase.Sku)
    		adp.creat_map.Put("purchaseTime",purchase.purchaseTime)
    		adp.host(Me,panelmain,panelmain,True,"hd1","puy_eshterak","update1/sign",adp.creat_map)
    		myket.consumeAsync(purchase)
    	Catch
    		MyToast.ToastMessage("پرداخت ناموفق بود",False)
    	End Try
    End Sub

     

  14. در ۱۴۰۱/۱۰/۱۱ در 22:35، Babak22 گفته است:

    سلام.

    ممنون از شما بابت زحمتی که کشیدید.

    من وقتی این سورس کد رو اجرا می کنم در همون اول در قسمت

    Private Sub myket_onIabSetupFinished(result As IabResult)
        Log(result.isSuccessful)
        Log(result.ErrorMsg)
    End Sub

    ایراد Billing service unavailable on device. (response: 3:Billing Unavailable)  میگیره

    publicKey رو هم چک کردم درسته

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

    CreateResourceFromFile(Macro, MyketBilling.Manifest)

     

  15. در ۱۴۰۱/۱۰/۱۱ در 13:01، Phoenix Phoenixinoo گفته است:

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

    سلام

    دوست عزیز مشکل توی کتابخونه نیست. وقتی خرید انجام میشه تابع EventName_purchaseSucceed صدا زده میشه. شما باید بعد پرداخت موفقیت آمیز بیای و شناسه رو چک کنی ببینی کاربر کدوم محصول رو خریده و فقط همون محصول رو بهش تحویل بدی!

    If purchaseInfo.productId="MyProduct1" Then
    	Log("باید محصول اول تحویل داده بشه")
    Else if purchaseInfo.productId="MyProduct2" Then
    	Log("باید محصول دوم تحویل داده بشه")
    End If
    • پسندیدن 1
  16. 14 ساعت قبل، اندروید اولترا گفته است:

    پوزش بابت ارسال دو پیام پیاپی. در صورت نصب نبودن بازار به روی موبایل، برنامه کرش میکنه 

    موقع صدا زدن متد purchaseProduct از Try Catch استفاده کنین:

    Try
    	Dim MyStr As String="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    	Dim Payload As String
    		
    	For i=0 To 8
    		Payload=Payload&MyStr.CharAt(Rnd(0,MyStr.Length-1))
    	Next
    	Bazaar.purchaseProduct("MyProductID",Payload.Trim)
    Catch
    	ToastMessageShow("بازار نصب نیست یا خطایی به وجود آمد",False)
    End Try

    یه راه دیگه چک کردن نصب بودن بازار روی گوشی قبل از صدا زدن متد purchaseProduct هست:

    Dim PM As PackageManager
    If PM.GetInstalledPackages.IndexOf("com.farsitel.bazaar")<>-1 Then
    	Dim MyStr As String="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    	Dim Payload As String
    	
    	For i=0 To 8
    		Payload=Payload&MyStr.CharAt(Rnd(0,MyStr.Length-1))
    	Next
    	Bazaar.purchaseProduct("MyProductID",Payload.Trim)
    Else
    	ToastMessageShow("بازار نصب نیست",False)
    End If

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

    AddPermission(android.permission.QUERY_ALL_PACKAGES)

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

  17. ویرایش: احتمالا مشکل از خود مایکت بوده، امروز باز تست کردم درست کار کرد و مشکلی نداشت. اون یکی برنامه هاهم که میگفتم تست کردم دیروز درست کار میکردن احتمالا از نسخه قدیمی کتابخونه مایکت استفاده میکنن.

    بنابراین دوستان باخیال راحت استفاده کنن.

×
×
  • اضافه کردن...