GagorAcadmey

تعلم برمجة تطبيقات الاندرويد من الصفر حتي الاحتراف

آخر المواضيع

‏إظهار الرسائل ذات التسميات Ui Layout. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات Ui Layout. إظهار كافة الرسائل

الأربعاء، 21 نوفمبر 2018

نوفمبر 21, 2018

RadioButton in android studio


تدوينة اليوم عن زر أخر مستعمل بكثرة في كثيرا من البرامج وهو من أزرار القيم المنطقية إي أن لديه حالتين فقط
RadioButton عبارة عن زر ضغط لتنفيذ بعض الاوامر البرمجية المحددة ,وهو يستعمل داخل مجموعة ازرار الراديو والتي تسمي RadioGroup وهو عبارة عن مجموعة تحتوي علي أزرار RadioButton ويمكنك وضع العدد الذي تريد داخل هذه المجموعة
العملية التي تتم عند الضغط علي أحد الازرار هي أنه سيتم إلقاء تحديد جميع الازرار الاخري ,وهذا يعني أنه يمكن الضغط علي زر واحد فقط من مجموعة الازرار التي تنتمي الي نفس المجموعة RadioGroup. RadioGroup عبارة عن أداة مستخدمة في Android لتجميع أزرار الاختيار وتوفر ميزة تحديد زر راديو واحد فقط من المجموعة. عندما يحاول المستخدم تحديد أي زر راديو آخر داخل نفس مجموعة الراديو ، فسيتم إلغاء تحديد زر الاختيار المحدد مسبقًا تلقائيًا. قم بعمل خطوات مشروع جديد وتسميته بما تريد وفي داخل ملف XML الخاص بالصفحة الرئيسية قم بكتابة الكود التالي وهو الشكل الاساسي لزر RadioButton.

 <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="match_parent">

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RadioGroup>


خصائص زر RadioButton

هي نفس الخصائص التي تعرفنا اليها سابقا في ازرار التبديل Switch & ToggleButton
إسم العامل إستخدامه
id خاصية إعطاء الزر إسم فريد لا يشترك فيه زر أخر ويسخدم هذا الاسم في ملف الجافا عندما نريد إعطاء بعض الاوامر لهذا الزر
Checked يتم استخدامه لتحديدالحالة الحالية لزر الاختيار. يمكننا تعيينها إما صواب أو خطأ حيث يظهر true الحالة المحددة checked والخطأ false يعرض حالة غير محددة unchecked من زر الاختيار. كالقيمة الافتراضية المعتادة للسمة المحددة false
text توفر إمكانية كتابة نص ما داخل الزر
android:text="stringValue"
gravity خاصية محازاة النص داخل الزر وفقا للاتجاهات مثل right, left, bottom, center
textColor خاصية إعطاء النص داخل الزر لون محدد
android:textColor="#fff"
textSize خاصية تعين حجم للنص وتقاس بوحدة sp
android:textSize="20sp"
textStyle تعين شكل النص داخل الزر وتأخذ القيم bold or itlaic
background تعين لون او صورة لتكون خلفية للزر
padding تحدد المسافة بين النص وحواف الزر من الجهة الداخلية وتأخذ قيم متجهية مثل right left top bottom وتكون قيمة الخاصية عددية اي رقم يمثل المسافة
android:paddingLeft="20dp"
drawableValue خاصية تعين صورة بجانب علامة الزر الثابتة وفقا للاتجاه المحدد
android:drawbleRight="مكان تواجد الصورة"
في المثال التالي تم تطبيق كل الخصائص المزكورة سابقا فقط عليك تغير قيمها لتعرف جميع الاحوال
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <RadioGroup
        android:layout_marginTop="20dp"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <RadioButton
            android:id="@+id/btn_click"
            android:text="radioButton1"
            android:textSize="20sp"
            android:textColor="#e11596"
            android:checked="true"
            android:background="@color/colorPrimary"
            android:gravity="top"
            android:padding="10dp"
            android:drawableRight="@drawable/ic_android_black_24dp"
            android:layout_width="300dp"
            android:layout_height="100dp" />
    </RadioGroup>

</LinearLayout>
قم بتشغيل وشاهد نتيجة الخرج في المعاينة

سنقوم بعمل مثال شامل لتوضيح فكرة عمل أزرار الاختيار وكيفية برمجتها في ملف الجافا
قم بفتح ملف xml واكتب داخله الكود الاتي

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#e0e0e0"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Select your Hobby:: "
            android:textColor="#000"
            android:textSize="20sp"
            android:textStyle="bold" />

        <RadioGroup
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <RadioButton
                android:id="@+id/btn_football"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="10dp"
                android:checked="false"
                android:text="كرة القدم"
                android:textColor="#154"
                android:textSize="20sp"
                android:textStyle="bold" />

            <RadioButton
                android:id="@+id/btn_basketball"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="10dp"
                android:checked="false"
                android:text="كرة السلة"
                android:textColor="#154"
                android:textSize="20sp"
                android:textStyle="bold" />

            <RadioButton
                android:id="@+id/btn_swimming"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="10dp"
                android:checked="false"
                android:text="السباحة"
                android:textColor="#154"
                android:textSize="20sp"
                android:textStyle="bold" />

            <RadioButton
                android:id="@+id/btn_running"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="10dp"
                android:checked="false"
                android:text="المشي"
                android:textColor="#154"
                android:textSize="20sp"
                android:textStyle="bold" />


            <RadioButton
                android:id="@+id/btn_programming"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="10dp"
                android:checked="true"
                android:text="البرمجة"
                android:textColor="#154"
                android:textSize="20sp"
                android:textStyle="bold" />

        </RadioGroup>

        <Button
            android:id="@+id/submitButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="20dp"
            android:background="#0f0"
            android:padding="10dp"
            android:text="Submit"
            android:textColor="#fff"
            android:textSize="20sp"
            android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>
