android

SEARCH

  • GRIDE LAYOUT (FILE J)

اکتیوی ها از کلاس AppCompatActivity ارث میبرند

    TextView tv ;
    Button bt;

متغیر های tv و bt از نوه تکست و دکمه هستند،

setContentView

نحتوای layout رو نشون میده که در فایل های xml هستند

نحوه دسترسی به ریسورس ها

در جا وا از سریق کلاس R

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

setContentView(R.layout.activity_main);
... findViewById( R.id.textView );
//...............
@string/textText
//...............
@drawble/icon123 //<- file icon123.png tuye res/drawble hast

در مورد اول در کد جاوا میگیم که از layout اکتوتی اصلی رو میخواییم

و در مورد دوم میگیم برو به فایل strings و امتن اونی که اسمش textText هست رو بیار واسمون

id

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

و بعدا برای اضافه کردن خاصیت جدید به این المنت از طریق همین id باید اقدام کنیم

android:id="@+id/button"

findViewById

وقتی میخواییم به خصوصیات به شی دسترسی داشته باشیم با ایتن تابع و از طریق ایدی که در مرحله قبل ست کردیم میتوانیم یک instance از شی را برگدانیم

package com.example.ali.myapplication2;

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

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    TextView tv ;
    Button bt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt = findViewById( R.id.button );
        bt.setOnClickListener( this );
        tv = findViewById( R.id.textView );
    }

    @Override
    public void onClick(View view) {
        tv.setText("dsdsdsd");
    }
}

Intetnt

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

اول یک کلاس نمونه به همراه پاس دادن یک ابجکت از اون رو میسازیم؛

و سپس استارت میکنیم

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent);

برای فرستادم مقادیر از یک اکتیویتی به یک اکتیویتی دیگر باید مقادر را putExtra کنیم

و برای دیفات در یک اکتیویتی باید آنرا get کنیم

این دو فایل دیده شود

همچنین برای چک کردن اینکه کلید همراه intent ارسال شده و وجود داره یا نه:

Bundle extras = getIntent().getExtras()
if( extras.containsKey("test") )
{
	extras.getString("phone");
}

iintent call activity with code

برای فراخوانی یک اکتیویتی بطوری که قابل شناسایی باشد، یعنی برای یک کاری صدا کنیم و منتظر جواب بمانیم، باید یک کد به اکتیویتی ارسال کنیم

--	//startActivity(intetnt);
++	startActivityForResult(intetnt,SUCCES_CODE);

ودر اکتیویتی ای که فراخوانی میشود باید توسط setResult یک مقادر return کنیم و سپس اکتیوی را finish کنیم

SEE

setResult(50);
finish();

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

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

see

Intent intent = new Intent();
intent.putExtra("DATA","SALAM1");  
setResult(50,intent);
finish();

lifeCircle

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

life Circle

menu (file E)

دو نوع منو داریم یکی آپشن و یکی هم متریال؟!

برای ایجاد آپشن روی res کلیک راست میکنیم و ادد ریسوزس میزنیم و منو رو انتخاب میکنیم

با اینکار یک افایل xml به ریسورس اضافه میشه که شامل منو هست و میتونیم منو و ساب منو و گروه اضافه کنیم

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

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

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

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

getMenuInflater().inflate(R.menu.menu_main,menu);

که یه رفرنس به فایل ریسوسر منو و اسم منو میدیم که باعث میشه اون رو توی اکتیویتیمون لود کنه

هر وقت هرکد.م از آیتم ها لکلیک بشن تابع زیر به صدا در میاد

onOptionsItemSelected

توی این تابع باید آیدی هر Itam که اومده رو بگیریم، و به این متوجه میشیم روی کدوم Item کلیک شده

    public boolean onOptionsItemSelected(MenuItem item) {
        if( item.getItemId() == R.id.alakiToast ){
            Toast.makeText(this, "alaki!", Toast.LENGTH_LONG).show();
        }else
        {
            Toast.makeText(this, "vaghei!", Toast.LENGTH_LONG).show();
        }
        return super.onOptionsItemSelected(item);
    }

برای ادد کردم منو به شکل برنام نویسی :

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("item1");
		SubMent item2 = menu.addSubmenu("item2");
		item2.add("sub item2");
        return super.onCreateOptionsMenu(menu);
    }

editText

