اذهب إلى المحتوى

E.Nourddine

الأعضاء
  • المساهمات

    1458
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    18

إجابات الأسئلة

  1. إجابة E.Nourddine سؤال في كيف أكتب بالعربية على اندرويد ستوديو؟ كانت الإجابة المقبولة   
    برنامج ansroid studio في إصداره الثاني -2-، يدعم RTL لكن هذه الخاصية غير مفعلة بشكل افتراضي، ولتفعيلها:
    على حاسوبك، اذهب إلى المسار : [android-studio2.0]/bins/idea.properties ثم  أضف السطر editor.new.rendering=true
    في آخر idea.properties
    أعد تشغيل برنامج android studio.
  2. إجابة E.Nourddine سؤال في كيف أرسل إشعار من جهاز إلى آخر باستخدام اندرويد؟ كانت الإجابة المقبولة   
    يعتمد ارسال الإشعارات من جهاز لآخر على خدمة secrver-cleint حيث يكون جهازك هو client ويستقبل باقي الإشعارات من الجهاز الآخر.
    إذا كان هذا ما تصبو إليه، إليك هذا الرابط.
    هذه الصورة توضح كيفية العمل:

    ثم هذا المقطع:
     
  3. إجابة E.Nourddine سؤال في كيف أخزن قيم وخصائص عناصر على تطبيق اندرويد؟ كانت الإجابة المقبولة   
    لتخزين القيم، سنستعملSharepreferece ، وهي وسيلة تمكننا من تخزين قيم بمفاتيح، حيث لا يتم اضاعة هذه القيم ويمكننا استخدامها يعد غلق وفتح التطبيق مرة أخرى، مثال :
    SharedPreferences sp = getSharedPreferences("key", 0); SharedPreferences.Editor sedt = sp.edit(); sedt.putString("textvalue", txtEvent.getText().toString()); sedt.putString("txtopertaive", txtOperative.getText().toString()); sedt.commit(); لجلب البيانات المخزنة آنفاً:
    SharedPreferences sp = getSharedPreferences("key", 0); String tValue = sp.getString("textvalue",""); String tOperative = sp.getString("txtopertaive",""); لتغيير لون textview مثلا، سنستخرج اللون المخزن سابقا عن طريق shapeprerference ونستعمله في الكود التالي-عوض RED-:
    holder.text.setTextColor(Color.RED);  
  4. إجابة E.Nourddine سؤال في كيف أعرض توقيت الجهاز على تطبيق أندرويد؟ كانت الإجابة المقبولة   
    سأقدم لك هذا المثال، حيث سيتم عرض الوقت في عنصر TextView، بالشكل التالي:
    String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date()); // textView عرض التوقيت في textView.setText(currentDateTimeString); يمكنك التعمق أكثر في مختلف دوال الزمن من هنا.
  5. إجابة E.Nourddine سؤال في كيف أعرض منشوراتي من حسابي على فيس بوك ضمن تطبيق اندرويد؟ كانت الإجابة المقبولة   
    يمكنك الاستعانة بـSDK الخاص بفيس بوك، من هنا
    والذي سيوفر لك ملف بصيغةJson  يحتوي على منشوراتك، ستتفحص الملف وتظهر المنشورات بداخله.
    كما يمكنك أيضا استعمال graph Apiالمخصص لجلب ىبيانات مجموعة معينة :
    { "id": "195466193802264", "version": 1, "owner": { "name": "Ravi Grover", "id": "202875" }, "name": "Facebook Developers", "description": "Description.", "venue": { "street": "" }, "privacy": "OPEN", "icon": "http://static.ak.fbcdn.net/rsrc.php/v2/yI/r/0pjqWL1NfkE.png", "updated_time": "2011-03-12T02:43:05+0000", "email": "195466193802264\u0040groups.facebook.com" } ألق نظرة على هذا المقطع:
     
  6. إجابة E.Nourddine سؤال في كيف أستعمل ligdx مع android studio؟ كانت الإجابة المقبولة   
    تستعمل مكتبة LibGDX لغرض برمجة الألعاب على نظام التشغيلAndroid، ويمكنك تحميل المكتبة من هنا.

    بعد تحميل الملف، قم بتثبيت الملف وذلك بالضغط عليه مرتين ، أدخل الاعدادات التالية:
    - اترك Name.
    -اترك Package دون تغيير.
    -اترك GameClass دون تغيير.
    -اذهب إلى ملف المشاريع على AndroidStudioProjects وأنشئ مجلد باسم SetupGame\.
    - غيّر Destination إلى C:\Users\<USER_NAME>\AndroidStudioProjects\SetupGame
    -غيّر AndrtoidSDK إلى C:\Users\<USER_NAME>\AppData\Local\Android\android-studio\sdk
    - اترك Sub Projects مفعلة.
    -اضغط Generate.

    مقطع الفيديو التالي سيفيدك ويعطيك فكرية حول الموضوع:
     
  7. إجابة E.Nourddine سؤال في كيف أحصل على لقطة الشاشة من خلال تطبيق على اندرويد؟ كانت الإجابة المقبولة   
    تعتمد فكرة أخذ screenshot من خلال تطبيق اندرويد على أخذ مرجع لواجهة الهاتف وتحويلها لصورة bitmap .
    مثلا:

    حيث سيكون كود الزر كالتالي:
    findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Bitmap bitmap = takeScreenshot(); saveBitmap(bitmap); } }); على أن يتم استعمال الدوال:
    getDrawingCache() و setDrawingCacheEnabled(true)
    داخل الوظيفة المسؤولة عن أخذ اللقطة:
    public Bitmap takeScreenshot() { View rootView = findViewById(android.R.id.content).getRootView(); rootView.setDrawingCacheEnabled(true); return rootView.getDrawingCache(); } ثم وظيفة حفظ الصورة:
    public void saveBitmap(Bitmap bitmap) { File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png"); FileOutputStream fos; try { fos = new FileOutputStream(imagePath); bitmap.compress(CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch (FileNotFoundException e) { Log.e("GREC", e.getMessage(), e); } catch (IOException e) { Log.e("GREC", e.getMessage(), e); } } الصورة ستحفظ خارجيا -في external storage- لذا سيتوجب علينا إعطاء التطبيق أحقية ذلك من خلال كتابة السطر التالي داخل AndroidManifest:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  8. إجابة E.Nourddine سؤال في كيف أبرمج أدوات بنسب مئوية على اندرويد؟ كانت الإجابة المقبولة   
    للحصول على عناصر تتميز بمقاس بنسبة مئوية، ما عليك إلا أن تدرج العناصر كـ -أبناء- children لـ LinearLayout مع القيمة0.15 ،0.70 أو 0.05 لـ weight، باعبارها نسب مئوية.
    بهذا الشكل:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/layoutContainer" android:orientation="horizontal"> <RelativeLayout android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="0.15"> </RelativeLayout> <RelativeLayout android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="0.7"> <!-- هذا الجزء يحوي كل العناصر التي سيطبق عليها مقاس النسبة المئوية%70--> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="vertical"> <Button android:text="Button1" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> <Button android:text="Button2" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> <Button android:text="Button3" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button> </LinearLayout> <!-- 70% نهاية--> </RelativeLayout> <RelativeLayout android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="0.15"> </RelativeLayout> </LinearLayout> سنحصل على الصورة التالية:

    حيث أن الأزرار ذات مقاس 70% من LinearLayout.
  9. إجابة E.Nourddine سؤال في لديّ مشكلة في الكتابة باللغة العربية ببرنامج inDesign؟ كانت الإجابة المقبولة   
    يمكنك معاجة المشكل من خلال تغيير Adobe World-Ready Mode وذلك بذهابك إلى القائمة:
    Windows > Paragraph > panel menu
    وقم باختيار : Adobe World-Ready Paragraph Composer:

    ولجعل الكتابة من جهة اليمين، عيل بتغير منحى الكتابة، كما هو مبين:

    Typesetting Hebrew and Other Languages in English InDesign
  10. إجابة E.Nourddine سؤال في كيف أصمم أزرار Css لبلوجر؟ كانت الإجابة المقبولة   
    عموما الأزرار هي الأزرار، سواء على wordpress، blogger أو على صفحة Html عادية، لا اختلاف يُذكر في طريقة التكويد.
    هاكَ هذه القائمة التي ألجأ إليها بين الفينة والأخرى:
    http://dabuttonfactory.com/ http://www.cssportal.com/css3-button-generator/ http://www.bestcssbuttongenerator.com/ http://www.bestcssbuttongenerator.com/ بالاضافة إلى بعض الدرروس المهمة في هذا الشأن :
    http://www.hongkiat.com/blog/css3-button-tutorials/ https://designshack.net/articles/css/css-button-tutorial-how-to-code-buttons-in-5-simple-steps/ http://designmodo.com/create-css3-buttons/ https://www.freshdesignweb.com/css3-buttons/ الاضافة إلى دروس css الموجودة بموقع الأكاديمية.
  11. إجابة E.Nourddine سؤال في كيف أمنع تطبيق أندرويد من إدارة الشاشة؟ والتأكد من ربط الإتصال بالأنترنت؟ كانت الإجابة المقبولة   
    سأحاول إرفاق كود يجيب عن كل سؤال من السؤالين، ولنبدأ بالتأكد من اتصال الجهاز -الهاتف- بالأنترنت، وذلك عن طريق اظافة الوظيفة التي ستعيد لنا القيمةtrue في حال كان الجهاز متصلاً :
    public boolean isInternetAvailable() { try { InetAddress ipAddr = InetAddress.getByName("google.com"); //You can replace it with your name if (ipAddr.equals("")) { return false; } else { return true; } } catch (Exception e) { return false; } } في ملف manifest:
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ولإبطل عمل خاصية إدارة الشاشة عند عمل التطبيق، يكفي أن تضيف
    android:screenOrientation="portrait" إلى كودActivity لتصبح بالشكل:
    <activity ... ... android:screenOrientation="portrait">  
  12. إجابة E.Nourddine سؤال في كيف أحل مشكلة عدم ظهور Device في Android Studio؟ كانت الإجابة المقبولة   
    في أغلب الأحيان يكون هذا المشكل ناتج عن عدم تثبثك لمحاك معين، كما يتضح من خلال الصورة التالية:

    وفي هذه الحالة يكفي أن تقوم بفعل ذلك، أي أن تثبث drivers الخاصة بالمحاكي المراد تشغيل التطبيق عليه، من خلال الرابط.
    كما أن المشكل قد يكون نابعا من عدم قدرة الحاسوب على تحمل الميموري المخصصة لهذا المحاكي، وقد تحصل على هذه الرسالة:

    في هذه الحالة تذهب إلى الملف android-studio\bin وتغير القيم -Xmx و -Xms داخل ملف studio.exe.vmoptions أو studio64.exe.vmoptions (حسب نواة نظام التشغيل المثبث)
  13. إجابة E.Nourddine سؤال في كيف أضيف خدمة الدفع بـ Paypal إلى تطبيق Android؟ كانت الإجابة المقبولة   
    كنت قد استفدت من هذا الكود، والذي يتوفر على 2 كلاسات.
    الأولة من أجل جلب Id الخاص بـ Paypal وبالتالي استعماله في التطبيق:
    public class ResultDelegate implements PayPalResultDelegate, Serializable { private static final long serialVersionUID = 10001L; public void onPaymentSucceeded(String payKey, String paymentStatus) { main.resultTitle = "SUCCESS"; main.resultInfo = "You have successfully completed your transaction."; main.resultExtra = "Key: " + payKey; } public void onPaymentFailed(String paymentStatus, String correlationID, String payKey, String errorID, String errorMessage) { main.resultTitle = "FAILURE"; main.resultInfo = errorMessage; main.resultExtra = "Error ID: " + errorID + "\nCorrelation ID: " + correlationID + "\nPay Key: " + payKey; } public void onPaymentCanceled(String paymentStatus) { main.resultTitle = "CANCELED"; main.resultInfo = "The transaction has been cancelled."; main.resultExtra = ""; } ملف Main class:
    public class main extends Activity implements OnClickListener { // The PayPal server to be used - can also be ENV_NONE and ENV_LIVE private static final int server = PayPal.ENV_LIVE; // The ID of your application that you received from PayPal private static final String appID = "APP-0N8000046V443613X"; // This is passed in for the startActivityForResult() android function, the value used is up to you private static final int request = 1; public static final String build = "10.12.09.8053"; protected static final int INITIALIZE_SUCCESS = 0; protected static final int INITIALIZE_FAILURE = 1; TextView labelSimplePayment; LinearLayout layoutSimplePayment; CheckoutButton launchSimplePayment; Button exitApp; TextView title; TextView info; TextView extra; TextView labelKey; TextView appVersion; EditText enterPreapprovalKey; public static String resultTitle; public static String resultInfo; public static String resultExtra; private String isuename; private String isueprice; Handler hRefresh = new Handler(){ @Override public void handleMessage(Message msg) { switch(msg.what){ case INITIALIZE_SUCCESS: setupButtons(); break; case INITIALIZE_FAILURE: showFailure(); break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); Thread libraryInitializationThread = new Thread() { @Override public void run() { initLibrary(); // The library is initialized so let's create our CheckoutButton and update the UI. if (PayPal.getInstance().isLibraryInitialized()) { hRefresh.sendEmptyMessage(INITIALIZE_SUCCESS); } else { hRefresh.sendEmptyMessage(INITIALIZE_FAILURE); } } }; libraryInitializationThread.start(); isuename=getIntent().getStringExtra("name").trim(); isueprice=getIntent().getStringExtra("price").replace("$", "").trim(); Log.v("isuename ",""+isuename); Log.v("isueprice ",""+isueprice); LinearLayout content = new LinearLayout(this); content.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.FILL_PARENT)); content.setGravity(Gravity.CENTER_HORIZONTAL); content.setOrientation(LinearLayout.VERTICAL); content.setPadding(10, 10, 10, 10); content.setBackgroundColor(Color.WHITE); layoutSimplePayment = new LinearLayout(this); layoutSimplePayment.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); layoutSimplePayment.setGravity(Gravity.CENTER_HORIZONTAL); layoutSimplePayment.setOrientation(LinearLayout.VERTICAL); layoutSimplePayment.setPadding(0, 5, 0, 5); labelSimplePayment = new TextView(this); labelSimplePayment.setGravity(Gravity.CENTER_HORIZONTAL); labelSimplePayment.setText("C&EN"); labelSimplePayment.setTextColor(Color.RED); labelSimplePayment.setTextSize(45.0f); layoutSimplePayment.addView(labelSimplePayment); // labelSimplePayment.setVisibility(View.GONE); content.addView(layoutSimplePayment); LinearLayout layoutKey = new LinearLayout(this); layoutKey.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); layoutKey.setGravity(Gravity.CENTER_HORIZONTAL); layoutKey.setOrientation(LinearLayout.VERTICAL); layoutKey.setPadding(0, 1, 0, 5); enterPreapprovalKey = new EditText(this); enterPreapprovalKey.setLayoutParams(new LayoutParams(200, 45)); enterPreapprovalKey.setGravity(Gravity.CENTER); enterPreapprovalKey.setSingleLine(true); enterPreapprovalKey.setHint("Enter PA Key"); layoutKey.addView(enterPreapprovalKey); enterPreapprovalKey.setVisibility(View.GONE); labelKey = new TextView(this); labelKey.setGravity(Gravity.CENTER_HORIZONTAL); labelKey.setPadding(0, -5, 0, 0); labelKey.setText("(Required for Preapproval)"); layoutKey.addView(labelKey); labelKey.setVisibility(View.GONE); content.addView(layoutKey); title = new TextView(this); title.setLayoutParams(new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); title.setPadding(0, 5, 0, 5); title.setGravity(Gravity.CENTER_HORIZONTAL); title.setTextSize(30.0f); title.setVisibility(View.GONE); content.addView(title); info = new TextView(this); info.setLayoutParams(new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); info.setPadding(0, 5, 0, 5); info.setGravity(Gravity.CENTER_HORIZONTAL); info.setTextSize(20.0f); info.setVisibility(View.VISIBLE); info.setText("Please Wait! Initializing Paypal..."); info.setTextColor(Color.BLACK); content.addView(info); extra = new TextView(this); extra.setLayoutParams(new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); extra.setPadding(0, 5, 0, 5); extra.setGravity(Gravity.CENTER_HORIZONTAL); extra.setTextSize(12.0f); extra.setVisibility(View.GONE); content.addView(extra); LinearLayout layoutExit = new LinearLayout(this); layoutExit.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); layoutExit.setGravity(Gravity.CENTER_HORIZONTAL); layoutExit.setOrientation(LinearLayout.VERTICAL); layoutExit.setPadding(0, 15, 0, 5); exitApp = new Button(this); exitApp.setLayoutParams(new LayoutParams(200, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); //Semi mimic PP button sizes exitApp.setOnClickListener(this); exitApp.setText("Exit"); layoutExit.addView(exitApp); content.addView(layoutExit); appVersion = new TextView(this); appVersion.setGravity(Gravity.CENTER_HORIZONTAL); appVersion.setPadding(0, -5, 0, 0); appVersion.setText("\n\nSimple Demo Build " + build + "\nMPL Library Build " + PayPal.getBuild()); content.addView(appVersion); appVersion.setVisibility(View.GONE); setContentView(content); } public void setupButtons() { PayPal pp = PayPal.getInstance(); // Get the CheckoutButton. There are five different sizes. The text on the button can either be of type TEXT_PAY or TEXT_DONATE. launchSimplePayment = pp.getCheckoutButton(this, PayPal.BUTTON_194x37, CheckoutButton.TEXT_PAY); // You'll need to have an OnClickListener for the CheckoutButton. For this application, MPL_Example implements OnClickListener and we // have the onClick() method below. launchSimplePayment.setOnClickListener(this); // The CheckoutButton is an android LinearLayout so we can add it to our display like any other View. layoutSimplePayment.addView(launchSimplePayment); // Get the CheckoutButton. There are five different sizes. The text on the button can either be of type TEXT_PAY or TEXT_DONATE. // Show our labels and the preapproval EditText. labelSimplePayment.setVisibility(View.VISIBLE); info.setText(""); info.setVisibility(View.GONE); } public void showFailure() { title.setText("FAILURE"); info.setText("Could not initialize the PayPal library."); title.setVisibility(View.VISIBLE); info.setVisibility(View.VISIBLE); } private void initLibrary() { PayPal pp = PayPal.getInstance(); if(pp == null) { pp = PayPal.initWithAppID(this, appID, server); pp.setLanguage("en_US"); // Sets the language for the library. pp.setFeesPayer(PayPal.FEEPAYER_EACHRECEIVER); // Set to true if the transaction will require shipping. pp.setShippingEnabled(true); // Dynamic Amount Calculation allows you to set tax and shipping amounts based on the user's shipping address. Shipping must be // enabled for Dynamic Amount Calculation. This also requires you to create a class that implements PaymentAdjuster and Serializable. pp.setDynamicAmountCalculationEnabled(false); // -- } } private PayPalPayment exampleSimplePayment() { // Create a basic PayPalPayment. PayPalPayment payment = new PayPalPayment(); // Sets the currency type for this payment. payment.setCurrencyType("USD"); // Sets the recipient for the payment. This can also be a phone number. payment.setRecipient("harshd_1312435282_per@gmail.com"); // Sets the amount of the payment, not including tax and shipping amounts. payment.setSubtotal(new BigDecimal(isueprice)); // Sets the payment type. This can be PAYMENT_TYPE_GOODS, PAYMENT_TYPE_SERVICE, PAYMENT_TYPE_PERSONAL, or PAYMENT_TYPE_NONE. payment.setPaymentType(PayPal.PAYMENT_TYPE_GOODS); // PayPalInvoiceData can contain tax and shipping amounts. It also contains an ArrayList of PayPalInvoiceItem which can // be filled out. These are not required for any transaction. PayPalInvoiceData invoice = new PayPalInvoiceData(); // Sets the tax amount. invoice.setTax(new BigDecimal("0")); // Sets the shipping amount. invoice.setShipping(new BigDecimal("0")); // PayPalInvoiceItem has several parameters available to it. None of these parameters is required. PayPalInvoiceItem item1 = new PayPalInvoiceItem(); // Sets the name of the item. item1.setName(isuename); // Sets the ID. This is any ID that you would like to have associated with the item. item1.setID("87239"); // Sets the total price which should be (quantity * unit price). The total prices of all PayPalInvoiceItem should add up // to less than or equal the subtotal of the payment. /* item1.setTotalPrice(new BigDecimal("2.99")); // Sets the unit price. item1.setUnitPrice(new BigDecimal("2.00")); // Sets the quantity. item1.setQuantity(3);*/ // Add the PayPalInvoiceItem to the PayPalInvoiceData. Alternatively, you can create an ArrayList<PayPalInvoiceItem> // and pass it to the PayPalInvoiceData function setInvoiceItems(). invoice.getInvoiceItems().add(item1); // Create and add another PayPalInvoiceItem to add to the PayPalInvoiceData. /*PayPalInvoiceItem item2 = new PayPalInvoiceItem(); item2.setName("Well Wishes"); item2.setID("56691"); item2.setTotalPrice(new BigDecimal("2.25")); item2.setUnitPrice(new BigDecimal("0.25")); item2.setQuantity(9); invoice.getInvoiceItems().add(item2);*/ // Sets the PayPalPayment invoice data. payment.setInvoiceData(invoice); // Sets the merchant name. This is the name of your Application or Company. payment.setMerchantName("C&EN"); // Sets the description of the payment. payment.setDescription("simple payment"); // Sets the Custom ID. This is any ID that you would like to have associated with the payment. payment.setCustomID("8873482296"); // Sets the Instant Payment Notification url. This url will be hit by the PayPal server upon completion of the payment. //payment.setIpnUrl("http://www.exampleapp.com/ipn"); // Sets the memo. This memo will be part of the notification sent by PayPal to the necessary parties. payment.setMemo("Hi! I'm making a memo for a payment."); return payment; } @Override public void onClick(View v) { if(v == launchSimplePayment) { // Use our helper function to create the simple payment. PayPalPayment payment = exampleSimplePayment(); // Use checkout to create our Intent. Intent checkoutIntent = PayPal.getInstance().checkout(payment, this, new ResultDelegate()); // Use the android's startActivityForResult() and pass in our Intent. This will start the library. startActivityForResult(checkoutIntent, request); } else if(v == exitApp) { Intent in = new Intent(); in.putExtra("payment", "unpaid"); /*in.putExtra("condition", "false");*/ setResult(1,in);//Here I am Setting the Requestcode 1, you can put according to your requirement finish(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode != request) return; if(main.resultTitle=="SUCCESS"){ Intent in = new Intent(); in.putExtra("payment", "paid"); setResult(22,in); }else if(main.resultTitle=="FAILURE"){ Intent in = new Intent(); in.putExtra("payment", "unpaid"); setResult(22,in); // finish(); }else if(main.resultTitle=="CANCELED"){ Intent in = new Intent(); in.putExtra("payment", "unpaid"); setResult(22,in); // finish(); } launchSimplePayment.updateButton(); title.setText(resultTitle); title.setVisibility(View.VISIBLE); info.setText(resultInfo); info.setVisibility(View.VISIBLE); extra.setText(resultExtra); extra.setVisibility(View.VISIBLE); finish(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent in = new Intent(); in.putExtra("payment", "unpaid"); setResult(1,in); finish(); return true; } return super.onKeyDown(keyCode, event); } يمكنك أيضا الاستعانة بهذاالمشروع والذي هو عبارة عن مشروعSDKتضيفه إلى مشروعك، فقط اتبع المعلومات المُرفقة في المشروع. 
  14. إجابة E.Nourddine سؤال في كيف أتحكم في موضع زر على Android؟ كانت الإجابة المقبولة   
    للتحكم في موضع الزر "Button" في تطبيق اندرويد، ما عليك إلا تفقد ملف xml الخاص بـ Layout المتعلق بمظهر التطبيق.
    مثلا في هذا المثال:
    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:layout_centerInParent="true" android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </RelativeLayout> حيث ستلاحظ وجود المقطع :
    android:layout_centerInParent="true" مما سيجعل الزر يأتي وسط  RelativeLayout المُتضمنة لها.
    أيضا لجعل الزر أقل من الوسط بقليل، بالطريقة التالية:
    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_centerInParent="true" android:layout_width="wrap_content" android:id="@+id/textView1" android:layout_height="wrap_content" android:text=" " ></TextView> <Button android:layout_marginTop="5dip" android:layout_centerHorizontal="true" android:text="Button" android:layout_below="@id/textView1" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </RelativeLayout> يمكنك تغيير الكود :
    android:layout_marginTop="5dip" للحصول على الشكل المُراد الحصول عليه، فقط غيّر في القيمة للحصول على ذلك.
  15. إجابة E.Nourddine سؤال في كيف أحفظ ترتيب قائمة ما عن طريق الـ php & JQuery؟ كانت الإجابة المقبولة   
    إليك هذا المثال الذي سبق لي التعامل معه، وأتمنى أن يكون مفيداً لك كما هو بالنسبة لي:
    في ملف js الخاص بحدث تغيير ترتيب العناصر، أضف حدث الدالة التالي:
     
    $("#list").live('hover', function() { $("#list").sortable({ update : function () { var neworder = new Array(); $('#list li').each(function() { //get the id var id = $(this).attr("id"); //create an object var obj = {}; //insert the id into the object obj[] = id; //push the object into the array neworder.push(obj); }); $.post("pagewhereyouuselist.php",{'neworder': neworder},function(data){}); } }); }); ليتم عند أي تغيير في ترتيب العناصل استدعاء ملف Php التالي المسؤول عن تخزين ترتيب العنصر داخل قاعدة البيانات:
    $neworderarray = $_POST['neworder']; //loop through the list of ids and update your db foreach($neworderarray as $order=>$id){ //إعدادات الاتصال بقاعدة البيانات $con = mysql_connect("host","username","password"); if (!$con){ die('Could not connect: ' . mysql_error()); } mysql_select_db("my_db", $con); mysql_query("UPDATE table SET order = {$order} WHERE id = {$id}"); mysql_close($con); }  
    المصدر.
  16. إجابة E.Nourddine سؤال في كيف أستخدم CSS في الفورمات ضمن برنامج دريم ويفر؟ كانت الإجابة المقبولة   
    من خلال القائمة التالية:
    Format > CSS Styles > Attach Style Sheet
    ستتمكن من إضافة ملف التنسيق css:

    لتتمكن بعد ذلك من حفظ الملف بالإسم المراد حفظه به:

    الآن ملف css المسؤول عن تنسيق الصفحة تم ربطه بملف html.
  17. إجابة E.Nourddine سؤال في بعد قضاء بعض الوقت في الموقع يصبح $_SESSION[‘id’] صفرا، ويترتب على ذلك مشاكل عدة! كانت الإجابة المقبولة   
    نعم هو بالأمر الطبيعي، حيث أن متغير Session له مدة صلاحية نعبر عنها بالمتغير :
    $_SESSION['expire'] فمثلا لجعل Session تحتفظ بالقيمة المُخزنة بها لمدة 30 دقيقة يكفي كتابة الكود التالي:
    $_SESSION['expire'] = $_SESSION['start'] + (30 * 60); كما يمكن أيضا إنهاء وإفراغ Session من القيم المُسجلة بداخله عن طريق استعمال:
    session_destroy(); المصدر :
    $_SESSION
  18. إجابة E.Nourddine سؤال في كيف أعدّ الحساب ليستقبل البريد من دالة mail في php؟ كانت الإجابة المقبولة   
    الخطأ في الكود المُرفق في السؤال هو في عدم توفر متغير to$ على عنوان بريد إلكتروني.
    وهذا مثال تطبيقي، قد جرب وتوصَل صاحب البريد بالرسالة:
    <?php $to = 'nobody@example.com'; $subject = 'the subject'; $message = 'hello'; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); ?> PHP - Sending Emails using PHP function mail php
  19. إجابة E.Nourddine سؤال في كيف أقوم بتحجيم صورة المقال في ووردبريس بحيث يظهر كامل الصورة في الصورة المصغرة؟ كانت الإجابة المقبولة   
    محب، كملاحظة مبدئية: التنسيق المذكور في سؤالك سؤدي إلى تغيير مقاسات جميع الصور الموجودة داخل موقعك، وذلك لأنك لم تحدد أي صورة تريد تغيير مقاساتها :
    img {height: 200px; width: 300px;} أي أن عليك تحديد تعيرف Id أو  كلاس class المُحددة للصورة -أو الصور- المراد تغيير مقاساتها.
    على نظام إدارة المحتوى ووردبريس، وكأي نظام آخر يتحكم ملف التنسيق css في مقاسات وخصائص الوسوم الموجودة على ملف html.
    يوفر ووردبريس إمكانية تحديد مقاس الصور قبل إدراجها في الموقع وذلك من خلال إضافة Media من خلال لوحة التحكم:

    أيضا يمكن تحديد مقاس الصورة من خلال أربع مقاسات معيارية محددة مسبقا : 
    Thumbnail Medium Large Full Size
    يمكنك استخراج اسم صورة واستعماله لتحديد تنسيقها الخاص بها فقط، من خلال لوحة التحكم عن طريق Advanced Image Settings:

    واستخدام ملف التنسيق css لذلك:
    aligncenter size-medium wp-image-65  
    .wp-image-65 { width: 100px; height: 150px; box-shadow: 0px 0px 20px #000000; -webkit-box-shadow: 0px 0px 20px #000000; -moz-box-shadow: 0px 0px 20px #000000; } Inserting Images into Posts and Pages 3 Ways To Style Specific Images in WordPress
  20. إجابة E.Nourddine سؤال في ماهي القيمة المُرسلة من طرف قائمة منسدلة عند عدم اختيار قيمة؟ كانت الإجابة المقبولة   
    في حال لم يتم تعيين قيمة افتراضية default value ولم يتم اخيار قيمة، سيتم إرسال القيمة string.
    ومن خلال موقع W3C specification نحصل على :
    value = string Provides a value for element. If there isn't, the value of an option element is the textContent of the element.ولتفادي ذلك يلجأ المبرمجون إلى استعمال  الخاصية selected لتحديد قيمة محددة تكون هي القيمة المُرسلة إن لم يتم الاختيار من قبل المستخدم بالشكل التالي:
    <select name="city"> <option value="Bos" selected>Boston</option> <option value="Cam">Cambridge</option> </select> 
  21. إجابة E.Nourddine سؤال في لماذا يختلف شكل الخطوط على برنامج Gimp؟ كانت الإجابة المقبولة   
    الأمر لا علاقة له باختلاف البرنامج في هذه الحالة، نعم تتحكم البرامج - تحرير النصوص والصور- من حيث الدقة، لكن بشكل عام اختلاف وضوح النص بين برنامج وآخر يتدخل فيه عامل مهم وهو عامل الدقة DPI.
    فعند العمل على ملف word يكون بدقة 300dpi محددة مسبقا في إعدادات البرنامج، مما يتيح للنص ظهورا واضحا ومتناسقا رغم تغيير نوع الخط المُستعمل.
    بالنسبة لبرنامج Gimp وبرامج التصميم كـ Photoshop، يتعيّن على المصمم التدخّل لتغيير إعدادات المشروع وإعطاءه دقة تساوي لـ 300dpi حتى يحصل على دقة واضحة أكثر. ولكي نتأكد من الأمر، أنشىء مشروع على Gimp بـ 2550px- 3300px مع دقة بقيمة 300dpi، وأضف نصاً لترى دقة الخط بشكل واضح:

    في حين عند كتابتنا لنص على مشروع بـ 400px و72dpi مع  تكبير بـ%500 نحصل على الصورة:

  22. إجابة E.Nourddine سؤال في كيف أتجاوز هذا الخطأ في Laravel مع العلم أن جملة الاستعلام جد بسيطة؟ كانت الإجابة المقبولة   
    الخطأ بـ double quotes ( " ) مع إمكانية تضمين المتغيرات، عكس single quotes التي يمكن استعمالها شرط أن لا تتضمن أي متغيرات، إلا في حالة استعمال concatenation - دمج المتغير مع جمل الاستعلام- ، وبهذا يمكن كتابة جملة الاستعلام على الشكلين التاليين :
    الشكل الأول: "select * from favorites where user_id = $user_id AND article_id = $article_id"الشكل الثاني: 'select * from favorites where user_id = '.$user_id.' AND article_id = '.$article_id ; 
    When to use single quotes, double quotes, and backticks
  23. إجابة E.Nourddine سؤال في كيف أجرب موقعي على جميع أنواع الشاشات؟ كانت الإجابة المقبولة   
    نظريا أفضل طريقة هي تثبيت مختلف المتصفحات التي يكثر استعمالها وكذا استعمال مختلف الأجهزة اللوحية والهواتف الذكية، حتى تتمكن من محاكاة الموقع حقيقة وتتأكد من عمل جميع الوظائف به، لكن الأمر جد مكلف و يصعب على الكثير إن لم نقل الكل تطبيق هذه الطريقة، لذا يلجأ المُوكلون بمهمة التجربة، بتثبيت برامج ومتصفحات تمكنهم من محاكاة الموقع على مختلف الأحهزة المنتشرة بكثرة:
    mobiletest emulateurmobile IETester 13Essential Tools to Check Cross-Browser Compatibility
  24. إجابة E.Nourddine سؤال في متى يجب على المصمم تغيير نوع الخط؟ كانت الإجابة المقبولة   
    الابتعاد عن الشكل الواحد واللون الواحد في التصميم من شأنه أن يُكسب بعض الجمالية، لاسيما إذا كان الأمر يتعلق بالخط، حيث أن التنوع والإبداع في أنواع الخطوط لم يأتي عبثا، وأنا أخص بالذكر خطوط اللغة العربية التي وبشهادة الجميع لا تضاهيها لغة في تفنن أهلها والمختصين في هذا المجال بالجمالية والإبداع.
    بخصوص تغيير نوع الخط هو في الأساس يهدف لفت انتباه القارئ أن الكلمة أو القطعة ذات الخط المُختلف متميزة  وذات أهمية عن باقي النص، وكمثال على ذلك عناوين الفقرات التي عادة ما تكون بخط مغاير لذلك الذي كتبت به الفقرات، أو ذو عرض سميك... أو ي شئ من شأنه أن يميزه عن باقي النص.
    كما يمكن تغيير لون الكتابة، أو عرضها...لتفرقتها عن باقي النص.

  25. إجابة E.Nourddine سؤال في كيف أستعمل الخطوط الوهمية على Photoshop؟ كانت الإجابة المقبولة   
    تسمى هذه الخطوط بإرشادات التخطيط وهي تلك الخطوط التي تكون شفافة بعض الشيء، إلا أنّه من الممكن تغيير لونها حسب الحاجة إلى الأزرق أو ما شابه. وتستعمل هذه الخطوط 'Guid Lines' لتقسيم التصميم بشكل افتراضي إلى الأقسام التي يضمها، مثلا في حالة موقع نقسم التصميم إلى header،body و footer ... لضمان التنظيم أثناء التصميم. وهي طبعاً لا تظهر في التصميم النهائي -أي أنها مؤقتة-.
    يمكنك إظهارها من القائمة:
    View→Show→Guides وهذه الصورة توضح أكثر مدى أهمية استعمال هذه الخطوط:

    لاحظ تموضع الكتابة، فاستعمال الخطوط الوهمية يمنحك رؤية تصميمية واضحة.
    كما يمكنك استعمال الشبكة Grid، هذه الأداة أيضا تريك التصميم ضمن شبكة وهمية، لمعلمة النقط في التصميم والجانب التنظيمي.
×
×
  • أضف...