ثانيا: قم بفتح ملف الجافا واكتب داخله الكود التالي
package engahmed.gagacademy;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    RadioButton football, basketball, swimming, running, programming;
    String selected;
    Button submit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        football = (RadioButton) findViewById(R.id.btn_football);
        basketball = (RadioButton) findViewById(R.id.btn_basketball);
        swimming = (RadioButton) findViewById(R.id.btn_swimming);
        running = (RadioButton) findViewById(R.id.btn_running);
        programming = (RadioButton) findViewById(R.id.btn_programming);
        submit = (Button) findViewById(R.id.submitButton);
        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (football.isChecked()) {
                    selected = football.getText().toString();
                } else if (basketball.isChecked()) {
                    selected = basketball.getText().toString();
                } else if (swimming.isChecked()) {
                    selected = swimming.getText().toString();
                } else if (running.isChecked()) {
                    selected = running.getText().toString();
                } else if (programming.isChecked()) {
                    selected = programming.getText().toString();
                }
                Toast.makeText(getApplicationContext(), selected, Toast.LENGTH_LONG).show();
            }
        });

    }
}
الان قم بتشغيل المحاكي وإختر واحد من الخيارات وإضغط علي submit لتظهر رسالة أسفل الشاشة تطبع إسم الهواية المختارة

نوفمبر 21, 2018

Switch in android studio


تدوينة اليوم عن زر مهم جدا في عمليات التحكم في التطبيقات وهو احد ازرار الايقاف والتشغيل ومشابه بنسبة كبيرة جدا لزر التبديل ToggleButton
Switch عبارة عن زر تبديل بين حالتين وهو من ازرار الايقاف والتشغيل ويحمل قيمة منطقية واحدة إما true or false ويستخدم في عرض الحالة المحددة chescked وغير المحددة unchecked عندما ينقر المستخدم عليه
وبما أنه من أزرار الايقاف والتشغيل إذا يستخدم في العمليات المنطقية مثل إيقاف وتشغيل الصوت او الواي فاي او البلوتوث او الفلاش وغيرها من التطبيقات .
وهو كلاس فرعي يرث من كلاس CompoundButton مثله مثل زر togglebutton.
وفي حيث المقارنة بينه وبين زر التبديل ToggleButton فانه يوفر للمستخدم بساطة النقر لتغير القيمة الحالية ,بالاضافة الي أنه اكثر جازبية من زر ToggleButton.

طرق إدراج الزر في البرنامج

  1. عن طريق السحب والإفلات Drag&Drop في لوحة التصميم

  2. عن طريق ملف XML file

الشكل الاساسي لزر Switch

إفتح مشروع جديد في البرنامج وقم بتسميته بالاسم الذي تريد ثم
Open res -> layout -> activity_main.xml (or) main.xml اكتب الكود التالي ليظهر لك الزر في تطبيق المعاينة:
   <Switch
        android:id="@+id/btn_forSwitch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

خصائص زر Switch

إسم الخاصية إستخدامه
id خاصية إعطاء الزر إسم فريد لا يشترك فيه زر أخر ويسخدم هذا الاسم في ملف الجافا عندما نريد إعطاء بعض الاوامر لهذا الزر
checked توفر هذه الخاصية تحديد الحالة الحالية للزر إما محددة checked او غير محددة unchecked وهي قيمة منطقية إما true or false
والقيمة الافتراضية هي false
text يمكن كتابة م تريد داخل الزر بإستخدام هذه الخاصية
gravity خاصية محازاة النص داخل الزر وفقا للاتجاهات مثل right, left, bottom, center
textOn تظهر هذه الخاصية القيمة التي بداخلها عندما تكون الحالة محددة أي ان checked="true"
textOff تظهر هذه الخاصية القيمة التي بداخلها عندما تكون الحالة غير محددة أي ان checked="false"
textColor خاصية إعطاء النص الذي بداخل الزر لون محدد android:textColor="#fff"
textSize خاصية تعين حجم النص وتأخذ قيمة عددية Double مثل 10.8,20,50 وتقاس بوحدة sp
textStyle تعين شكل النص داخل الزر وتأخذ إحدي القيم bold or italic
background تعين لون او صورة ليكون خلفية للزر
padding تحدد المسافة بين النص وحافة الزر الداخلية وتأخذ قيم الاتجاهات right, left, top, bottom, center وتكون القيمة عددية
android:paddingRight="20dp"
drawableValue خاصية تعين صورة وفقا للاتجاه المحدد وتكون القيمة كلاتي
android:drawableRight="مكان تواجد الصورة"
value ="right,left,top,bottom"
قم بكتابةالكود التالي وشاهد النتيجة ثم قم بتغير القيم الي أخري وشاهد النتيجة كل مرة لتري كل القيم تتحق
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp">

    <Switch
        android:id="@+id/simpleSwitch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:drawableBottom="@drawable/ic_android_black_24dp"
        android:gravity="center"
        android:text="switch"
        android:textColor="#00e736"
        android:textOff="Off"
        android:textOn="On"
        android:textSize="25sp" />
</LinearLayout>

مثال شامل علي زر Switch

في داخل ملف الفعالية الرئيسية activity_main.xml قم بكتابة الكود التالي
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginTop="30dp"
    tools:context=".MainActivity">

    <Switch
        android:id="@+id/simples11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:checked="true"
        android:text="switch1"
        android:textOff="Off"
        android:textOn="On"
        android:textSize="26sp"
        android:textColor="#000" />

    <Switch
        android:id="@+id/simples22"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:checked="false"
        android:text="switch2"
        android:textOff="Off"
        android:textOn="On"
        android:textSize="26sp" />


    <Button
        android:id="@+id/submitButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        android:background="#f5959e87"
        android:padding="10dp"
        android:text="Submit"
        android:textColor="#fff"
        android:textSize="20sp"
        android:textStyle="bold" />
</LinearLayout>
داخل ملف الجافا قم بكتابة الكود التالي مع تغير إسم الحزمة وستجده اعلي الصفحة بإسم package الاسم الخاص بك;
MainActivity.java
package //قم بكتابة إسم الحزمة الخاص بك هنا;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Switch;
import android.widget.Toast;
import android.widget.ToggleButton;

import static engahmed.gagacademy.R.id.simpleToggleButton1;
import static engahmed.gagacademy.R.id.simpleToggleButton2;