code

		//global
		EditText et ;
		//main
        et = findViewById(R.id.etTest);
        et.setOnFocusChangeListener(this);
        TextWatcher textWatcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                tv.setText(  charSequence );
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        };
        et.addTextChangedListener(textWatcher);
		
		
		
	@Override
    public void onFocusChange(View view, boolean b) {
        String s = "Hii";
        if (view.getId() == R.id.etTest){
            s = "Byyy";
        }
        if (b) s="sick";
        Toast.makeText(this, s  , Toast.LENGTH_SHORT).show();
    }

دریافت متن و ست کردن متن

 String s = et.getText().toString();
 et.setText(TEXT);

xml (layout)

بعد ازاینکه لایه ها رو ساختیم برای اکتیویتی میتوانیم یک لایه را در یک لایه دیگه Include کنیم

برای اینکار در فیال xml از دستور include استفاده میکنیم

<include layout="@layout/NAME_FILE_XML" 
	android:id="@+id/id_layout"/>

handle activiti with class

See

برای اینکه بتوانیم متدهای اجزای سازنده اکتیویتی را تحت کنترل در بیاوریم، باید از geter ها استفاده کنیم

See

به وسیله آن میتوانیم رفتار اجزا را تعیین و یا overide کنیم

OPEN Intent (SMS,PHON) (FILE I)

Intent intent = new Intent( Intent.ACTION_VIEW );
intent.SetData( Uri.parse("sms:+1234456") );
startActivity(intent);

home

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

line25

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

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

line 43

if(item.getItemId() == android.R.id.home)
{
	finish();
}

animation

code

برای اینکه آلفای یک تصویررا به صفر برسانیم و اینکار طی یک مدت زمانی انجام شود

نکته اینکه عدد 0f به معنی 0 در مبنای float هست اگر 0.0 بزاریم double حساب میشود و خطا میدهد

	iv.animate().alpha(0f).setDuration(2000);

حرکت افقی و عمودی ؛ در کد اول حرکت در y نسبی است و در کد دوم میره دقیقا به 50

	iv.animate().translationYBy(50).setDuration(2000);
	//------
	iv.animate().translationY(50).setDuration(2000);

چرخش

	iv.animate().rotation(90f).setDuration(2000);
	iv.animate().rotationBy(90f).setDuration(2000);

تغییر عکس

ImageView iv = findbyid(...)
iv.SetImageResource(R.drawable.axname);

والد فرزند

	LinearLayout L = findViewById(R.id.LID);
	L.getChildCount(); // <-- tedad farzand
	L.getChildAt( i ); // <--  farzand i'om

video view

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

	VideView vv = findById(R.id.videview);
	vv.setVideoPath( "android.resource://"  + getPackageName() + R.raw.videofilename );
	vv.start();

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

	VideView vv = findById(R.id.videview);
	vv.setVideoPath( "android.resource://"  + getPackageName() + R.raw.videofilename );
	
	MediaController c = new MediController(this);
	
	c.setAmchorView(vv);
	vv.SetMediaController( c );	
	
	vv.start();

audio

	MediaPlayer mp = MediaPlayer.create( this, R.raw.audiofile );
	mp.start();
	mp.pause();
	mp.isPlayeing();
	mp.getDuration(); //<- modat zamane ahang 

خواندن volume دستگاه

اول یک ابجکت ایجاد میکنیم و سپس بهش میگیم که بمیخواهیم وصل بشیم به volume سیستم

	AudioManager audioManager;
	audioManager = getSystemService(Context.AUDIO_SERVICE);
	int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
	int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
	
	audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, NUMBER , 0); // <-set deviice volume
	

در کد پایین از طریق fromUser میتونیم متوجه بشیم اندروید در حال دستکاری در سیک بار هست و یا یوزر داره باهاش بازی میکنه

اگر مقدار true بود یعنی یوزر داره کار میکنه باهاش

seekBar

	SeekBar sb  = findById(...);
	sb.setProgress(10);
	sb.setMax(100);
	
	sb.setOnSeekBarChangeListener(this);
	sb.setOnSeekBarChangeListener( new  SeekBar.OnSeekBarChangeListener(){
		@Override
		public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
			// change volume
			//progress <- adade seek bar
			
			// audioManager da r bala tashrih shode
			audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); 
		}

		@Override
		public void onStartTrackingTouch(SeekBar seekBar) {}
		@Override
		public void onStopTrackingTouch(SeekBar seekBar) {}
	});

DIALOG

