خلاصه نویسی های برنامه نویسی اندروید

طبق آموزش سایت فرادرس و مکتب خونه

خلاصه نویسی های برنامه نویسی اندروید

طبق آموزش سایت فرادرس و مکتب خونه

دارم برنامه نویسی اندروید یاد می گیرم هر چی یاد می گیرم این جا می نویسم ایشالا
هر کی خواست دوره مکتب خونه رو بخره بگه من بهش کد تخفیف ۴۰ درصد بدم!

طبقه بندی موضوعی

دریافت اطلاعات وارد شده در فرم

دو راه:

۱- تو همون جاوا یه کلاس اضافه کنی و بنویسی تو واقعیت با فرگمنت می کنیم اینا آموزشیه فقط

 

باگ استاد نوشت android:layout_centerInParent=“true” ولی برا من نمیشه. چرا؟

جواب: چون لیوت من رو constrained بوده وقتی بذاریش relative layout درست میشه 

 

موقه استفاده از intent باید ایمپورت شود import android.content.Intent;

 

xml فرم(good.xml) این فرمو جلسه قبل ساختیم

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/forminfo"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_margin="15dp"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/inputphone"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:hint="phone"
            android:maxLength="11"
            android:inputType="phone" />

        <EditText
            android:id="@+id/inputname"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="7"
            android:hint="Name"
            android:inputType="textPersonName" />

    </LinearLayout>

    <CheckBox
        android:id="@+id/cbshare"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:checked="true"
        android:text="Share my number" />

    <View
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/colorPrimary" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/inputemail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="email"
            android:inputType="textEmailAddress" />

        <ImageView
            android:id="@+id/imageView"
            android:layout_marginTop="5dp"
            android:layout_width="80dp"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:scaleType="fitXY"
            app:srcCompat="@drawable/email" />


    </LinearLayout>

    <Button
        android:id="@+id/btsub"
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Submit" />

    <View
        android:id="@+id/view2"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@android:color/holo_orange_dark" />

</LinearLayout>

 بعدش یه java هم براش می سازیم: (FormInfo.java) می زنی new>Java Class

نکته مهم در این کد intent هست intent ها ماموریت انجام میدن وقتی میخوایم یه چیزی رو از یه activity بفرستیم به یکی دیگه یه intent می فرستیم. بعد اینا می تونن فقط برن باعث شن activity بعدی باز شه یا این که یه اطلاعاتی هم با خودشون ببرن. اون اطلاعاته extra هستن 

 

نکته بعدی email.split( میاد string رو بر اساس اون چیزی که تو پرانتز ورودی بهش میدیم تبدیل می کنه به تعدادی آرایه. ینی هر جا رسید به اون ورودی، string رو می شکنه

package ir.ben.hassan;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class FormInfo implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
    private Activity activity;
    private LinearLayout forminfo;
    private Context context;
    private EditText inputname;
    private EditText inputphone;
    private EditText inputemail;
    private CheckBox cbshare;
    private Button btsub;


    public FormInfo(Activity activity,int layoutId) {
        this.activity=activity;
        forminfo=activity.findViewById(layoutId);//here the instructor did a cast (LinearLayout)
        this.activity=activity;
        init();
    }

    private void init() {
        if(forminfo==null)
            return;
        inputname=forminfo.findViewById(R.id.inputname);//here the instructor did a cast (EditText)
        inputphone=forminfo.findViewById(R.id.inputphone);
        inputemail=forminfo.findViewById(R.id.inputemail);
        cbshare=forminfo.findViewById(R.id.cbshare);
        btsub=forminfo.findViewById(R.id.btsub);
        btsub.setOnClickListener(this);
        cbshare.setOnCheckedChangeListener(this);

    }

    @Override
    public void onClick(View v) {
            if(v.getId()==btsub.getId())
            {
                String email=inputemail.getText().toString().trim();
                String phone=inputphone.getText().toString().trim();
                String name=inputname.getText().toString().trim();
                if(isvalidinput(name,phone,email))
                {
                    Toast.makeText(activity, "Valid Input", Toast.LENGTH_SHORT).show();

                    Intent intent=new Intent(activity,two.class);
                    intent.putExtra("name",name);
                    intent.putExtra("email",email);
                    if(cbshare.isChecked())
                        intent.putExtra("phone",phone);
                    activity.startActivity(intent);
                }
            }
    }

    private boolean isvalidinput(String name,String phone,String email) {
        if (name.length() < 3) {
            Toast.makeText(activity, "Name should be at least 3 characters", Toast.LENGTH_SHORT).show();
            inputname.requestFocus();
            return false;
        }
        if (cbshare.isChecked() && !phone.isEmpty() && (phone.length() != 11 || !phone.startsWith("09"))) {
            Toast.makeText(activity, "Wrong mobile number", Toast.LENGTH_SHORT).show();
            inputphone.requestFocus();
            return false;
        }
        if (!email.contains("@") || (email.lastIndexOf('.') < email.indexOf('@')) || email.split("@").length>2)
        {
            Toast.makeText(activity, "Wrong email address", Toast.LENGTH_SHORT).show();
            inputemail.requestFocus();
            return false;
        }

        return true;
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(buttonView.getId()==cbshare.getId())
        {
            inputphone.setEnabled(isChecked);
        }
    }
}