public class MainActivity extends AppCompatActivity {
    Switch simpleSwitch1, simpleSwitch2;
    Button submit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        simpleSwitch1 = (Switch) findViewById(R.id.simples11);
        simpleSwitch2 = (Switch) findViewById(R.id.simples22);
        submit = (Button) findViewById(R.id.submitButton);
        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String statusSwitch1, statusSwitch2;
                if (simpleSwitch1.isChecked())
                    statusSwitch1 = simpleSwitch1.getTextOn().toString();
                else
                    statusSwitch1 = simpleSwitch1.getTextOff().toString();
                if (simpleSwitch2.isChecked())
                    statusSwitch2 = simpleSwitch2.getTextOn().toString();
                else
                    statusSwitch2 = simpleSwitch2.getTextOff().toString();
                Toast.makeText(getApplicationContext(), "Switch1 :" + statusSwitch1 + "\n" + "Switch2 :" + statusSwitch2, Toast.LENGTH_LONG).show(); //ستعرض رسالة توضح حالة الازرار 
            }
        });
    }
}

الثلاثاء، 20 نوفمبر 2018

نوفمبر 20, 2018

ToggleButton in android studio



سنتعرف في هذه التدوينة الي عنصر أخر مهم جدا في كثير من تطبيقات الروبوت وهو عنصر ToggleButton
في نظام التشغيل Android ، يتم استخدام ToggleButton لعرض الحالة المحددة checked وغير المحددة unchecked لأحد الأزرارعند النقر عليه. ToggleButton بشكل أساسي زر تشغيل / إيقاف off/on مع مؤشر ضوئي يشير إلى الحالة الحالية لزر التبديل. المثال الأكثر بساطة على ToggleButton هو تشغيل / إيقاف الصوت ، بلوتوث ، wifi ، نقطة ساخنة وجميع الادوات التي تظهر عند إنزال الستارة الخاصة بهاتفك . كما إنها فئة فرعية subclass من الكلاس compoundButton

كتابة كود العنصر في ملف XML

في داخل الفعالية الرئيسية MainActivity وفي ملف xml file الخاص بها قم بكتابة الكود التالي او قم بسحبه من خلال لوحة التصميم
 <ToggleButton
        android:id="@+id/btn_toggle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
وعندما ننظر الي نتيجة معاينة الكود نجد ان الزر ظهر وفيه القيمة off (false) وهي القيمة الافتراضية ويمكنك تغيرها لاحقا من خلال بعض الخصائص المخصصة لذلك

خصائص زر ToggleButton

  1. id:

    هي الخاصية المسؤولة عن تميز هذا الزر عن غيره طريق إعطاه إسم فريد

  2. checked:

    تستخدم هذه الخاصية في وضع القيمة للزر وتكون قيمة منطقية true or false وعند وضع القيمة true يعني أن الحالة محددة checked وعندما تكون flase تعني أن الحالة غير محددة unchecked وتكون القيمة الافتراضية هي flase

  3. gravity :

    هذه الخاصية تستخدم في التحكم في موضع النص داخل الزر وتكون إحدي القيم يمين او يسار او بالاعلي او الاسفل او الوسط في كلا الاتجاهين

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="engahmed.gagacademy.MainActivity">

    <ToggleButton
        android:id="@+id/btn_toggle1"
        android:checked="true"
        android:gravity="right"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    <ToggleButton
        android:id="@+id/btn_toggle2"
        android:checked="false"
        android:gravity="left"
        android:layout_width="100dp"
        android:layout_height="100dp" />

</LinearLayout>

  1. textOn And textOff:

    textOn تستخدم هذه الخاصية في تعين النص عندما تكون الحالة محددة checked
    textOff تستخدم في تعين النص المكتوبة داخلها عندما تكون الحالة غير محددة unchecked


  1. textSize:

    تستخدم في تعين حجم النص داخل زر التبديل ويقاس حجم النص بوحدة sp

  2. textStyle:

    تستخدم هذه الخاصية في تعين شكل النص داخل الزر وتأخذ إحدي القيم bold , italic

  3. textColor:

    تستخدم في تعين لون للنص داخل الزر

  4. background:

    تستخدم في وضع صورة او لون ليكون عبارة عن خلفية للزر

  5. padding:

    تستخدم في تحريك النص داخل الزر من إحدي الحواف الاربعة وفقا لقيم الاتجاهات المعروفة

  6. drawableBottom, drawableTop, drawableRight And drawableLeft :

    تستخدم في وضع صورة مع نص داخل الزر والتحكم في تموضع الصورة بالنسبة للنص من خلال القيم اعلي واسفل ويمين ويسار

<ToggleButton
        android:id="@+id/btn_toggle1"
        android:checked="true"
        android:gravity="center"
        android:textOff="Disable"
        android:textOn="Enable"
        android:textSize="20sp"
        android:textStyle="italic"
        android:textColor="#efd56b"
        android:background="#44a987"
        android:drawableLeft="@mipmap/ic_launcher"
        android:layout_width="280dp"
        android:layout_height="100dp"/>
    <ToggleButton
        android:id="@+id/btn_toggle2"
        android:checked="false"
        android:gravity="center"
        android:textSize="20sp"
        android:textStyle="bold"
        android:textColor="#601aec"
        android:background="#9c98ac"
        android:textOff="Disable"
        android:textOn="Enable"
        android:drawableRight="@mipmap/ic_launcher"
        android:layout_width="280dp"
        android:layout_height="100dp" />

نوفمبر 20, 2018

Button in android studio