progress bar

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

ProgressDialog pd = new ProgressDialog(this);

قابلیت کنسل کردن توسط کاربر را غیر فعال میکنیم،

pdialog.setCancelable(false);

ست کردن متن و عنوان

pdialog.setTitle("progress dialog example");
pdialog.setMessage("please wait ...");

ست کردن استایل

pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

نمایش دادن دیالوگ

pdialog.show();

بستن دیالوگ

pdialog.dismiss();

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

که میتوانیم نوار پیمایش را کنترل کنیم

pdialog.setProgress(0);
pdialog.getMax()
pdialog.incrementProgressBy(1)

نوار هیچ پیشرفتی نمیکند و حالت نا مشخص میگیرد

pdialog.setIndeterminate(true);

همچنین یک حالت دیگری هم داریم که بنام پروگرس بار دوم

که میشه یک progressbar زیر اونیکی؛ مثلا برای مواقعی که فیلم در حال دانلود هست و بافر در حال پر شدن هست …

pdialog.getSecondaryProgress();
pdialog.incrementSecondaryProgressBy(1);

Alert

برای نشان دادن یک هشدار

یک هشدار با دکمه های yes و no و cancel نشان میدهد که در صورتی که کاربر yes انتخاب کرد یک پیام نشان میدهد

final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("AlertDialog")
		.setMessage("MSG")
		.setCancelable(false)
		.setIcon(android.R.drawable.ic_dialog_info)
		.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialogInterface, int i) {
				Toast.makeText(DialogActivity.this, "File Deleted!", Toast.LENGTH_SHORT).show();
			}
		})
		.setNegativeButton("No", null)
		.setNeutralButton("Cancel", null);

چند گزینه ای که فقط میشه یک گزینه انتخاب کرد

builder.setTitle("Question ?")
		.setCancelable(false)
		.setSingleChoiceItems(new String[]{"A", "B", "C", "D"}, -1, new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialogInterface, int i) {
				Toast.makeText(DialogActivity.this, "i = " + i, Toast.LENGTH_SHORT).show();
			}
		})
		.setPositiveButton("OK", null);

چند گزینه ای که میشه چندین گزینه انتخاب کرد

builder.setTitle("")
		.setCancelable(true)
		.setMultiChoiceItems(new String[]{"item0", "item1", "item2", "item3", "item4", "item5"},
				new boolean[]{false, true, false, true, true, false},
				new DialogInterface.OnMultiChoiceClickListener() {
					@Override
					public void onClick(DialogInterface dialogInterface, int i, boolean b) {
						Toast.makeText(DialogActivity.this, "item" + i + " : " + b, Toast.LENGTH_SHORT).show();
					}
				})
		.setPositiveButton("Ok", null);



builder.show();

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

Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.play_ground);
dialog.show();

List view

مثال

برای ساخت لیست یه 3 چیز نیازمندیم

  • لیست آیتم ها
  • لیست ویو اندروید
  • و اداپتر

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

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

List<String> items;

items = new ArrayList<>();
items.add("Tehran");
items.add("Mashhad");
items.add("Isfahan");
items.add("Shiraz");

ListView listview;
listview = (ListView) findViewById(R.id.listview);


ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

listview.setAdapter(adapter);

و همچنین میتوانیم برای کلیلک کردن روی هرکدام از آنها یک تابع تعریف کنیم…

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
	@Override
	public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
		Toast.makeText(SimpleListActivity.this, items.get(i), Toast.LENGTH_SHORT).show();
	}
});

برای اضافه کردن و حذف گزینه ها که بدن شکل میباید که عنصر مورد نظر را از ایتم ها حذف میکنیم و سپس اداپتر را به روز رسانی میکنیم تا ویو را دوباره بسازد

items.add("new item");
adapter.notifyDataSetChanged();
//------------------------------------
items.remove(items.size()-1);
adapter.notifyDataSetChanged();

استفاده از کلاس در لیست ویو

یک کلاس تعریف میکنیم تا اجزای کلاس را بر اساس ان تعریف کنیم

کد کلاس

public class MyContacts {
    private String name;

    public MyContacts(String name){
        setName(name);
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Hi: " + name;
    }
}

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

کد

نکته مهم در تعریف کلا متد toString هست که باید تعریف بشه

متد toString

listViewContacts-1

ساختن لیست ویو اختصاصی

این کامیت دیده شود