تو activity main.xml آخرش یه فرم include شده

<include layout="@layout/good" android:id="@+id/forminfo"/>

تو mainactivity java : 

 setContentView(R.layout.activity_main);
 FormInfo form=new FormInfo(this,R.id.forminfo);

تو activity _two xml فقط یه textview با آیدی tv2 هست

تو javaش:

package ir.ben.hassan;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.DragStartHelper;

import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class two extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        TextView tv= findViewById(R.id.tv2);//alt+2enter to cast

        Toast.makeText(this, "hey", Toast.LENGTH_SHORT).show();

        Bundle extras=getIntent().getExtras();
        if(extras!=null)
        {
            Toast.makeText(this, "extra", Toast.LENGTH_SHORT).show();

            String email="";
            String phone="";
            String name="";
            if(extras.containsKey("email"))
                email=extras.getString("email");
            if(extras.containsKey("phone")){
            phone=extras.getString("phone").substring(2);\\substring from char 2 to end
            }
            if(extras.containsKey("name"))
                name=extras.getString("name");

            tv.setText("name: "+name+"\n");
            tv.append("email: "+email+"\n");
            tv.append("phone: "+phone+"\n");
        }
        else
            Toast.makeText(this, "no extra", Toast.LENGTH_SHORT).show();

    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۱۲ فروردين ۹۹ ، ۱۷:۱۸
Put Yourself First
<?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"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"

    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_centerInParent="true"
        android:layout_marginStart="96dp"
        android:layout_marginTop="179dp"
        android:layout_marginEnd="176dp"
        android:shadowColor="#03A9F4"
        android:text="date"
        android:textColor="#E91E63"
        android:textColorHighlight="#A61D1D"
        android:textColorLink="#0000ff"
        android:textSize="30sp" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="83dp"
        android:layout_marginTop="311dp"
        android:inputType="textMultiLine"
        android:maxLength="5"
        android:textAlignment="center"
        android:hint="First Name"
        android:gravity="center"
        android:textColor="#E91E63"
        android:textColorHint="#03A9F4"
         />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="119dp"
        android:layout_marginBottom="270dp"
        android:text="Button"


        />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="19dp"
        android:layout_marginTop="36dp"
        android:text="START" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:layout_marginStart="13dp"

        android:text="Name" />

    <EditText
        android:id="@+id/editText4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="phone"
        android:layout_marginRight="5dp"
        android:layout_marginTop="30dp"
        />
<include layout="@layout/good" android:id="@+id/forminfo"/>

</RelativeLayout>

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ فروردين ۹۹ ، ۲۰:۵۷
Put Yourself First

 ساخت یک لایه جدید در ریسورس ها

میری تو resources می زنی new->layout resource file

و از توی component tree می کنمش linear layout 

android:layout_margin="15dp"
android:orientation="vertical"

مثلا یه لیوت خطی عمودی ایجاد کردم با سه تا آیتم میخوام دو تا از اینا تو یه ردیف قرار بگیرن می تونم یه لیوت خطی افقی بردارم از تو پلت 

بیارم بذارم رو این لیوت ولش کنم، اون دو تا آیتم رو بذارم روش

 

به خاطر android:layout_height="match_parent"

 این ایتم سومیه گم شد کلا

میام می کنمش wrap content درست میشه 

 

افزودن خط افقی وسط ایتم ها 

<View
    android:id="@+id/view"
    android:layout_width="match_parent"
    android:layout_height="2dp"
   android:background="@color/chamani"
    />

حالا میخوایم یه عکس کنار باکس ایمیله بذاریم

سایت : iconfinder

androidicons