في هذه التدوينة سنتعرف الي ألازرار في برمجة تطبيقات الروبوت وكيفية عملها وما يحدث خلف الكواليس
الزر Butoonهو فئة فرعية من الكلاس TextView وزر مركب buttonهو فئة فرعية لفئة الزر Butoon>. حيث نستطيع علي أحد الازرار تنفيذ إجراءات أو أحداث مختلفة مثل حدث النقرclick event والحدث المضغوط pressed eventوالحدث باللمس touch eventوما إلى ذلك.
أزرار Android هي مكونات واجهة المستخدم الرسومية (GUI) التي تكون منطقية عند النقر (النقرات) بواسطة المستخدم. عندما ينقر المستخدم على الزر / ينقر taps/clicks على أحد التطبيقات في Android ، يمكن أن يستجيب التطبيق للنقرة / النقر وتنفيذ حدث معين.
يمكن تقسيم هذه الأزرار إلى فئتين:

  1. الأولى هي الأزرار التي تحتوي على نص Button

  2. والثانية هي الأزرار التي تحتوي على صورة ImageButton يمكن أن يحتوي الزر الذي يحتوي على صور على كل من صورة ونص. تسمى أيضًا أزرار Android التي تحتوي على صور باسم ImageButton.

وتوجد خمسة انواع من الازرار يتعامل معهاالتطبيق وهي :
  1. Button

  2. ToggleButton

  3. RadioButton

  4. ImageButton

  5. FloatinActionButton

يمكننا إدراج الازرار في البرنامج بطريقتين :
  1. السحب والإفلات

  2. عن طريق ملف XML

وسنعتمد في هذه التدوينة العمل من خلال ملف XML file وذلك لكي تتعلم كيفية كتابة الكود في هذا الملف وتتعرف الي الخصائص التي تميز الازرار

كتابة الزر في ملف XML

قم بعمل مشروع جديد وقم بتسميته باي إسم تريده وهنا سيكون بالاسم ButtonExample وفي داخل الفعالية \ الصفحة\النشاط الرئيسي قم بكتابة الاكواد
 <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GagAcademy" />

بعض الخصائص التي تميز الازرار

1.id تعرفنا اليها سابقا وهي خاصية رقم المعرف الفريد لكل عنصر ولا يجب أن يكون هناك عناصر بنفس الاسم id
 <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GagAcademy" />
2.gravity خاصية المحازاة للعناصر وهي تسمح محازاة الزر بعدة إتجاهات مثل اليمين والاسفل والوسط واليسار والتوسط في الافقي والعمودي
 <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="right"//هنا قم بتغير القيمة الي اخري مثلا الي اليسار او الوسط او الاسفل وشاهد النتيجة
        android:text="GagAcademy" />

ملاحظة

يمكنك دمج اكثر من خاصية في نفس العنصر وذلك من خلال إستخدام الرمز |ويوضع بين الخاصية والاخري كما هو موضح في الصورة أعلاه

3.textColor وهي الخاصية المسؤولة عن لون النص الذي يوجد بداخل الزر ويمكنك إعطاها اللون الذي تريد
4.textSize هذه الخاصية مسؤولة عن حجم الزر وهي تقاس بوحدة sp
5.textStyle هذه الخاصية مسؤولة عن شكل الزر ويحمل إحدي القيم bold or italic ويكون في الوضع الافتراضي normal
background.6 وهي خاصية توفر إمكانية وضع لون او صورة ويكون عبارة عن خلفية للزر
7.padding or margin وهما الخصائص التي تتحكم في تمركز النص الداخلي بالنسبة للحاوية padding او الحاوية ككل بالنسبة للواجهة الجزر margin
8.textAllCaps خاصية منطقية تقبل إحدي القيمتين فقط إما true or false وهي تجعل من النص داخل الزر إما حروف كبيرة او صغيرة
  <Button
        android:id="@+id/Button1"
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:background="#147D03"
        android:text="GagAcademy"
        android:textSize="20sp"
        android:paddingRight="130dp"
        android:layout_marginTop="130dp"
        android:textAllCaps="false"
        android:textStyle="bold|italic"/>   


9.drawableTop, drawableRight, drawableBottom and drawableLeft
هذه الخصائص تستخدم عندما نريد وضع صورة مع النص داخل الزر وهي تتحكم في وضع الصورة بالنسبة للنص

توجد خصائص أخري كثيرة ستتعرف اليها من خلال تعاملك مع البرنامج ومتطلبات التطبيق الذي تريد صناعته
وسنتعرف في تدوينات أخري الي إستخدام المكتبات في تصميم الازرار بصورة جميلة ومناسبة مع التطبيق باذن الله .

ملاحظة

يمكنك التعامل مع الازرار وكل الواجهات في ملف XML من خلال ملف الجافا كليا وتنسيقها بشكل مناسب
MainActivity.java
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn_Show = (Button) findViewById(R.id.Button1);//تم إستدعاء الزر من خلال رقم المعرف id وإنشاء كائن من الكلاس Button وتمت تسميته btn_show 
        //من خلال الكائن يمكنك إستدعاء كل الدوال التي تتوفر في الكلاس الاب Button 
        btn_Show.setText("GagAcademy");
        btn_Show.setTextSize(16);
        btn_Show.setGravity(50);
        btn_Show.setBackground(getResources().getDrawable(R.drawable.ic_launcher));
        btn_Show.setTextColor(Color.GREEN);
        //يمكنك وضع ما تريد من الخصائص في ملف الجافا
    }

الأربعاء، 10 أكتوبر 2018

أكتوبر 10, 2018

custom listview


اليوم باذن الله راح نشرح قائمة العرض المخصصة والتي تحتوي علي صور وازرار ونصوص وغيرها ويمكن تخصيصها اكثر لتلائم التطبيق وهي قائمة تستخدم موائم عرض مخصصة مثل ArrayAdaper او CustomAdapter سنتعرف الي ثلاثة انواع من المحولات الخاصة في هذه التدوينة

Adding ListView in MainActivity

اولا سنقوم بفتح مشروع جديد وفي داخل ملف XML الخاص بالفعالية الرئيسية MainActivity سنقوم بإدراج قائمة عرض ListView وإعطاها رقم ID خاص وسيكون شكل الملف كالاتي
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="net.simplifiedlearning.customlistviewandroid.MainActivity">
 
<ListView
    android:id="@+id/list2"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
 
</RelativeLayout>
الان سنقوم بإنشاء صفحة فعالية جديدة لنخصص فيها القائمة ونضيف فيها العناصر المطلوبة ويتم إعطاها اي اسم وفي مثالنا هذا سنسميها row_item
من مجلد res إضغط كلك يمين وإختار new ثم إختار XML ثم Layout XML File

