رفتن به مطلب

Radiomedia

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

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

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

  • روز های برد

    3

آخرین بار برد Radiomedia در 6 تیر

Radiomedia یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

25 خوب

درباره Radiomedia

  • درجه
    کاربر باسابقه
  • تاریخ تولد 1 بهمن 1370

مشخصات پروفایل

  • محل زندگی
    خمین
  • محل تولد
    خمین
  • علاقه مندی ها
    برنامه نویسی موسیقی

آخرین بازدید کنندگان نمایه

417 بازدید کننده نمایه
  1. با سلام (توجه - این آموزش برای این است که تفاوت یکسان شدن سایز متن ویو و یکسان شدن خود ویو یا در برخی موارد فیت شدن متن در ویو را متوجه بشید) موضوع مهمی که هنوزم هم در این انجمن و هم در انجمن سایت مرجع مورد بحث هست، سایز متن ویوها در دستگاه های مختلفه. امروز من هم کتابخانه مناسب رو بتون معرفی میکنم و هم راهکار رو بتون میدم تا اگر ایرادی در پروژتون وجود داشت بتونید برطرفش کنید. اما اصلا منظور ما از Scale یا مقیاس یا بزرگ و کوچک شدن متن نسبت به صفحه چیه؟ ما وقتی میخوایم ویوها رو با توجه به سایز صفحه مثل تلفن یا تبلت تنظیم کنیم که کوچک یا بزرگتر از حد معمول نشن، در Designer Script و یا در Code editor در B4A میتونیم کدهامون رو وارد کنیم، که مقیاس ما یا سایزدهی معمول هست که با dip داده میشه، یا نسبت به پهنا و ارتفاع صفحه است، که با %x و %y اینکارو انجام میدیم. اما برای متن ویوهامون اینکار انجام نمیشه و فقط خود ویو بزرگ و کوچک میشه و برای مثال اگر سایز فونت یک لیبل رو 15 داده باشیم، در هر سایزی همون 15 رو نشون میده و در دیوایس های کوچک خیلی بزرگ میشه و در دیوایس های بزرگ مثل تبلت خیلی کوچیک، پس راهکار اصلی چیه؟ راهش اینه که مثل ویوها با توجه به سایز صفحه سایز اونا بدیم: - یک راه اینه که با توجه به سایز ویو، سایز متن رو هم تغییر بدیم، که من این راهو انتخاب نکردم تابحال - یک راه هم نسبت به سایز صفحه گوشی هست: اما آیا میشه با فقط با در نظر گرفتن مقدار های درصد و dip اینکارو کرد؟ پاسخ خیر هست، ... ما بین دستگاه های مختلف دو تفاوت داریم یکی سایز پهنا و ارتفاع هست، و یکی Scale هست که یعنی نسبت نقطه به پیکسل یا اینچ (دقیقا یادم نیست) که اگر در دیزاینر b4a دیده باشید یا در شبیه سازها، سه عدد مختلف مثل زیر وجود دارد: Width: 768 - Height: 1024 - Scale : 1(160) مقیاس این اسکیل هم 160 هست، یعنی اگر 1 بود یعنی 160 اگر 2 بود 320 و ... پس زمانی که ما دو دستگاه با پهنای 768 داریم، یکی از آنها اسکیل 1 و دیگری 2 بود، قطعا سایز ویوها و فونت های ما هم متفاوت خواهد بود. پس چاره چیست، و چطور میتوان همه این سایز ها رو بدست آورد؟ چاره این است که ما یک مقدار پنها را بگیریم به همراه همین مقدار Scale که برای این کار در محیط Code در B4A برای بدست آوردن پهنا: Activity.Width که همون پهنا رو برمیگردونه مثلا 768 و برای Scale هم کلیدواژه Density رو میزنیم که همون مقدار برابر 1 یا 2 یا... که برابر 160، 320 و... هست رو برمیگردونه، برای راحت تر شدن محاسبات ما بهتره این مقدار برگشتی Density رو ضرب در 160 کنیم تا آسون تر شه. من در کلاسی که خودم نوشتم که هم به صورت جدا و هم مجموعه در سایت در - اینجا - قرار دادم به همراه توضیحات، میتونه با استاندارد کامل سایز متن رو نسبت به سایز گوشی تنظیم کنه. فرمول اون به این صورته که من اول پهنا رو تقسیم بر مقیاس کردم و اونو ضرب در مقدار ثابتی (که از تقسیم سایزی که کاربر وارد کرده بدست اومده) کردم. و این باعث میشه در همه سایز صفحه ها مقدار یکسانی داشته باشیم، یعنی اگر شما به صورت زیر وارد کنید: lbl.Textsize = msp1.sp(15) در هر سایز صفحه ای، سایز متن شما 15 استاندارد خواهد شد، ولی اگر به اینصورت باشد : lbl.Textsize = 15 فقط در سایزی که در حال طراحی هستید 15 را لحاظ میکند و در تبلت ها خیلی کوچکتر و ناخوانا خواهد بود. پس نتیجه می‌گیریم اگر میخواید متنی رو با هر سایزی درون ویو خودتون فیت کنید این راهش نیست، در اصل اگر برای فیت کردن کدی بنویسید، نیازی به این کلاس نیست، و شما میتونید با کتابخانه StringUtils پهنا و ارتفاع متنتون رو نسبت به ویو بگیرید و اندازش کنید، کار این کتابخانه sp فقط تعادل متن نسبت به سایز صفحه است. من هنوز برای فیت کردن در انجمن جستجو نکردم، اگر موردی بود ذکر کنید ویرایش کنم، اگر هم نبود امر بفرمایید یه کلاس براش بنویسم. امیدوارم بدردتون خورده باشه، لبتون خندون و لایک فراموش نشه.
  2. سلام، ممنون بابت فیدبک، اما من متوجه نشدم، این خط در فایل xml در خط 7 موجوده، و البته کتابخانه هم بدون مشکل کار میکنه. اما اگر هرگونه ایرادی هست، امر بفرمایید اصلاح میشه. فایل xml : <?xml version="1.0" encoding="utf-8"?> <root> <doclet-version-NOT-library-version>1.00</doclet-version-NOT-library-version> <b4x_version>9.80</b4x_version> <dependsOn>json</dependsOn> <dependsOn>phone</dependsOn> <dependsOn includesSingletonModules="true">maatisaokhttputils2</dependsOn> <dependsOn>okhttp</dependsOn> <dependsOn>stringutils</dependsOn> <dependsOn>okhttp-3.5.0</dependsOn> <dependsOn>okio-1.11.0</dependsOn> <class b4a_type="Service"> <name>ir.maatisa.pushnotify.push</name> <shortname>push</shortname> <owner>process</owner> <objectwrapper>java.lang.Class</objectwrapper> <permission>android.permission.VIBRATE</permission> <field> <name DesignerName="tmr">_tmr</name> <returntype>anywheresoftware.b4a.objects.Timer</returntype> </field> <field> <name DesignerName="linkR">_linkr</name> <returntype>String</returntype> </field> <field> <name DesignerName="str2">_str2</name> <returntype>String</returntype> </field> <field> <name DesignerName="jsonob">_jsonob</name> <returntype>anywheresoftware.b4a.objects.collections.JSONParser</returntype> </field> <field> <name DesignerName="mapob">_mapob</name> <returntype>anywheresoftware.b4a.objects.collections.Map</returntype> </field> <field> <name DesignerName="ac">_ac</name> <returntype>Object</returntype> </field> <field> <name DesignerName="inter">_inter</name> <returntype>int</returntype> </field> <field> <name DesignerName="phpLink">_phplink</name> <returntype>String</returntype> </field> <field> <name DesignerName="ico">_ico</name> <returntype>String</returntype> </field> <field> <name DesignerName="table">_table</name> <returntype>String</returntype> </field> <field> <name DesignerName="tout">_tout</name> <returntype>int</returntype> </field> <field> <name DesignerName="mapS">_maps</name> <returntype>anywheresoftware.b4a.objects.collections.Map</returntype> </field> <field> <name DesignerName="listen_pushStatus">_listen_pushstatus</name> <returntype>boolean</returntype> </field> <field> <name DesignerName="serv_notify">_serv_notify</name> <returntype>boolean</returntype> </field> <field> <name DesignerName="callAc">_callac</name> <returntype>Object</returntype> </field> <field> <name DesignerName="EvName">_evname</name> <returntype>String</returntype> </field> <method> <name>process_globals</name> <returntype>void</returntype> </method> </class> <class> <name>ir.maatisa.pushnotify.maatisapush</name> <shortname>MaatisaPush</shortname> <comment>A MaatisaPush Class that handles "push" service. Author: Mohsen Torabi Sample code in &lt;code&gt;mp.About&lt;/code&gt; Description More Info: &lt;link&gt;Telegram|https://t.me/maatisa_swdg&lt;/link&gt; </comment> <owner>process</owner> <event>pushReceived(success as Boolean, pushInfo as MaatisaPushArgs)</event> <method> <name>IsInitialized</name> <comment>Tests whether the object has been initialized.</comment> <returntype>boolean</returntype> </method> <method> <name DesignerName="About">_about</name> <comment>This library and php file was created by Mohsen Torabi from Maatisa.ir Contact me: MohsenTorabi086@gmail.com More Info: &lt;link&gt;Telegram|https://t.me/maatisa_swdg&lt;/link&gt; Sample: &lt;code&gt; #BridgeLogger: True Sub Globals Dim mp As MaatisaPush End Sub Sub Activity_Create(FirstTime As Boolean) mp.Initialize( "main" , "mp" , True) mp.setValues(0 , 0 , "http://yrDomain.ir/" , "pushnotify" , "" , "main") LogColor($"${mp.About}"$ , Colors.Yellow) mp.startPush End Sub 'You must do it in a service that whenever user exit application, then you can receive datas from your service. Sub mp_pushReceived(success As Boolean, pushInfo As MaatisaPushArgs) LogColor($"pushReceived Event: ${success} &amp; er: ${pushInfo.error}"$, Colors.Green) If success Then Dim ph As PhoneIntents 'Needs Phone library Dim n As Notification n.Initialize If pushInfo.status = "app" Then n.SetInfo(pushInfo.titr, pushInfo.body, Me) ' //ac = Main Else If pushInfo.status = "link" Then n.SetInfo(pushInfo.titr, pushInfo.body ,ph.OpenBrowser(pushInfo.link)) End If n.Notify(2) End If End Sub &lt;/code&gt; </comment> <returntype>String</returntype> </method> <method> <name DesignerName="getListenStatus" HideFromIDE="true">_getlistenstatus</name> <returntype>boolean</returntype> </method> <method> <name DesignerName="Initialize">_initialize</name> <comment>callback - is the module that handle the pushReceived Event. like "main" or "yourActivityName" EventName - that will be used for pushReceived Event. showServiceNotification - If True, Service shows a notification itself. If False, You must set the valid callback [Activity or Service] and Event name, and you can create your custom notification. &lt;code&gt;mp.Initialize( "main" , "mp" , True) &lt;/code&gt; </comment> <returntype>String</returntype> <parameter> <name>ba</name> <type>anywheresoftware.b4a.BA</type> </parameter> <parameter> <name>callback</name> <type>String</type> </parameter> <parameter> <name>EventName</name> <type>String</type> </parameter> <parameter> <name>showServiceNotification</name> <type>boolean</type> </parameter> </method> <method> <name DesignerName="phpCode">_phpcode</name> <comment>Return PHP code that must upload in your host. PHP Code: &lt;code&gt; &lt;?php // Mohsen Torabi - Maatisa.ir - Contact Me: MohsenTorabi086@gmail.com $q1 = $_GET['q1']; $tname = $_GET['tname']; $host = 'localhost'; $user = 'root'; $pass = ''; $db = 'yourDBname'; $con = @mysqli_connect($host,$user,$pass,$db); mysqli_set_charset($con,'UTF8'); If (!mysqli_connect_error()) { $tmax = mysqli_query($con,$q1); $rmax = mysqli_fetch_assoc($tmax); $mmax = $rmax['mnotify']; If($mmax &gt; 0){ $query = "SELECT * FROM $tname WHERE ID=$mmax"; $table = mysqli_query($con,$query); $row = mysqli_fetch_assoc($table); $arr['title'] = 'pushok'; $arr['ID'] = $row['ID']; $arr['status'] = $row['status']; $arr['titr'] = $row['titr']; $arr['body'] = $row['body']; $arr['link'] = $row['link']; echo json_encode($arr); } Else { $arr['title'] = 'pushfailed'; echo json_encode($arr); } } Else { //!mysqli_connect_error() $arr['title'] = 'dbfailed'; echo json_encode($arr); } mysqli_close($con); ?&gt; &lt;/code&gt; </comment> <returntype>String</returntype> </method> <method> <name DesignerName="setListenStatus" HideFromIDE="true">_setlistenstatus</name> <comment>You can set "True" or "False" to Pause or Resume listening Push Service. Or get listening Status &lt;code&gt;mp.ListenStatus = Not(mp.ListenStatus)&lt;/code&gt; </comment> <returntype>String</returntype> <parameter> <name>status</name> <type>boolean</type> </parameter> </method> <method> <name DesignerName="setValues">_setvalues</name> <comment>Sets values for receiving Data interval - interval of timer that check new notification. Default is : 60 - in Seconds. Timeout - of http GetRequest. Default is : 3000 - in ms. [Temporary: Disabled] phplink - just like this [with http:// or https:// ] : "https://yoursite.ir/" without "MaatisaPush.php" TableName - Your db table name for queries. icon - Small icon on notification. Activity - used for Notification Click event. Like: "main" or "yourActivityName" - For all be careful (Case Sensitive) - Your DataBase table must be contains these Fields: ID - Sure that is "Auto Increment", to finding out which record is fresh. status - For notification that open app or open a URL. Must be "app" or "link" titr - Title of notification. body - Body of notification. link - It use for open URL. Can be empty for status "app". &lt;code&gt;mp.setValues(0 , 0 , "http://yrDomain.ir/" , "pushnotify" , "" , "main")&lt;/code&gt; </comment> <returntype>String</returntype> <parameter> <name>interval</name> <type>int</type> </parameter> <parameter> <name>Timeout</name> <type>int</type> </parameter> <parameter> <name>phpLink</name> <type>String</type> </parameter> <parameter> <name>TableName</name> <type>String</type> </parameter> <parameter> <name>icon</name> <type>String</type> </parameter> <parameter> <name>Activity</name> <type>String</type> </parameter> </method> <method> <name DesignerName="startPush">_startpush</name> <comment>Starts push service You must first call Initialize and setValues. It must call at last and never repeat it again. You can call ListenStatus to "Pause" or "Resume" Service later. </comment> <returntype>String</returntype> </method> <property> <name DesignerName="ListenStatus">_listenstatus</name> <comment>You can set "True" or "False" to Pause or Resume listening Push Service. Or get listening Status &lt;code&gt;mp.ListenStatus = Not(mp.ListenStatus)&lt;/code&gt; </comment> <returntype>boolean</returntype> <parameter> <name>Value</name> <type>boolean</type> </parameter> </property> </class> <class> <name>ir.maatisa.pushnotify.push._maatisapushargs</name> <shortname>MaatisaPushArgs</shortname> <owner>process</owner> <method> <name>Initialize</name> <comment>Initializes the fields to their default value.</comment> <returntype>void</returntype> </method> <field> <name>IsInitialized</name> <comment>Tests whether the object has been initialized.</comment> <returntype>boolean</returntype> </field> <field> <name>titr</name> <returntype>String</returntype> </field> <field> <name>body</name> <returntype>String</returntype> </field> <field> <name>link</name> <returntype>String</returntype> </field> <field> <name>status</name> <returntype>String</returntype> </field> <field> <name>error</name> <returntype>String</returntype> </field> </class> <version>1.05</version> <author>Mohsen Torabi - Telegram: https://t.me/maatisa_swdg</author> </root>
  3. با سلام پست ویژه ما: کتابخانه پوش نوتیفیکیشن ماتیسا - MaatisaPush Library 1.05 اول بگم در کانال اینو پولی گذاشته بودم اما چون کم کاربرد بود و نمونه های رایگان و محدود موجود بود، رایگانش کردم تا بیشتر مورد استفاده قرار بگیره و بجاش برای شادی روح شهدای دفاع مقدس بخصوص عموهای من (شهیدان محمد و علی فرخی) یه صلوات بفرستید، سپاسگزارم. پوش نوتیفیکیشن؟ سرویسی که قادر است در حالت پس‌زمینه هرزمانی که تلفن به اینترنت متصل است (مخصوصا زمانی که اپلیکیشن‌های ما در حالت اجرا نیستند)، پیام موردنظر ما را که در سرویس ابری خود قرار داده ایم در Notification area گوشی کاربر نشان دهد. درحال حاضر سرویس های مختلفی برای انجام این امر وجود دارد، و حتی گوگل هم سرویسی با نام Firebase ارائه داده است. مزایای این سرویس ها: - نیازی به سرور و یا هاست خودی نیست و پیام‌های ما در سرویس ابری آنها ذخیره می‌شود. - نیازی به نوشتن یک خط کد هم نیست، همه کارها با IDE طراحی شده خودشان انجام خواهد شد و با اسکریپت های آماده می‌توان در برنامه خود راه اندازی کرد. و... معایب: - این سرویس ها کاملا نامحدود نیستند و محدودیت‌هایی دارند، از جمله: • تعداد کاربرانی که می‌توانید برای آنها پیام ارسال کنید. • تعداد پیام‌هایی که در بازه زمانی مشخص می‌توانید ارسال کنید. • نوع و ظاهر پیام ارسالی: شامل عکس دار بودن و... این موارد با پرداخت هزینه هایی قابل ارتقا هستند. - سفارشی سازی کامل پیام ارسالی و... ما این موارد را سطحی و کلی بیان کردیم، پس ممکن است سرویس هایی باشند که در ارائه خدمات تنوع بیشتر یا کمتری ارائه دهند. اما کتابخانه ای که ما ارائه کردیم چگونه است؟ {ابتدا باید توجه داشته باشید که تعداد پیام‌های ارسالی، تعداد کاربران و... همه موارد به سرویس ابری خودتان بستگی دارد، و اگر منابع تخصیصی خودتان را تمام کنید تا شارژ مجدد نمی‌توانید از سرویس خود استفاده ای کنید، پس موقع خرید سرویس ابری حتما با توجه به نیاز خود سرویس موردنظر را خریداری کنید. همچنین می‌توانید صرفا برای انجام تست از سرویس های رایگان نیز استفاده کنید} پس از خرید کتابخانه و استخراج آن از فایل زیپ شاهد ۳ فایل زیپ دیگر خواهید بود: • فایل کتابخانه • فایل های سمت سرور • سمپل کتابخانه دو فایل jar و xml موجود در زیپ Library را در پوشه Additional Libraries کپی کنید. در زیپ ServerSide دو فایل وجود دارد. • فایل MaatisaPush.php این فایل را در مکانی دلخواه در هاست خود کپی کنید. و آدرس آن را برای قراردادن در کد به خاطر بسپارید. همچنین باید این فایل را با استفاده از ویرایشگر متنی باز کنید و اطلاعات دیتابیس خود را در خطوط ۶ تا ۹ وارد کنید. خط ۶ - آدرس یا آی‌پی هاست دیتابیس خط ۷ - نام کاربری Username دیتابیس خط ۸ - پسورد دیتابیس خط ۹ - نام دیتابیس • فایل pushnotify.sql این فایل را هم در دیتابیس mysql هاست خود import کنید. - اگر مایل به اینکار نبودید می‌توانید با مقادیر زیر یک جدول در دیتابیس خود با استفاده از phpMyAdmin بسازید: - ID - Auto Increase - Index برای بررسی آخرین پیام وارد شده استفاده می‌شود - status - TEXT برای تعیین وضعیت رفتار نوتیفیکیشن استفاده می‌شود و مقادیر 'app' یا 'link' می‌گیرد که اگر app باشد، هنگام کلیک کاربر، اکتیویتی تعیین شده باز خواهد شد. و اگر link باشد، آدرس وب وارد شده در فیلد link با intent باز خواهد شد. - titr - TEXT متن نوشته عنوان یا نوشته بزرگ نوتیفیکیشن - body - TEXT متن بدنه نوتیفیکیشن - link - TEXT لینک وب، برای زمانی که مقدار فیلد status برابر link باشد. × فعلا برای ورود اطلاعات در دیتابیس باید دستی اینکار را انجام دهید، یعنی هربار که می‌خواهید پیغام جدیدی برای کاربران ارسال کنید، رکورد جدیدی هم باید ایجاد کنید. پس از انجام این کارها برای نمونه می‌توانید پروژه نمونه را بازکنید و طریقه پیاده سازی این کتابخانه را ببینید و کدهای موجود در پروژه نمونه را در پروژه خود کپی کنید. - نمونه سورس و آموزش پیاده سازی: ابتدا کتابخانه MaatisaPush را تیک بزنید. Sub Globals Dim mp As MaatisaPush End Sub Sub Activity_Create(FirstTime As Boolean) mp.Initialize( "main" , "mp" , False) mp.setValues(10 , 0 , "http://maatisa.ir/app/" , "pushnotify" , "" , "main") LogColor( $"${mp.About}"$ , Colors.Yellow) mp.startPush End Sub Sub Activity_LongClick mp.ListenStatus = Not(mp.ListenStatus) Log($"Enabled: ${mp.ListenStatus}"$) End Sub Sub mp_pushReceived(success As Boolean, pushInfo As MaatisaPushArgs) ' LogColor($"pushReceived Event: ${success} & er: ${pushInfo.error}"$, Colors.Green) ' If success Then Dim ph As PhoneIntents Dim n As Notification n.Initialize If pushInfo.status = "app" Then n.SetInfo(pushInfo.titr, pushInfo.body, Me) Else If pushInfo.status = "link" Then n.SetInfo(pushInfo.titr, pushInfo.body ,ph.OpenBrowser(pushInfo.link)) End If n.Notify(2) Else LogColor($"Error: ${pushInfo.error}"$, Colors.Magenta) End If End Sub Sub Activity_KeyPress (KeyCode As Int) As Boolean 'Return True to consume the event' If KeyCode = KeyCodes.KEYCODE_BACK Then ExitApplication End If Return True End Sub اسکرین از لاگ برنامه : اسکرین شات از صفحه کد نمونه: دانلودها: دانلود فایل پیش نمایش apk دانلود کتابخانه + فایل های سمت سرور(php و sql) + پروژه نمونه توضیح خط به خط کدها رو هم آماده میکنم همین پست رو ویرایش میکنم ببخشید که سرم یذره شلوغه ایشاله کاربردی باشه و لبتون خندون
  4. با سلام. برگشتیم با یک کتابخانه جامع و کاربردی با 4 کلاس و یک Attribute منیفست برای راحت تر انتخاب کردن تم های سفارشی 1 - کلاس sp یا MaatisaScaleFont : برای تعیین سایز یکسان متن ویوها در تمامی دیوایس ها: توضیح سورس 2 - کلاس MaatisaPersianNumber : تبدیل اعداد انگلیسی به فارسی: نحوه کار: Dim mpn1 As MaatisaPersianNumber Activity.Title = mpn1.PerNumber("1234567890") 3 - کلاس MaatisaLinkSupport : لینک دار کردن متن لیبل: Dim mls1 As MaatisaLinkSupport mls1.LinkSupport(lbl1) 4 - کلاس MaatisaCustomToast : یک تواست مسیج سفارشی با قابلیت تعویض فونت و سایز و رنگ متن و شکل و رنگ پس زمینه: Dim mct1 As MaatisaCustomToast mct1.Initialize("Welcome to Maatisa products", Typeface.DEFAULT_BOLD, Colors.Black, 16, Colors.Yellow, 20dip) mct1.Show("" , True) در Initialize مقدار اول پیام پیشفرض برای نمایش، مقدار دوم : فونت متن، مقدار سوم رنگ متن، چهارم سایز متن، مقدار پنجم: رنگ پس زمینه، و مقدار ششم Radius گوشه شکل پس زمینه در خط آخر هم نمایش تواست، اگر رشته خالی باشد متن پیشفرض در خط بالا را نشان می دهد، وگرنه متن وارد شده را نشان می دهد. توضیحات همه کدها در پروژه نمونه و در داکیومنت در فایل زیپ ارائه شده 5 - تم های موجود در کتابخانه: شامل 20 تم |~~ Themes [Macro]: |~~~ Dark [Def dark theme] |~~~ Light [Def light theme] |~~~ Blue [Dark parent] |~~~ Orange [Light parent] |~~~ Pink [Light parent] |~~~ Purple [Light parent] |~~~ Cyan [Light parent] |~~~ Brown [Dark parent] |~~~ Yellow [Dark parent] |~~~ Darkness [Dark parent] |~~~ Maatisa1 [Dark parent] |~~~ Maatisa2 [Dark parent] |~~~ Maatisa3 [Dark parent] |~~~ Maatisa4 [Dark parent] |~~~ Maatisa5 [Dark parent] |~~~ Maatisa6 [Dark parent] |~~~ Maatisa7 [Light parent] |~~~ Maatisa8 [Dark parent] |~~~ Maatisa9 [Dark parent] |~~~ Maatisa10 [Dark parent] طرز استفاده در منیفست: CreateResourceFromFile(Macro, MaatisaLibs.Blue) تصویر نمونه رنگ تم ها: اسکرین شات برخی از تم ها : انشاله به یاری خدا تم های بیشتری هم اضافه میکنم، و ایرادات جزئی هم برطرف میشن، یک مقدار سرم شلوغه، اگر درخواستی هم بود امر کنید در اولین فرصت در خدمتم. داکیومنت کتابخانه هم خدمت شما: ________________________________ |~ MaatisaLibs v1.00 ________________________________ |~~ Classes: |~~~ MaatisaSP v1.00 |~~~ MaatisaPersianNumber v1.00 |~~~ MaatisaCustomToast v1.00 |~~~ MaatisaLinkSupport v1.00 _________________________________ |~~ Themes [Macro]: |~~~ Dark [Def dark theme] |~~~ Light [Def light theme] |~~~ Blue [Dark parent] |~~~ Orange [Light parent] |~~~ Pink [Light parent] |~~~ Purple [Light parent] |~~~ Cyan [Light parent] |~~~ Brown [Dark parent] |~~~ Yellow [Dark parent] |~~~ Darkness [Dark parent] |~~~ Maatisa1 [Dark parent] |~~~ Maatisa2 [Dark parent] |~~~ Maatisa3 [Dark parent] |~~~ Maatisa4 [Dark parent] |~~~ Maatisa5 [Dark parent] |~~~ Maatisa6 [Dark parent] |~~~ Maatisa7 [Light parent] |~~~ Maatisa8 [Dark parent] |~~~ Maatisa9 [Dark parent] |~~~ Maatisa10 [Dark parent] ________________________________________________________________________ |~~~ How 2 use Macro Themes: (Add line below in Manifest Editor) |~~~~ CreateResourceFromFile(Macro, MaatisaLibs.Blue) _________________________________________________________________________ |~ Developed by Mohsen Torabi Maatisa SoftWare Development Group(SWDG) |~~ Telegram ch: https://t.me/maatisa_swdg |~~ Telegram ID: adMaatisa |~~ Email: mohsentorabi086@gmail.com - mohsentorabi1@hotmail.com |~~ Phone: (+98)9197260906 (Include WhatsApp) _________________________________________________________________________ Enjoy! _________________________________________________________________________ |~ Theme's Color Hex Codes: (In order: Primary Dark Primary Background Accent ) |~~ Blue #039BE5 #03A9F4 #CFD8DC #D4016E |~~ Darkness #011F30 #08283B #023250 #04D18F |~~ Orange #A8310D #DD2C00 #FFFFFF #DD2C00 |~~ Pink #BC0948 #F50057 #FFFFFF #F50057 |~~ Purple #7E0391 #A301BC #FFFFFF #A301BC |~~ Cyan #096971 #00838F #FFFFFF #00838F |~~ Yellow #FFD600 #FFEA00 #565226 #FFEA00 |~~ Brown #3E2723 #4E342E #795548 #BCAAA4 |~~ Maatisa1 #111D1C #F5272F #FCC136 #FE686D |~~ Maatisa2 #21243D #FF7C7C #FFD082 #59E3FE |~~ Maatisa3 #721B65 #B80D57 #F8615A #FFD868 |~~ Maatisa4 #204051 #3B6978 #84A9AC #CAE8D5 |~~ Maatisa5 #000000 #323232 #FF1E56 #FFAC41 |~~ Maatisa6 #7D152F #A3172C #8C0F48 #FC863D |~~ Maatisa7 #16DFBA #02FECF #BBFEF2 #20A88F |~~ Maatisa8 #730A39 #870E42 #E09722 #13ABAD |~~ Maatisa9 #33152D #4D1C48 #B00C1A #B7C765 |~~ Maatisa10 #4D2244 #2E8C8F #D32604 #D9FE04 _________________ کتابخانه MaatisaLibs v1.00 شامل کتابخانه، اسکرین شات، سمپل، داکیومنت، رنگ تم ها دانلود امیدوارم بدردتون بخوره، لبتون خندون
  5. سلام احتمالا ممکنه تابحال به ارور هایی برای اتصال به اینترنت با مجموعه کتابخانه های httputils برخورده باشید، معروف ترین و لاعلاج ترینشون : sending message to waiting queue of uninitialized activity (submitjob) برای حل این مشکل و بی شمار مشکلات تو سایت مرجع خیلی گشتم، اما راهکار مستقیمی پیدا نکردم، خودم راههای مختلفو امتحان کردم، و در نهایت سورس کلاس httpsutils رو ویرایش و دوباره کامپایل کردم. دلیلش هم ورژن جدید b4xlib هست، که در ورژن 2.70 این مشکل ها نیست، اما نمیشد همزمان از هر دو ورژن اسفاده کرد، که با این کار شما میتونید همزمان از هردوش استفاده کنید، اگر هنگام استفاده از هردو همزمان در تعریف متغییر مشکل داشتید، دوباره سورس کلاس رو از سایت مرجع دانلود کنید (یا فایل اصلی b4xlib در پوشه Libraries رو Extract کنید و کلاس و سرویس رو در پروژه جدید ایمپورت کنید) و نام کلاس و سرویس رو تغییر بدید (یادتون نره نامشون رو در فراخوانی ها در کدها هم جایگزین کنید) دانلود کتابخانه امیدوارم مفید باشه براتون ایشاله همیشه لبتون خندون باشه
  6. کتابخانه Maatisa ScaleFont [sp] Library (ویرایش: - طبق این آموزش - اگر میخواید متنی رو با هر سایزی درون ویو خودتون فیت کنید این راهش نیست، در اصل اگر برای فیت کردن کدی بنویسید، نیازی به این کلاس نیست، و شما میتونید با کتابخانه StringUtils پهنا و ارتفاع متنتون رو نسبت به ویو بگیرید و اندازش کنید، کار این کتابخانه sp فقط تعادل متن نسبت به سایز صفحه است.) با سلام قبلا مشابه این کتابخونه موجود بوده اما پارامتر های بیشتری میخواستن و این کتابخونه خیلی استفادش آسونتره، البته در همه سایز تست شده و کاملا Scale میشه دقیق. - وقتی در IDE اندروید استودیو میخوایم سایز متنی رو تعیین کنیم از کلیدواژه sp بجای dp یا px استفاده می‌کنیم تا در دیوایس هایی با هر سایز و هر dpi ای بتوان سایز استاندارد و Scale شده را دریافت کرد و خروجی بی‌نقصی داشته باشیم. اما در B4A چنین قابلیتی وجود ندارد بنابراین ما باید بصورت دستی نسبت اندازه دیوایس به رزولوشن را محاسبه کنیم. اما این کار نیاز به آزمون و خطاهای بسیاری دارد، و برای اطمینان باید هربار روی تلفن و تبلت تست گرفته شود، و برای استفاده روی ویوها هربار این فرمول تکرار و یا فراخوانی شود. کتابخانه ای که من برای شما آماده کردم این کار رو برای شما آسون میکنه، چون تست شده است، و کمترین زمان و خط کد رو از شما میگیره. برای استفاده ازین کتابخانه شما ابتدا کتابخانه را از اینجا دانلود و سپس در پوشه Additional Libraries کپی کنید، بعد یک شی از کلاس MSP در Sub Globals تعریف می‌کنید. سپس در Activity_Create یکبار آن را Initialize می‌کنید و درآن مقدار پهنای اکتیویتی خود را می‌دهید، و در ادامه برای هر ویویی که میخواهید سایز فونت آن را استاندارد بدهید، خط زیر را بجای سایز فونت وارد می‌کنید. lbl.TextSize = msp1.sp(15) این خط سایز ۱۵ استاندارد را برای هر اندازه ای تعیین خواهد کرد. به همین راحتی - نمونه سورس کامل: Sub Globals Dim msp1 As MSP End Sub Sub Activity_Create(FirstTime As Boolean) msp1.Initialize(Activity.Width) 'Initialize lib object with width of your Activity Dim lbl As Label lbl.Initialize("") lbl.Text = $"Maatisa ScaleFont [sp] Library${CRLF}Written by Mohsen Torabi"$ lbl.Gravity = Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL lbl.SingleLine = False lbl.Textsize = msp1.sp(15) 'Set best font size to Label Activity.AddView(lbl , 0 , 0 , 100%x , 10%y) Log(msp1.About) End Sub فایل پیش نمایش APK: دانلود فایل اصلی کتابخانه + سپمل برنامه: دانلود امیدوارم به کارتون بیاد ایشاله همیشه لبتون خندون باشه
  7. سلام. دوست عزیزم اتفاقا اینکار خیلی آسونیه و من بارها ازش اسفاده کردم. در منیفست: SetActivityAttribute(main, android:windowSoftInputMode, adjustResize|stateHidden) در Activity_Create: ime1.Initialize("ime1") ime1.AddHeightChangedEvent ایجاد ساب و تغییر ارتفاع خودکار : Sub ime1_HeightChanged(NewHeight As Int, OldHeight As Int) ScrollView1.Height = NewHeight End Sub در Activity_Pause (اگر خواستی اجباری نیست ) ime1.HideKeyboard اینم برای بازکردن کیبورد: که هرجایی که بخوای میذاریش، مثلا در Activity_Create: (خط زیر برای فعال شدن تکست هست، که خودکار باز شه) Sub txtSearch_FocusChanged (HasFocus As Boolean) If HasFocus = True Then ime1.ShowKeyboard(txtSearch) End If End Sub اصلا دیگه به هیچ چیزی نمیخواد دست بزنی که بهم بریزه. فقط اگر احیانا خواستی فیلتری برای تکست تعیین کنی و یا طول کاراکتر رو محدود کنی دو خط زیر : ime1.SetCustomFilter(txtSearch, txtSearch.INPUT_TYPE_NUMBERS, "0123456789.") ime1.SetLengthFilter(txtSearch , 10) ایشاله که جوابم بهترین باشه و به کارتون بیاد. خداقوت
  8. فونت آیکون های وب متریال جدید - MaterialIcons Web Font آموزش های قبلی: اول - دوم با سلام، حتما تاکنون از FontIcon ها استفاده کردید، که در b4a شامل دو فونت Font Awesome و Material Icon هست، امروز من فونت جدیدی رو بتون پیشنهاد میکنم، که دارای 3595 فونت‌آیکون هست درصورتی که در b4a در مجموع 800 آیکون موجود هست. طرز استفاده: اول فونت ضمیمه‌ شده را دانلود کنید و در پوشه Files پروژه‌تون بعنوان Assets کپی کنید. برای مشاهده و انتخاب آیکون برنامه تحت ویندوز ضمیمه شده را دانلود و اجرا کنید، خواهید دید طیف وسیعی از فونت‌آیکون ها را برای شما نمایش خواهد داد که میتوانید نام آیکون موردنظرتان را جستجو کنید. همینطور در این فایل لیست کامل نام آیکون ها را می بینید متن ویو با فونت‌آیکون: شما میتوانید به دو روش اینکار را انجام بدید؛ ۱- در برنامه تحت ویندوز تیک (Copy with Chr) بالای پنجره رو بردارید، تا با کلیک روی آیکون خود آیکون رو کپی کنه، و در بخش Layout Designer فونت ویو خودتون رو انتخاب و در بخش Text اون، آیکون کپی شده رو Paste کنید (در اونجا آیکون قابل مشاهده نیست اما مطمئن باشید بدرستی کار خواهد کرد) ۲- با کلیک روی آیکون موردنظر کد هگزا رو کپی میکنه، و در بخش کد b4a با دستور زیر متن ویو رو برابر با کد هگزا کپی شده قرار بدید. Label1.Text = Chr(0xF820) لینک سایت مرجع: https://www.b4x.com/android/forum/threads/b4x-materialicons-web-font-chooser.103985/ امیدوارم بدردتون بخوره. همیشه لبتون خندون منتظر آموزشهای بعدی باشید..
  9. با سلام آموزش دوم (تازه دارم گرم میشم) آموزش قبلی: اینجا خب آموزش تغییر تم سفارشی مثل حالت شب برنامه حین اجرا بدون appcompat این سورس و آموزش در سایت مرجع هم بود اما برای تم های پیشفرض بود نه سفارشی، اصلاحش کردم ایشاله اوکی باشید. طبق این آموزش تم متریال ما ادامه میدیم: چون ما به دو یا چند تم احتیاج داریم به صورت زیر عمل میکنیم: در منیفست: CreateResource(values-v21, themedark.xml, <resources> <style name="DarkTheme" parent="@android:style/Theme.Material"> <item name="android:colorPrimary">@color/prDark</item> <item name="android:colorAccent">@color/accentDark</item> <!-- checkboxes,, switches. msgbox buttons in Android 6.x --> </style> </resources> ) CreateResource(values-v21, theme.xml, <resources> <style name="LightTheme" parent="@android:style/Theme.Material.Light"> <item name="android:colorPrimary">@color/pr</item> <item name="android:colorAccent">@color/accentLight</item> </resources> ) برای api های زیر 21 هم خودش از تم هایی که رفرنس کردیم ارث بری میکنه (طبق آموزش لینک شده) فقط اینکه رنگ های دلخواه ما رو داخلش نمی زنه. در b4a کد های زیر رو وارد کنید: Sub Process_Globals Private Theme_Value As Int Private res As XmlLayoutBuilder End Sub Private Sub SetTheme (Theme As Int) If Theme = 0 Then Return End If If Theme = Theme_Value Then Return File.WriteString(File.DirInternal, "theme.txt", Theme) Theme_Value = Theme Activity.Finish StartActivity(Me) End Sub #if java import anywheresoftware.b4a.objects.streams.*; public void _onCreate() { try { if (File.Exists(getFilesDir().toString(), "theme.txt")) _theme_value = Integer.parseInt(File.ReadString(getFilesDir().toString(), "theme.txt")); } catch (Exception e) { throw new RuntimeException(e); } if (_theme_value != 0) setTheme(_theme_value); } #end if برای تنظیم تم هم در رویداد مثلا کلیک باتن کد زیر: SetTheme(res.GetResourceId("style", "LightTheme")) و SetTheme(res.GetResourceId("style", "DarkTheme")) این آموزش در سایت مرجع در فراخوانی استایل دلخواه ایراد داشت که با آزمون و خطا اصلاحش کردم، البته چون اون برای تم های پیشفرض بود اما این سفارشیه، فرقش هم این بود که در خط بالا بجای: style نوشته بود: android:style بهرحال امیدوارم بدردتون بخوره، ایشاله همیشه لبتون خندون باشه. آموزش بعدی
  10. با سلام و کسب اجازه از اساتید وبسایت انسرسنتر اولین آموزش رو براتون قرار میدم. مدت زیادیه در این وبسایت عضو هستم و از آموزش هاش استفاده کردم، این در حالیه که هیچ آموزشی تابحال نذاشتم، و خودم رو متعهد دونستم هرچند کوچک این لطف رو جبران کنم. خب اولین آموزش، طریقه ساخت پس زمینه و ساخت افکت موج دار یا Ripple در فایل xml و فراخوانی آن: ابتدا باید بگم شاید روش‌های من خیلی اصولی و کوتاه نباشه اما بهرحال کارو راه میندازه. برای ساخت پس زمینه ابتدا راه اول: کد زیر رو در یک فایل xml ذخیره و پوشه Drawable می‌ریزیم و Attribute اون رو در حالت Read-only قرار میدیم، برای اینکه موقع کامپایل حذف نشه(که معمولا این راه توصیه نمیشه) برای مثال نام این فایل رو solid.xml میزاریم: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > //or oval <corners android:radius="10dp" /> <solid android:color="#FFF" /> <stroke android:width="1dp" android:color="@color/light_gray" /> </shape> در تگ shape و گزینه android:shape="rectangle" ما شکل مستطیل رو انتخاب کردیم اما اگر خواستید دایره باشه oval رو بجاش بزارید تگ corners گرد کردن گوشه ها رو تعیین میکنه تگ solid تک رنگ پس زمینه رو، که رنگ اینجا سفید هست و یا میتونید gradiant یعنی طیف رنگ هم بدید: <gradient android:angle="90" android:endColor="#3C000000" android:startColor="#002e3436" /> angle یعنی زاویش که 90 درجه یعنی startColor بالاست و endColor پایین. تگ stroke هم خط دور شکل که ضخامتش اینجا 1dp هست و رنگش هم طوسی روشن راه دوم: و یا کد زیر رو در منیفست پروژه کپی کنید. CreateResource(drawable , solid.xml , <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="10dp" /> <solid android:color="#FFF" /> <stroke android:width="1dp" android:color="@color/light_gray" /> </shape> ) تفاوتشون در خط اوله که در اینجا، ما پوشه رو اول و بعد اسم فایل رو و بعدش کد داخلش رو وارد میکنیم. در محیط b4a اول کتابخانه xmlLayoutBuilder رو اضافه و تیک میزنیم. لینک سایت مرجع لینک دانلود کابخانه بعد ویو ای که میخوایم بش پس زمینه بدیم رو ایجاد میکنیم، و کد زیر رو کپی می‌کنیم: Private res As XmlLayoutBuilder Label1.Background = res.GetDrawable("solid") بخش دوم: ساخت پس‌زمینه چندلایه برای زمانی که میخوایم مثلا زیرسایه بدیم به ویو: CreateResource(drawable , bottomshadow.xml , <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> //سایه <shape android:shape="rectangle"> <solid android:color="#F7F7F7"/> <corners android:radius="5dp" /> </shape> </item> <item android:left="0dp" android:right="0dp" android:top="0dp" android:bottom="5dp"> <shape android:shape="rectangle"> <solid android:color="#FFF"/> //background <corners android:radius="5dp" /> </shape> </item> </layer-list> ) این هم مثل قبلیه فقط دو لایه از شکل هاست، که در بالایی سایه رو ترسیم میکنیم، و پایین شکل پس زمینشو. بخش بعدی قراردادن افکت ریپل برای ویو: کد زیر رو در منیفست اضافه میکنیم: CreateResource(drawable , ripple.xml , <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/colorAccent" > <item android:drawable="@drawable/solid" /> </ripple> ) در قسمت رنگ، هر رنگی خواستید بزارید، و در قسمت drawable فایل xml که قبلش ساختیم رو میدیم نکته، اگر خواستید برای پس زمینه ویو عکس بزارید با افکت ریپل، اول عکس مدنظر رو در پوشه drawable کپی کنید(باید png باشه)، و اونو در حالت Read-only بزارید، و بعدش اسم عکس رو بجای فایل xml وارد کنید(بدون پسوند) مثلا اسم عکستون bg.png : <item android:drawable="@drawable/bg" /> و در b4a کد زیر : Private res As XmlLayoutBuilder Label1.Background = res.GetDrawable("ripple") امیدوارم بدردتون بخوره این آموزش، من الان دنیام شده برنامه نویسی اندروید، و B4A واقعا داره روز به روز بهتر میشه، اگر آموزشی مد نظرتون بود و یا در سایت مرجع موجهش نشدید بم بگید اگر تونستم حتما آموزششو براتون میذارم. آموزش های بعدی رو هم سعی میکنم لینکشو زیر همه آموزشا بزارم. ایشاله همیشه لبتون خندون باشه آموزش دوم: اینجا
  11. قبل از شروع حتما دو کتابخانه okhttputils و okhttp را همزمان فعال کنید. البته من تا الان ندیده بودم یک فرمت جیسان برای ارسال ب سرور درخواست بشه. ک اگر اینطور باشه فقط: j.Download("http://rest.ippanel.com/v1/messages/patterns/send") j.GetRequest.SetHeader("Authorization","vciNMNAvFwjnJkd_FWMs8qTHOy82K3HznvfExhYJAQ4") راه دوم: و به صورت زیر: پارامتر های دانلود رو کامل اضافه کنید. (احتمال کم) dim j as Httpjob j.Initialize("j", Me) j.Download2("http://rest.ippanel.com/v1/messages/patterns/send", Array As String("pattern_code","t2cfmnyo0c","originator","9850002")) j.GetRequest.SetHeader("Authorization","vciNMNAvFwjnJkd_FWMs8qTHOy82K3HznvfExhYJAQ4") طبق سایت مرجع: https://www.b4x.com/android/forum/threads/set-http-request-header-with-okhttputils2.39413/ https://www.b4x.com/android/forum/threads/solved-http-headers-in-request-use-okhttp-and-okhttputils2.65828/ اگر باز هم نشد دقیقا ایراد از نحوه پست کردنه، متد های httpjob رو امتحان کنید، مثلا اول این محتویات جیسان رو داخل یک فایل بریزید و با متد postfile به آدرس ارسال کنید. و یا به شکل زیر: j.PostMultipart("http://rest.ippanel.com/v1/messages/patterns/send" , CreateMap("pattern_code" : "t2cfmnyo0c" , "originator" : "+9850002" , "recipient": "+989123459900" , "values" : CreateMap( "name" : "Mohamad" ) ) , Null) ب امید خدا حل خواهد شد. ولی دراین مواقع مستندات خود وبسایت ارائه دهنده و وبسایت مرجع رو فراموش نکنید.
×
×
  • جدید...