دانلودش می کنیم png تو ریسورس drawable کپی پیستش می کنیم 

بعد تو xml یه image view اضافه می کنیم آدرس اینو میدیم

<ImageView
    android:id="@+id/imageView"
    android:layout_width="70dp"
    android:layout_height="50dp"
    android:layout_weight="1"
    android:scaleType="fitXY"
    app:srcCompat="@drawable/email" />

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

<CheckBox
    android:id="@+id/cbshare"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:checked="true"
    android:text="Share my number" />

خوشکل سازی دکمه:

<Button
    android:id="@+id/btsub"
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Submit" />

باگ فقط من نمی دونم چرا همه آیتمای من چاقالو شده برا استاد لاغر می کشه 

بالاخره فهمیدم : اون linear layout اولی رو باید ارتفاعشو wrap content کنی آخیش ^_^

 

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

<include layout="@layout/good"
 android:id="@+id/forminfo"/>

(قبل اینکه تموم بشه ها!) ینی خط آخرت میشه </RelativeLayout>

برا من که برد گذاشتش وسط چیزای قبلی :| نذاشتش بعد از اونا 

حالا این وزن چیه می نویسه؟

ببین مثلا تو linear layout  دو تا چیز گذاشتی کنار هم و گفتی عرضشون مچ پرنته ems هم دارن 

حالا بخوای عرض یکی ۳۰ درصد صفحه رو بگیره اون یکی ۷۰ میای emsشونو بر میداری 

عرضشونو می نویسی 0 dpبعد تو وزن می نویسی ۳ و ۷ درست میشه

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="horizontal"

    <EditText
        android:id="@+id/inputphone"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:hint="phone"
        android:maxLength="11"
        android:inputType="phone" />

    <EditText
        android:id="@+id/inputname"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="7"
        android:hint="Name"
        android:inputType="textPersonName" />
</LinearLayout>
۰ نظر موافقین ۰ مخالفین ۰ ۱۰ فروردين ۹۹ ، ۲۱:۵۶
Put Yourself First

جلسه ۶

 

می خوایم درباره editText حرف بزنیم تو main activity xml

این دوست ما input typeهای مختلفی داره

مثلا textmultiline هر چی بنویسی خودش میاد پایین طولانی تر میشه 

ولی چیز دیگه ای بذاری مثلا به همون اندازه می مونه چیزایی که قدیمی تره نامرئی میشه میره زیر 

 

توی editText مثلا میخوای خیلی نتونه بنویسه کل صفحه رو بگیره از خط ۶ به بعد خط های قدیمی رو محو کنه می نویسی

android:inputType="textMultiLine"
android:lines="5"

یا میخوای فقط چن تا کاراکتر بتونه بگیره

android:maxLength="5"
android:hint="First Name"

android:textColor="#E91E63"
android:textColorHint="#03A9F4"

android:gravity="center"
android:textDirection="rtl"

فراخوندنش تو جاوا مین اکتیویتی

اون جایی که کلاسا رو تعریف کردی باتن و اینا رو:

EditText hello;

توی OnCreate:

tv.setText(“Dear ”hello.getText().toString() .trim());

این trim  اسپیس ها رو می ریزه دور

حالا این hello خودش کلی متد داره 

توی همون onCreate که هستی (نه بیرونه بیرون) می نویسی

hello.onFocusChangelistener()

میری توش می نویسی new بعد می زنی کنترل اسپیس (من که نزدم!)و تبدیل می کنی به همچی چیزی

hello.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        Toast.makeText(MainActivity.this, "foc changes", Toast.LENGTH_SHORT).show();
    }
});

این هر وقت بیای توش یا از روش بری بیرون میگه فوکوس عوض شد اگه بخوای یه دستوری رو فقط وقتی میاد توش اجرا کنی می زنی if(hasFocus) این بولین فقط وقتی میاد توش true هست 

متد دیگه ش : واکنش به هر تغییری