row_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <ImageView
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:id="@+id/image_ph"
        android:layout_gravity="top"
        android:layout_width="48dp"
        android:layout_height="48dp" />

    <TextView
        android:layout_marginStart="5dp"
        android:layout_marginLeft="5dp"
        android:id="@+id/text_ph"
        android:layout_gravity="top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="25sp" />

</LinearLayout> 
سنقوم الان بإضافة ملف drawable اولا إضغط علي ملف res كلك يمين ثم إختار من القائمة ملف android resource directory من القائمة التي تظهر إضغط علي resource type واختار إسم drawable وسيكون الاسم الافتراضي نفسه
قم بالذهاب الي مكان الصور التي تريد وضعها في التطبيق واعمل لها نسخ وإرجع الي الاندرويد أستوديو وفي نفس ملف drawable قم بالضغط علي كلك يمين وقم بعمل لصق للصور التي تم نسخها سابقا

ملاحـــظة

يجب أن تكون أسامي الصور بالاحرف الصغيرة وليس الكبيرة

وهذه الصورة توضح العملية السابقة كلها



الان سنتوجه الي البرمجة وعمل كلاس جديد وقم بتسميته باي إسم تريد وفي حالتي سيكون الاسم CustomAdapter قم بالتوجه الي ملف الجافا وعمل كلاس جديد واكتب بداخله الكود ادناه وسيكون الشرح داخل الكود نفسه
CustomAdapter.java
package engahmed.gagacademy;

import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

class CustomAdapter extends ArrayAdapter<String> {
    private String[] cant;
    private int[] photo;
    private Activity context;

    CustomAdapter(Activity context, String[] cant, int[] photo) {//الدالة الإنشائية الخاصة بالكلاس
        super(context, R.layout.row_item, cant);
        this.context = context;
        this.cant = cant;
        this.photo = photo;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {//دالة عرض محتويات القائمة
        View r = convertView;
        ViewHolder viewHolder;
        if (r == null) {
            LayoutInflater layoutInflater = context.getLayoutInflater();
            r = layoutInflater.inflate(R.layout.row_item, null, true);
            viewHolder = new ViewHolder(r);
            r.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) r.getTag();
        }
        viewHolder.tvw1.setText(cant[position]);
        viewHolder.tvw2.setImageResource(photo[position]);


        return r;
    }

    private class ViewHolder {
        TextView tvw1;//tvw1 عبارة عن إسم ويمكن تغيره الي غيره
        ImageView tvw2;//tvw2 عبارة عن إسم ويمكنك تغيره الي ما تريد

        ViewHolder(View v) {
            tvw1 = (TextView) v.findViewById(R.id.text_ph);
            tvw2 = (ImageView) v.findViewById(R.id.image_ph);
        }
    }
}
يتم إستخادم المحولات لاعادة إستخدام العرض في كل مرة يتم فيها عرض البيانات الجديدة وتختفي البيانات التي تم عرضها وتكون غير ظاهرة لدي المستخدم
مثلا لدينا قائمة بها 10 عناصر وعند عرضها تظهر فقط 7 منها وتكون ال3 مخفية وعند النزول لاسفل تظهر ال3 الاخيرة وتختفي ال3 التي توجد في اعلي القئمة وهكذا وهو ما يسمي بإعادة التدوير
وظيفة LayoutInflater هي تعمل علي إنشاء كائنات عرض من ملف XML وتحويل كل محتواه الي كائن عرض ليستخدم في المحول الخاص
في ملف MainActivity قم بعمل مصفوفتين واحدة للصور وتكون من نوع بيانات int والاخري من نوع بيانات String لتخزين الاسامي
MainActivity.java
package engahmed.gagacademy;//قم بتغيره الي إسم الحزمة الخاصة بك


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;


public class MainActivity extends AppCompatActivity {
    ListView lv;
    int[] flags = {R.drawable.irag, R.drawable.jibuti, R.drawable.saudi, R.drawable.somal, R.drawable.sudan, R.drawable.qater};
    String[] countNameList = {"ireg", "jibuti", "saudi", "somal", "sudan", "qater"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.list2);
        CustomAdapter customAdapter = new CustomAdapter(MainActivity.this, countNameList, flags);
        lv.setAdapter(customAdapter);
    }
}

والان قم بعمل run للتطبيق ليظهر بالشكل التالي مع مراعاة الصور التي وضعت لديك فهي تختلف عما توجد هنا


سنأخذ مثال ثاني بشكل برمجي مختلف وسيكون بنفس المحتوي السابق لكن يختلف من حيث البرمجة فقط
كل شئ سيكون كما هو سابقا عدا ملف الجافا وسنغير فقط كلاس CustomAdapter الي الاتي
CustomAdapter.java
package engahmed.gagacademy;//قم بتغيره الي إسم الحزمة لديك

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAdapter extends BaseAdapter {
    Context context;
    String countryList[];
    int flags[];
    LayoutInflater inflter;

    public CustomAdapter(Context applicationContext, String[] countryList, int[] flags) {
        this.context = context;
        this.countryList = countryList;
        this.flags = flags;
        inflter = (LayoutInflater.from(applicationContext));
    }

    @Override
    public int getCount() {
        return countryList.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = inflter.inflate(R.layout.row_item, null);
        TextView country = (TextView) view.findViewById(R.id.text_ph);
        ImageView icon = (ImageView) view.findViewById(R.id.image_ph);
        country.setText(countryList[i]);
        icon.setImageResource(flags[i]);
        return view;
    }
}
الان قم بتشغيل التطبيق من جديد وستري نفس النتيجة السابقة تماما


هناك إسلوب أخر متبع في برمجة القائمة المخصصة وسيكون الاختلاف في ملف الجافا فقط

الثلاثاء، 9 أكتوبر 2018

أكتوبر 09, 2018

ListView in android studio


في هذه التدوينة سنتحدث عن أهم عناصر العرض التي لا يخلو تطبيق منها وهي عرض القائمة

قائمة العرض (ListView)