برای اینکار یک اکتیویتی جدید ایجاد مکنیم و تمام اجزایی که میخواهیم را ایجاد میکنیم

listviewdesgin

سپس یک کلاس همانند ایحاد میکنیم تا از این اکتیوتی بعنوان لایه برای لیست ویو استفاده کند

کلاس مورد نظر

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

در کلاس توسط متد getView باید یک ویو برگردانیم؛ در ابتدا یک LayoutInflater ایجاد میکنیم و سپس به layout خودمون که ایجاد کرده بودیم متصل میکنیم

کد مورد نظر

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater lif = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = lif.inflate(R.layout.listviewdesgin,parent,false);
        ImageView I = v.findViewById(R.id.imageView2);
        I.setImageResource(R.drawable.an);
        return v;
    }

پارامتر convertView در تابع getView به ویو ها اشاره میکند

برای مثال اگر قبلا یک ویو دسرت کرده باشیم و return کرده باشیم، در بار بعدی که اسن تابع برای همون شی فراخوانی میشه، مقدار convertView به همان شی اشاره میکند

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

اگر خالی باشد Null برمیگردونه در غیر اینصورت میفهمیم که ویو قبلا ساخته شده

listViewContacts-2

LayoutInflater

فایل o دقیقه 1:16 دیده شود

از چیزی که جنس جاوا هست یک ویو از جنس inflater تحویل میدهد

handler && timer

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

new Handler().postDelayed(new Runnable(){

	@override
	public void run(){
		//process
	}

} , 10000L );

توسط تایمر یک فرایند را هی تکرار میکنیم

گزینه Delay یعنی با تاخیر انجام بده

new Timer().scheduleAtFixedRate(new TimerTask() {
	@Override
	public void run() {
		//process
	}
}, /*Delay:*/ 0,  /*duration:*/ 200);

Toast

میتوانیم toast ها را شبیه کانفیگ کنیم

Toast toast = Toast.makeText(this, "Test Color For Toast", Toast.LENGTH_LONG);
toast.getView().setBackgroundColor(0x7ff44436);
toast.show();

برای ایجاد از روی لایه ها باید یک Inflat بسازیم

this.context = context;
this.toast = new Toast(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.view = inflater.inflate(R.layout.colored_toast_layout, null);
toast.setView(view);

سپس به اجزای اون لایه از طریق view دسترسی داریم و در نهایت tast را show میکنیم

Spinner

برای نشان دادن یک لیست DropDown است

simpleSpinner = (Spinner) findViewById(R.id.simple_spinner);
simpleItems = getResources().getStringArray(R.array.tours);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, simpleItems);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
simpleSpinner.setAdapter(adapter);

که میتوانیم توسط Inflater هم انزا کاستومایز کنیم

package org.faradars.firstproject;

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 CountrySpinnerAdapter extends BaseAdapter {

    private Context context;
    private int[] flags;
    private String[] names;
    private LayoutInflater inflater;
    public CountrySpinnerAdapter(Context context, int[] countryFlagIds, String[] countryNames){
        this.context = context;
        this.flags = countryFlagIds;
        this.names = countryNames;
        inflater = LayoutInflater.from(context);
    }


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

    @Override
    public Object getItem(int i) {
        return names[i];
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        ViewHolder holder;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.custom_spinner_item, viewGroup, false);
            holder = new ViewHolder();
            holder.country_flag = (ImageView) convertView.findViewById(R.id.country_flag);
            holder.country_name = (TextView) convertView.findViewById(R.id.country_name);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.fill(position);
        return convertView;
    }


    public class ViewHolder{
        public ImageView country_flag;
        public TextView country_name;

        public void fill(int position){
            country_flag.setImageResource(flags[position]);
            country_name.setText(names[position]);
        }
    }
}

و یک ایجاد کننده میسازیم

private void initCustomSpinner() {
	customSpinner = (Spinner) findViewById(R.id.custom_spinner);
	final CountrySpinnerAdapter adapter = new CountrySpinnerAdapter(this, countryFlags, countryNames);
	customSpinner.setAdapter(adapter);
	customSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
		@Override
		public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
			Toast.makeText(SpinnerActivity.this,
					(String) adapterView.getSelectedItem(),
					Toast.LENGTH_SHORT).show();
		}

		@Override
		public void onNothingSelected(AdapterView<?> adapterView) {

		}
	});
}
© 2019 - 2023 · Blog ·