hello.addTextChangedListener(new TextWatcher() {

۰ نظر موافقین ۰ مخالفین ۰ ۱۰ فروردين ۹۹ ، ۲۱:۵۱
Put Yourself First

روش دوم بدون xml تو خود جاوا main activity

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem item=menu.add("good");
menu.add("better");
    return super.onCreateOptionsMenu(menu);
}

 و حتی اون MenuItem item= قابل حذفه

افزودن زیر منو:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {

       MenuItem good=menu.add("good");
       menu.add("better");
       SubMenu flower= menu.addSubMenu("flower");
       flower.add("rose");
       flower.add("orchids");
        return super.onCreateOptionsMenu(menu);
    }

حتی اون متد on options selected هم اجرا میشه

برگردیم تو xml خودمون اگه بخوای گزینه اول بره تو آسمون وایسه اینو می نویسی:

<item android:title="Contact us" app:showAsAction="always"/>

 به من خطا نداد که app چیه ولی اگه داد باید یه namespace app اون بالا تعریف شه (با alt enter کردن روی app)

میشه دوتا هم وایسن تو آسمون و ...

برای حرفه ای شدن تو اینا به دوره متریال دیزاین مراجعه شود

۰ نظر موافقین ۰ مخالفین ۰ ۰۹ فروردين ۹۹ ، ۱۹:۵۴
Put Yourself First

دو روش برای ساخت این منو وجود داره

۱- با xml

تو resources  کلیک راست add new resource file->menu

میخوای آیتم بهش اضافه کنی:

از تو پالت گوش آیتم رو می گیری می کشی رو منو ولش می کنی

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

حالا اینو همین طوری بذاری اجرا نمیشه باید بری تو main activity

یه متدی بسازی مثل همون onCreate (یه متد جدا و جدید و خارج از قبلیا)

می زنی oncreateoption میاره:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    return super.onCreateOptionsMenu(menu);
    }

بعد میری توش می نویسی getmuneinflater جلوشم یه . می زنی inflate

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

به این ترتیب در میاد:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.menu_main,menu);
        return super.onCreateOptionsMenu(menu);
    }

بعضی وقتا لازمه برا مثلا کسی که عضوه یه نوع منوهایی رو نشون بدیم ب بقیه ندیم می شه همه اینا رو گروپ کرد راحت  

<group android:id="@+id/groupname1"
    android:visible="false"
    >

حالا مثلا میخوای با کلیک یکی از این آیتما یه اتفاقی بیفته مثلا اسمشو Toast کنه برامون

تو جاوا main activity:

public boolean havij(MenuItem item){
        Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
        return true;
}

و توی xml منو تو اسم آیتم onclick اصفه می کنی:

<item android:title="Negar" android:onClick="havij">
</item>

که البته استاد جای havij نوشته بود itemClick

این android:onClick="havij"رو تو همه آیتمای دیگتم می تونی کپی کنی اون وقت با کلیک رو هر آیتم اسمشو می نویسه

 

راه دوم این که با کلیک یکی از این آیتما یه اتفاقی بیفته:

میری تو جاوا main activity می نویسی onOptions

و توستشم می نویسی حاصل همچین چیزی میشه:

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    Toast.makeText(this, item.getTitle(),Toast.LENGTH_SHORT).show();
    return super.onOptionsItemSelected(item);
}

دیگه از این روش که بری نیازی نیست تو xml هویج بذاری

اما اگه بخوای با آیدی تشخیص بدی رو کدوم کلیک شده بوده اولا تو xml باید براش آیدی بذاری بعدم اینو اضافه می کنی

  @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if(item.getItemId()==R.id.negaritem)
        Toast.makeText(this, item.getTitle(),Toast.LENGTH_SHORT).show();
        return super.onOptionsItemSelected(item);
    }

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۹ فروردين ۹۹ ، ۱۸:۱۱
Put Yourself First
package ir.ben.hassan;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.DragStartHelper;
import android.os.Bundle;
import android.widget.Toast;
public class two extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        Toast.makeText(this, "two OnCreate ", Toast.LENGTH_LONG).show();

    }

    @Override
    protected void onPause() {
        super.onPause();
        Toast.makeText(this, "twoOnPause ", Toast.LENGTH_LONG).show();

    }

    @Override
    protected void onStop() {
        super.onStop();
        Toast.makeText(this, "twoOnStop ", Toast.LENGTH_LONG).show();

    }

    @Override
    protected void onStart() {
        super.onStart();
        Toast.makeText(this, "twoOnStatrte ", Toast.LENGTH_LONG).show();

    }

    @Override
    protected void onResume() {
        super.onResume();
        Toast.makeText(this, "twoOnResume ", Toast.LENGTH_LONG).show();

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "twoOnDestroy ", Toast.LENGTH_LONG).show();

    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Toast.makeText(this, "twoOnRestart ", Toast.LENGTH_LONG).show();

    }
}

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

وقتی هم تو گوشی بک می زنم میره تو همون mainactivity دیگه two اول پاز بعد استپ بعدم دیستروی میشه!