عرض العناصر في قائمة هو أحد التصاميم الشائعة بكثرة في تطبيقات الهواتف النقالة. يشاهد المستخدم عدد من العناصر ويستطيع الانتقال لأعلى القائمة وأسفلها down/up scroll كما هو موضح بشكل عناصر القائمة يتم عادة تنفيذ إجراء مثل فتح فعالية جديدة

إضافة البيانات الي القائمة (ListView)

لإضافة بيانات للقائمة ListView يتم عادةً استخدام المحول Adapter, وهو كائن وسيط بين عنصر العرض وهو القائمة ListViewأو أي عنصر واجهة يتفرع من الفئة class AdaperView وبين البيانات المعروضة. يتحكم المحول Adapter في الوصول لبيانات القائمة, كما أنه مسؤول عن تحويل البيانات المدخلة للقائمة إلى عنصر عرض (View) يمكن تضمينه داخل القائمة. فمثلاً, عند إداخل مصفوفة من النصوص (Array String) لعرضها في القائمة, يقوم المحول Adapter بتحويل كل عبارة نصية في المصفوفة إلى كائن من نوع TextView والذي يتم إدراجه في القائمة, أي أن مصفوفة النصوص تتحول باستخدام المحول Adapter إلى مجموعة من عناصر العرض TextView المجمعة في قائمة من نوع ListView

خصائص قائمة العرض

1.id

هو المعرف الذي يتم إعطاه الي القائمة لاستخدامها في البرمجة

2.divider

عبارة عن صورة او لون يستخدم بين عناصر القائمة
<!--Divider code in ListView-->
 <ListView
       android:id="@+id/list"
       android:divider="#e42a87"
       android:dividerHeight="5dp"
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>

3.dividerHeight:

وهي خاصية تمثل حجم الخط الفاصل بين عناصر القائمة وهو موضح في الكود السابق

4.listSelector

يتم استخدام listSelector property لتعيين محدد القائمة listView. عادةً ما يكون اللون البرتقالي أو الأزرق سماوي ، ولكن يمكنك أيضًا تحديد لونك المخصص أو صورة كمحدد قائمة حسب التصميم الخاص بك.
<!-- List Selector Code in ListView -->
 <ListView
       android:id="@+id/list"
       android:divider="#e42a87"
       android:dividerHeight="5dp"
       android:listSelector="#9b7878"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />

الخرج النهائي

المحولات الإفتراضية (Default Adapter)

  1. ArrayAdapter

  2. CursorAdapter

ArrayAdapter يستخدم في إدخال البيانات من المصفوفة array او من القائمة list
المحول المخصص CursorAdapter يعالج البيانات المدخلة من قاعدة بيانات أو مزود المحتوى(Content Provider)
كل هذه المحولات Adapters هي فئات classes فرعية من الكلاس (subclasses) من الفئة الاساسية BaseAdapter
مثال علي القائمة

إفتح ملف res > layout > main_activity واكتب داخله الكود التالي

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/LinearLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context="com.example.AppU.MainActivity" >
 <ListView
 android:id="@+id/listView"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" >
 </ListView>
</LinearLayout>

إفتح ملف الجافا الخاص بالنشاط واكتب داخله الكود التالي

MainActivity.java
1: public class MainActivity extends Activity {

3: @Override
4: protected void onCreate(Bundle savedInstanceState) {
5: super.onCreate(savedInstanceState);
6: setContentView(R.layout. activity_main);
7:   ListView listView = (ListView) findViewById(R.id.list);
8:        //هنا سنعرف مصفوفة جديدة تحتوي علي أسماء القائمة التي سيتم عرضها في التطبيق
9:        String[] values = {"India", "China", "australia", "Portugal", "UK", "KSA"};
10:        ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, values);
11:        listView.setAdapter(adapter);

13:        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
14:            @Override
15:            public void onItemClick(AdapterView parent, View view, int position, long id) {
16:                Toast.makeText(getApplicationContext(), parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show();
17:            }
18:        });
19:    }
20: }

شرح الكود المستخدم

7: يتم أولاً الوصول للقائمة عن طريقة الدالة findViewById()
9: إنشاء مصفوفة تحتوي علي أسماء القائمة التي سيتم عرضها
10: لادراج محتوي القائمة list داخل قائمة العرض ListView نستخدم المحول ArrayAdapter
حيث يمرر لهذا المحول ثلاثة قيم وهي
1:context وهي تحدد الصفحة التي ستظهر فيها قائمة العرض , وفي هذا المثال تم الاشارة الي الصفحة الرئيسية ب this لانها الصفحة الوحيدة التي توجد في هذا البرنامج
2:المعرف الخاص بهيكلية الصفحة android.R.layout.simple_list_item_1 وهي قائمة مجهزة من قبل فريق أندرويد ستوديو ومضمنة داخل البرنامج
3:البيانات التي ستعرض في القائمة وهي في هذا المثال عبارة عن المصفوفة التي إنشاءه سابقا
11: بعد إنشاء المحول وادخال البيانات عليه يتم تمريره الي القائمة عن طريقة الدالة setAdapter()
13:لجعل القائمة تفاعلية وعند النقر علي اي عنصر فيها تم إستخدام المستمع من نوع OnItemClickListener عند حصول الحدث يتم تنفيذ الدالة onItemClicked() والتي يمرر إليها موقع العنصر الذي تم اختياره من القائمة (ListView). يتم بعد ذلك الوصول و طباعة اسم العنصر الذي تم اختياره عن طريق الدالة getItemAtPosition(). لاحظ أن البيانات التي يتم تمريرها إلى المحول (Adapter) قد لا تكون بيانات نصية String, بل قد تكون كائن (object) من أي نوع. في حالة تمرير كائن غير نصي, يقوم المحول (Adapter) ضمنياً بتنفيذ الدالة ()toString لتمثيل الكائن كنص. لذلك احرص على تطبيق الدالة ()onString لأي كائن تقوم بإنشائه حتى تعمل القائمة )ListView( بعرض البيانات بالشكل الصحيح.
16:عبارة عن رسالة مؤقتة تعرض رسالة معينة عند النقر في احد عناصر القائمة وقد تحتوي علي اكواد مجمعة داخلها وهو يعتمد علي برمجتك للتطبيق

ملاحظة

في الدروس القادمة سنتحدث عن القائمة التي تحتوي علي نصوص وصور وازرار وعناصر اخري وهي أيضا تعرف باسم القوائم المخصصة Custom ListView

الخميس، 27 سبتمبر 2018

سبتمبر 27, 2018

Frame Layout

Frame Layout : يعد تصميم الإطار أحد أبسط المخططات التي تنظم عناصر التحكم في العرض. وهي مصممة لمنع منطقة على الشاشة. يجب استخدام "تخطيط الإطار" للاحتفاظ بطريقة عرض العناصر التابعة له ، لأنه  من الصعب عرض طرق عرض واحدة في منطقة محددة على الشاشة دون تراكب بعضها مع بعض.
يمكن إضافة العديد من العناصر التابعة الي هذا المخطط والتحكم في موضعهم علي الشاشة عن طريقة خاصية الجاذبية (gravity)

خصائص التخطيط الاطاري :-
1. android:id
خاصية المعرف المفيد التي تشير الي التخطيط الاطاري في ملف الجافا R.java
2. android:foreground
هي خاصية مسؤولة عن رسم المحتوي وقد تكون قيمة الخاصية قيمة لونية 

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/framelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:foregroundGravity="fill"
    android:foreground="#e9d1ac29">

<LinearLayout
  android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

<ImageView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_marginBottom="10dp"
    android:src="@drawable/ic_android_black_24dp"
    android:scaleType="centerCrop"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="50sp"
    android:gravity="center_horizontal"
    android:text="GagAcademy"/>

</LinearLayout>

</FrameLayout>

الخرج :

ملاحظة

عند تطبيق هذه الخاصية ستكون العناصر التي تكون دخل المخطط الاطاري في الخلفية ويتم وضع foreground في المقدمة ويمكن إعطاء بعض الخواص مثل اللون او حتي صور

3. android:foregroundGravity

هذه الخاصية تمثل موضع foreground في المخطط ويمكن أعطاءها بعض القيم مثل “top”, ”center_vertical” , ”fill_vertical”, ”center_horizontal”, ”fill_horizontal”, ”center”,  ”fill”, ”clip_vertical”, ”clip_horizontal”, ”bottom”, ”left” or ”right” وتكون القيمة الافتراضية هي fill.
المثال بالاعلي يحتوي علي هذه الخاصية ايضا.

4. android:visibility

هذه الخاصية تقبل ثلاثة قيم فقط وهي visible, invisible or gone.
visible –the view is present and also visible العرض موجود ومرئي أيضا
invisible –The view is present but not visible العرض موجود وغيرمرئي
gone –The view is neither present nor visiblebe العرض غير موجود ولا مرئي

5. android:measureAllChildren

هذا يحدد ما إذا كان سيتم قياس جميع  العناصر التابعة بما في ذلك رؤية الحالة المرتدة أو تلك الموجودة في الحالة المرئية أو غير المرئية لقياس الرؤية. القيمة الافتراضية لـ measureallchildren خاطئة. يمكننا تعيين قيم في شكل Boolean بمعنى "true" أو "false".

ملاحظة

أذا تم تعين القيمة true سيعرض كل من الطول والعرض لمخطط الاطاري حتي إذا كانت قيمة العرض gone

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frame"
    android:orientation="vertical" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:measureAllChildren="true">

  <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:src="@drawable/ic_launcher"/>

</FrameLayout>
توجه الي ملف الجافا واكتب داخل وظيفة onCreate() الكود الذي يعرض الطول والعرض في رسالة مؤقتة Toast
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo);
        FrameLayout frame=(FrameLayout)findViewById(R.id.frame);
        frame.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
        int width = frame.getMeasuredWidth();
        int height = frame.getMeasuredHeight();
Toast.makeText(getApplicationContext(),"width="+width+"height="+height,Toast.LENGTH_SHORT).show();

    }
}

مثال تطبيقي علي المخطط الاطاري :
Step 1: Create a new project in Android Studio and name it FrameTesting. (Select File -> New -> New Project. Fill the forms and click “Finish” button)

Step 2: Now Open res -> layout -> activity_main.xml and add the following code. Here we are putting different TextView in Frame Layout.


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_margin="20dp"
 android:layout_height="match_parent"
    android:layout_width="match_parent">
	
 <TextView 
        android:text="LeftTop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
 <TextView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="RightTop"
        android:layout_gravity="top|right" />
   
 <TextView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="CentreTop"
        android:layout_gravity="top|center_horizontal" />
  
 <TextView
        android:text="Left"
        android:layout_gravity="left|center_vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

 <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Right"
        android:layout_gravity="right|center_vertical" />
  
 <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Centre"
        android:layout_gravity="center" />

 <TextView 
        android:text="LeftBottom"
        android:layout_gravity="left|bottom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

 <TextView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="RightBottom"
        android:layout_gravity="right|bottom" />

 <TextView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="CenterBottom"
        android:layout_gravity="center|bottom" />
</FrameLayout>
Step 3: Let the MainActivity.java has default Android code or add the below code:
package tutorial.com.frametesting;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
الخرج:

الثلاثاء، 25 سبتمبر 2018

سبتمبر 25, 2018

Table Layout

في هذه التدوينة سنتحدث عن ViewGroup أخر وهو من الانواع المهمة جدا لتصميم واجهات في اشكال مربعة او مستطيلة ويوفر تحكم أدق من المجموعات الاخري من هذه الناحية.
المخطط الجدولي TableLayout :-
في الاندرويد يستخدم الجدول في ترتيب العناصر التابعة views في شكل أعمدة columns و صفوف rows ,ولا يعرض حدود border فاصلة تلقائيا بين هذه الاعمدة والصفوف ,حيث أن الصف هو الذي يحتوي علي الخلايا (العناصر التابعةviews) .