یادت باشه اگه مثلا داری زمانو به کاربر نشون میدی و میخوای درست باشه باید غیر از onCreate بری تو onResume هم بنویسی تاریخو بزن(تازه اینم فقط همون سری اول که ریزوم شد کار می کنه اگه بخوای هر دقیقه آپدیت کنه باید بهش دستور بدی)

 

اینم شکل ترتیب کارایی که انجام میشه:

هی!

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ فروردين ۹۹ ، ۱۹:۵۵
Put Yourself First

با ساختن یه activity جدید سه تا چیز اضافه میشه

یه فایل جاوا

یه layout xml

یه توضیح تو manifest

 

تو منیسفت جلو اسم همه activityها یه نقطه گذاشته معنیش اینه که تو پکیج فعلی بعد تو این اکتیویتی 

اگه تو یه پکیج دیگه باشه باید قبل نقطه آدرسای پکیجه رو بنویسی

  package="ir.ben.hassan">
<activity android:name=".two"></activity>
<activity android:name="ir.ben.hassan.two"></activity>

حالا وقتی می خوای یه activity دیگه یا یه اپ دیگه فعال شه میری تو دکمه ت می نویسی:

button.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        Intent intent=new Intent(MainActivity.this,two.class);
         startActivity(intent);
        // button.setText("Yahoooo");
        return true;
    }
});

اولی مبدا، دومی مقصد.

موارد استفاده intent:

رفتن به یه activity دیگه، تماس صوتی، بازکردن یه صفحه وبسایت، بازکردن تنظیمات و...

تا حالا داشتیم با متد OnCreate کار می کردیم:

@Override
protected void onCreate(Bundle savedInstanceState) {

یه activity متدهای دیگه ای هم داره. بعد از تموم شدن OnCreate اگه بریم بنویسیم On خودش کلیاشو میاره

OnResume

OnStart

OnStop

OnDestroy

OnRestart

اینا رو تو activity دوم که می نوشتم خودش نمیاورد دستی کپی کردم و برا این که ارور نده باید @Overrideشو پاک کنی

بعدا فهمیدم: دلیل این که خودش نمیاورد on با اوی کوچیکه :|

 

 

 

#باگگگگگ :

{یه چیز عجیبم که برا من اتفاق افتاد گفتم توی pause نوشته ی توی mainActivity رو تغییر بده وقتی بر می گشتم می دیدم این نوشته تغییر کرده ولی هنوز دکمه هه مثل قبل داره رنگو عوض می کنه. دکمه هه که تو OnCreate بوده. ولی خب تو OnCreate که متنه هم تاریخ بود این همون متن OnPause مونده که :|

بالاخره داره OnCreate کار می کنه یا نه؟!}

  • طریقه خوش آمد گویی:

میری تو OnCreate زیر 

setContentView(R.layout.activity_main);

می زنی Toast و دو تا گزینه میاره توست خالیه رو می زنی:

Toast.makeText(this, "", Toast.LENGTH_SHORT).show();

این this چیزی از جنس context هست

این جا همون main activity هست

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ فروردين ۹۹ ، ۱۵:۲۴
Put Yourself First

راه آسون تر:

اصلا اون متد اضافه شده و اون implement تو خط اولو نمی نویسی

میری رو this جلو چشم OnClickListener وای میسی alt+enter می زنی 

بهت میگه توی main activity این implemenet ... کنم؟ میگی آره خودش همه اونا رو میسازه

 

اگه چنتا دکمه می خواستی برا هر کدوم یه OnClickListener میذاری(این غیربهینه است ولی حالا!)

اون جا به جای this می نویسی new On خودش میاره new OnClick Listener

 

برای این که کلی مموری نگیرن میای تو همون یه دونه متد onclicklistener می نویسی برای هر دکمه اگه اونی که کلیک شده همینه بیا کار اینو بکن

اینجا رو نتونستم چن تا دکمه بذارم باگگگگگ

 

 

حالا اگه خواستی کلیک طولانی رو بگی از OnLongClickListener استفاده می کنی

جلو باتن می نویسیش و alt+enter و ...

مثال:

button.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        button.setText("Yahoooo");
        return false;
    }
});

اگه تا همین جا بسنده کنی هر سری لانگ کلیک کنی یه کلیک هم به حسابش میاره و کارای توی کلیک هم انجام میده

برا اینکه درستش کنی return false  رو بکن true

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ فروردين ۹۹ ، ۰۲:۵۸
Put Yourself First
  • ساختن یک تابع جاوا وقتی می خوایم از یه کد هی استفاده کنیم:

refactor:

انتخابش می کنیم

refactor>extract>method

 

از همون فایل جاوا هم میشه رنگ و اینای دکمه رو تغییر داد

TextView tv= this.<TextView>findViewById(R.id.tv);
tv.setText(new Date().toString());
tv.setTextColor(Color.rgb(10, 140, 200));
tv.setTextColor(Color.LTGRAY);
tv.setTextSize(56);
tv.setVisibility(View.VISIBLE);

gone کلا برداشته میشه ولی اینویزیبل فقط مخفی میشه

Button button=findViewById(R.id.button3);
استاد نوشته :
Button button= this.<Button>findViewById(R.id.button3);

ینی alt+2enter هم زد

 

اضافه کردن ایونت مثلا کلیک شدن دکمه

 

اول تو خود xmlش میری تعریف می کنی :

android:onClick="button3OnClick"

بعد تو جاوا main activity و از دستور

button.setOnClickListener(this);

استفاده می کنی برا من بدون این this هم کار کرد!

اون خط بالا هم می نویسی

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 implements View.OnClickListener

این viewها همین آبجکت ها هستن

اینو که نوشته چن تا method لازم داری

میری رو کلمه main activity می زنی alt+enter-> implement method->set OnClickListener

اون پایین اینو میسازه

    @Override
    public void onClick(View v) {
    hoop();
    }

هوپ اون تابعه س که متدشو ساختم رنگ متنو رندم می کنه

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ فروردين ۹۹ ، ۰۲:۱۳
Put Yourself First
 package ir.ben.hassan;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Date;
import java.util.Random;

public class MainActivity extends AppCompatActivity {
    TextView tv;//= this.<TextView>findViewById(R.id.tv);
Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         tv= this.<TextView>findViewById(R.id.tv);
        tv.setText(new Date().toString());
        tv.setTextColor(Color.LTGRAY);
         button= this.<Button>findViewById(R.id.button3);
/*
        tv.setVisibility(View.INVISIBLE );
*/
    }

public void button3OnClick(View v){
        if (v.getId()==R.id.button3)
    {
        tv= this.<TextView>findViewById(R.id.tv);
        tv.setTextColor(Color.LTGRAY);

        Random random=new Random();
        tv.setTextColor((Color.rgb(random.nextInt(256),random.nextInt(256),random.nextInt(256))));
    }


}


}
توی xml ش هم :

android:onClick="button3OnClick"

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ فروردين ۹۹ ، ۰۰:۱۱
Put Yourself First
اگه شبیه ساز و بیلدت طول کشید تو گریدل پروژه (نه گریدل اپ)
برو دو تا         jcenter()
 نوشته بکنش mavenCentral()

allprojects {
    repositories {
        google()
        jcenter()
        
    }
}



activity main xml:

Relative Layout 
Linear Layout vertical horizental 

android:text="@string/my_name"

component tree

android:paddingLeft="15dp"


android:layout_alignParentLeft="true"

android:layout_alignParentStart="true"

android:textSize="30sp"
android:textColor="#aaaa0b00"


دو رقم سمت چپ آلفا opacity =شفافیت ۰۰ نامرئی ff پررنگ (پیش فرض)

استفاده از یک چیز در جاوا
یا استاتیک است یه رفرنس ازش می گیریم
یا نیست یه instance ازش باید داشته باشی


دو نوع R
اونایی که خودش داره android.R

اونایی که ما از بیرون آوردیم R

TextView tv=findViewById(R.id.tv);

ارور میده ارور کست شدن
و textview از view اکستنت شده پس میایم cast می کنیمش:
TextView tv= this.<TextView>findViewById(R.id.tv);


برا cast کردن هم راحته- می ریم رو find وای میسیم alt با دو تا اینتر می زنیم خودش کست می کنه

TextView tv= this.<TextView>findViewById(R.id.tv);
tv.setText(new Date().toString());


 

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ فروردين ۹۹ ، ۰۰:۱۰
Put Yourself First

سلام

یک عدد خوشحال هستم 

این جا چیزایی که از سایت فرادرس یاد می گیرم رو می نویسم که بتونم مرور کنم 

سال ها دلم میخواست یاد بگیرم و فرصت نمیشد خدا به این سایت فرادرس و استاد علیزاده خیر بده

آمین :)

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ فروردين ۹۹ ، ۰۰:۰۸
Put Yourself First