بعض النقاط حول المخطط الجدولي :
1. لإنشاء صف جديد نستخدم عنصر  وهو عبارة عن كائن object فرعي من المخطط الجدولي
2. يحتوي كل صف في الجدول علي صفر او اكثر من الخلايا ,ويمكن لكل خلية أن تحتفظ علي كائن عرض واحد فقط
3. يتم تعريف العرض الكلي للجدول من خلال الحاوية الرئيسية نفسها ViewGroup.
وهنا الشكل الاساسي لكود الجدول في ملف activity_main.xml



خصائص المخطط الجدولي :
1. id
يتم إستخدام هذه الخاصية لتعريف المخطط الجدولي بشكل فريد
2. stretchColumns
هذه الخاصية تسمح بتمدد الاعمدة حسب المساحة المتوفرة في الصف المعين وهي تأخذ قيم صحيحة وكسرية واليك بعض التوضيح
1.إذا كانت القيمة 0 سوف يأخذ العمود الاول كل المساحة المتوفرةفي الصف
2.إذا كانت القيمة 1 سوف يأخذ العمود الثاني كل المساحة المتوفرة في الصف
3.إذا كانت القيمة 2 سوف يأخذ العمود الثالث كل المساحة المتوفرة في الصف
لتوزيع مساحة الصف علي الاعمدة بالتساوي فإن القيمة ستكون *














إذا أردنا تساوي مساحة عمودين او اكثر فأنه يتم الفصل بين الارقام بفاصلة عشرية ليدل الرقم الاول علي العمود صاحب الرقم والرقم بعد الفاصلة علي العمود صاحي الرقم وهكذا

                                                                                                      





3. shrinkColumns
هي خاصية تقليل او تقليص عرض الاعمدة ,يمكن تحديد عمود واحد او قائمة مفصولة بي فواصل لارقام الاعمدة بهذه الخاصية .


4. collapseColumns
تعرف هذه الخاصية بخاصية إنهيار الاعمدة وهي تعمل علي إخفاء العمود من الظهور علي الشاشة ,وتكون هذه الاعمدة جزء من الجدول ولكنها لا تظهر فيه .
ويتم تحديد العمود الذي يراد إخفاءه بواسطة رقم ترتيبه في الصف
مثلا إذا أردنا اخفاء العمود الاول فإن الرقم سيكون 0 , والعمود الثاني سيكون الرقم 1 وهكذا
أكتب هذا الكود في ملف التصميم وشاهد نتيجة الخرج في المحاكي مع مراعاة تغير الرقم من 0 الي رقم اخر لتوسعة الفهم وإضافة عناصر أخري ايضا .

مثال عملي علي المخطط الجدولي وهو عبارة عن تصميم الة حاسبة بسيطة.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/color_Back">


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="0"
        android:id="@+id/text_View"
        android:background="#d1c9c9"
        android:gravity="bottom|right"
        android:textSize="50sp"
        android:paddingRight="30dp"
        android:paddingBottom="40dp"
        android:layout_marginBottom="0dp"
        android:layout_weight="0.15" />


    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginBottom="1pt">

            <Button
                android:onClick="onClickClear"
                android:id="@+id/clear"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:textColor="@color/color"
                android:background="@color/color_gray"
                android:text="AC"
                android:textSize="30sp" />

            <Button
                android:textColor="@color/color"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="+/-"
                android:textSize="30sp" />

            <Button
                android:onClick="onClickOpereator"
                android:textColor="@color/color"
                android:id="@+id/persent"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="%"
                android:textSize="30sp" />

           <Button
                android:onClick="onClickOpereator"
                android:id="@+id/supplay"
                android:layout_width="20pt"
                android:layout_height="30pt"
                android:layout_weight="1"
                android:background="@color/color_x"
                android:text="/"
                android:textSize="30sp" />
       </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="1pt">

            <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/seven"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="7"
                android:textSize="30sp" />

           <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/eight"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="8"
                android:textSize="30sp" />

            &<Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/nine"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="9"
                android:textSize="30sp" />

            <Button
                android:onClick="onClickOpereator"
                android:id="@+id/multiple"
                android:layout_width="20pt"
                android:layout_height="30pt"
                android:layout_weight="1"
                android:background="@color/color_x"
                android:text="*"
                android:textSize="30sp" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="1pt">

            <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/four"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="4"
                android:textSize="30sp" />

           <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/five"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="5"
                android:textSize="30sp" />

            <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/sexth"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="6"
                android:textSize="30sp" />

           <Button
                android:onClick="onClickOpereator"
                android:id="@+id/minimaiz"
                android:layout_width="20pt"
                android:layout_height="30pt"
                android:layout_weight="1"
                android:background="@color/color_x"
                android:text="-"
                android:textSize="30sp" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="1pt">

            <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/one"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="1"
                android:textSize="30sp" />

            <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/tow"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="2"
                android:textSize="30sp" />

            <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/three"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="3"
                android:textSize="30sp" />

            <Button
                android:onClick="onClickOpereator"
                android:id="@+id/add"
                android:layout_width="20pt"
                android:layout_height="30pt"
                android:layout_weight="1"
                android:background="@color/color_x"
                android:text="+"
                android:textSize="30sp" />
        </TableRow>

       <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="1pt"
            android:layout_weight="1">

            <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/zero"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="0"
                android:textSize="30sp" />

            <Button
                android:onClick="onClickOpereator"
                android:textColor="@color/color"
                android:id="@+id/squar"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="^"
                android:textSize="30sp" />

            <Button
                android:onClick="clickNumber"
                android:textColor="@color/color"
                android:id="@+id/point"
                android:layout_width="30pt"
                android:layout_height="30pt"
                android:layout_marginRight="1pt"
                android:layout_weight="1"
                android:background="@color/color_gray"
                android:text="."
                android:textSize="30sp" />

            <Button
                android:onClick="onClickEquals"
                android:id="@+id/equal"
                android:layout_width="20pt"
                android:layout_height="30pt"
                android:layout_weight="1"
                android:background="@color/color_x"
                android:text="="
                android:textSize="30sp" />
        </TableRow>
    </TableLayout>
</LinearLayout>

في ملف res>values>color
انسخ هذا الكود

الخرج :

صفحتنا علي الفيسبوك

التسميات

المتواجدين حاليا