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

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

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

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

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

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

۲۸ مطلب در فروردين ۱۳۹۹ ثبت شده است

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

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

alert dialog 

progress dialog

 

باگ  handler چیه؟ چرا وقتی یه هندلر میذارم تو یه تایمر کرش می کنه؟

نکته setprogress رو اگه قبل show بذاری هیچی به هیچی! باید بعدش بذاری

package ir.ben.frog;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;

import java.util.Timer;
import java.util.TimerTask;

public class dialog extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
    }
 public void custmzd(View view)
 {
     Dialog dd=new Dialog(this);
     dd.setTitle("This I made myself");
    // dd.setContentView(R.layout.activity_dialog);
     dd.setContentView(R.layout.havij);//this can cause to make lots of dialogs on top of each other!
     dd.show();
 }
public void Multichoice(View view)
{
    final String[] opt=new String[] {"Salad", "Bread", "Drink", "Jelly"};
        AlertDialog.Builder bmc=new AlertDialog.Builder(this);
        bmc.setTitle("Do you want?")
                .setPositiveButton("OK",null)
                .setMultiChoiceItems(opt, new boolean[]{false, true, false, true}, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        if(isChecked)
                        Toast.makeText(dialog.this, opt[which]+" is chosen", Toast.LENGTH_SHORT).show();
                        else
                            Toast.makeText(dialog.this, opt[which]+" is deleted", Toast.LENGTH_SHORT).show();
                    }
                });

        bmc.show();
}
    public void alertchoicedial(View view)
    {
        AlertDialog.Builder bcd=new AlertDialog.Builder(this);
        //bcd.setMessage("Please Choose:") it substitutes the choices

          bcd.setTitle("Please choose")
                  .setCancelable(false)
                  .setPositiveButton("OK",null)
                  .setSingleChoiceItems(new String[]{"A", "B", "C"}, -1, new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialog, int which) {
                          Toast.makeText(dialog.this, "Item "+which+" is chosen", Toast.LENGTH_SHORT).show();
                      }
                  });
          AlertDialog add=bcd.create();//If you want to say dismiss you can use this line,I couldn't get it work btw!
        bcd.show();

    }
    public void alertdial(View view)
 {
     AlertDialog.Builder bd=new AlertDialog.Builder(this);
     bd.setTitle("OH")
        .setMessage("SURE?")
        .setCancelable(false)
        .setIcon(android.R.drawable.ic_menu_delete)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(dialog.this,which+ "I delete the file", Toast.LENGTH_SHORT).show();
            }
        })
        .setNegativeButton("No",null)
        .setNeutralButton("cancel",null);
     bd.show();
 }

 public void progrs(View view)
 {
     final ProgressDialog pd=new ProgressDialog(this);
     pd.setCancelable(true);
     pd.setTitle("Hey");
     pd.setMessage("Question?");
     pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  //   pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
  ////   pd.setIndeterminate(true);
     pd.show();
     pd.setProgress(10);
     pd.setSecondaryProgress(14);
     new Timer().scheduleAtFixedRate(new TimerTask() {
         @Override
         public void run() {
             if(pd.getProgress()<pd.getMax())
                 pd.incrementProgressBy(1);
             else
             {
                 pd.dismiss();
                /* new Handler().postDelayed(new Runnable() {
                     @Override
                     public void run() {
                         pd.dismiss();
                     }
                 },1000L);*/
             }


         }
     }, 0, 50L);

     new Timer().scheduleAtFixedRate(new TimerTask() {
         @Override
         public void run() {
         //////    if(pd.getSecondaryProgress()<pd.getMax())
                 pd.incrementSecondaryProgressBy(1);
         }
     }, 0, 20L);


/*     new Handler().postDelayed(new Runnable() {
         @Override
         public void run() {
                pd.dismiss();
         }
     },1000L);*/
 }
}


 

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

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

import java.util.Timer;
import java.util.TimerTask;

public class audplayer extends AppCompatActivity implements View.OnClickListener {
    MediaPlayer mp;
    SeekBar volbar,scroll;
    AudioManager mang;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audplayer);
        volbar =findViewById(R.id.seekBar);
        scroll=findViewById(R.id.scroll);
        mp= MediaPlayer.create(this,R.raw.demoaudio);

        //////Audio manager
        mang= (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        int maxvol=mang.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curvol=mang.getStreamVolume(AudioManager.STREAM_MUSIC);

        scroll.setMax(mp.getDuration());
        scroll.setProgress(0);
        new Timer().scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                scroll.setProgress(mp.getCurrentPosition());

            }
        },0,100);

        scroll.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(mp!=null && fromUser)
                mp.seekTo(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        volbar.setMax(maxvol);
        volbar.setProgress(curvol);


        mp.start();

        volbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                mang.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }

    @Override
    public void onClick(View v) {

    }
}

 

۰ نظر موافقین ۰ مخالفین ۰ ۳۰ فروردين ۹۹ ، ۰۷:۰۶
Put Yourself First
package ir.ben.frog;

import androidx.appcompat.app.AppCompatActivity;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;

public class audplayer extends AppCompatActivity implements View.OnClickListener {
    MediaPlayer mp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audplayer);
        Button playb=findViewById(R.id.playb);
        Button pausb=findViewById(R.id.stopb);
        mp= MediaPlayer.create(this,R.raw.demoaudio);
        mp.start();
        playb.setOnClickListener(this);
        pausb.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id.playb:
                mp.start();
                break;
            case R.id.stopb:
                if(mp.isPlaying())
                    mp.pause();
                else
                    mp.start();
                break;
            default:break;
        }
    }
}
package ir.ben.frog;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

public class audplayer extends AppCompatActivity implements View.OnClickListener {
    MediaPlayer mp;
    SeekBar volbar,scroll;
    AudioManager mang;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audplayer);
        Button playb=findViewById(R.id.playb);
        Button pausb=findViewById(R.id.stopb);
        volbar =findViewById(R.id.seekBar);
        scroll=findViewById(R.id.scroll);
        mp= MediaPlayer.create(this,R.raw.demoaudio);

        //////Audio manager
        mang= (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        int maxvol=mang.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curvol=mang.getStreamVolume(AudioManager.STREAM_MUSIC);

        volbar.setMax(maxvol);
        volbar.setProgress(curvol);


        mp.start();
        playb.setOnClickListener(this);
        pausb.setOnClickListener(this);

        volbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                mang.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }

    @Override
    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id.playb:
                mp.start();
                break;
            case R.id.stopb:
                if(mp.isPlaying())
                    mp.pause();
                else
                    mp.start();
                break;
            default:break;
        }
    }
}

skb.setProgress(120); skb.setMax(150); mang.setStreamVolume(AudioManager.STREAM_MUSIC,progress,0);

 

get system service 

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

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

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);
        VideoView vvv=findViewById(R.id.videoView);
        vvv.setVideoPath("android.resource://"+getPackageName()+"/"+R.raw.demovideo);
        MediaController mp=new MediaController(this);
        mp.setAnchorView(vvv);
        vvv.setMediaController(mp);
        vvv.start();
    }
}

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

باگ

اول میگه can’t play this video بعد شروع میکنه پلی میکنه!! 

باگ

کنترلر برا من نمیاد که

<?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:background="#FFEB3B"
    tools:context=".VideoActivity">

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        />
</RelativeLayout>

بعد نوشت : شکر خدا با آپدیت کردن باگا حل شد الان فیلم استادو پخش می کنه ولی به پت و مت باگ میده! با این مسخره بازیشون. کنترلر هم عقب جلو می زنی درست نمیره

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

Prepare video clip

According to the documentation, Android should support mp4 H.264 playback (decoding) for all API levels. However, there seem to be a lot of factors that affect whether an actual video will play or not. The most in depth answer I could find that told how to encode the videos is here. It uses the powerful ffmpeg command line tool to do the conversion to something that should be playable on all (hopefully?) Android devices. Read the answer I linked to for more explanation. I used a slightly modified version because I was getting errors with the original version.

ffmpeg -y -i input_file.avi -s 432x320 -b:v 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -c:a aac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -strict -2 output_file.mp4

I would definitely read up a lot more on each of those parameters to see which need adjusting as far as video and audio quality go.

Next, rename output_file.mp4 to test.mp4 and put it in your Android project's /res/raw folder. Create the folder if it doesn't exist already.

 

ایشونه گفته

https://stackoverflow.com/questions/3263736/playing-a-video-in-videoview-in-android

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

آقا! این دایرکتوری یه چیز دل به خواهی نیس که هر کی برا خودش یکی بسازه

میخوای دایرکتوری ایجاد کنی باید بری تو res بزنی new Android Resource Directory تا بیاره!

 

چهار ساعته من دارم کف نتو می گردم و آخر فهمیدم خود ویدئوهه compatible نبوده با این که میگه هستم، دروغ میگه و دروغگو سگه 

باید با VLC player به فرمت جدیدی تبدیلش کنی

https://stackoverflow.com/questions/24730087/cant-play-this-video-android-videoview-mp4-recorded-by-android-device 

 

اینجا ملت تونستن منم یه کانورتی کردم ولی صدا نداشت چون VLC playerم مال ۲۰۱۶ بود ایشالا اگه عمری بود این ارور مزخرفو سرجاش میشونم ! خر خر خر !!

خطای Can't play this Video در اندروید استودیو  VideoView

 

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

دیگه فقط مونده عکسای کدهای استاد. اینم انجام نمیدم همین جوری میذارمش بمونه.

 

باگ فرق padding  و margin چیه؟

مارجین از دورش فاصله میذاره پدینگ مثلا پدینگ 10dpدادی میاد به اندازه ۱۰ تا از توی خودش کوچیکتر میشه ولی اون ۱۰ تای دورش جزو تصویره

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

 

مدل دیگر for زدن روی آرایه

winpos یک آرایه دو بعدی است

    private void checkwinner() {

        for(int[] j:winpos){

            if(fl[j[0]]!=empty && fl[j[0]]==fl[j[1]] &&fl[j[1]]==fl[j[2]])
            {
                String happy=(turn==rng)?"Orange":"Blue";
                TextView khosh=findViewById(R.id.newstext);
                khosh.setText("Player "+happy+" Won!");
                findViewById(R.id.news).setVisibility(View.VISIBLE);
                return;
            }
        }
    }
۰ نظر موافقین ۰ مخالفین ۰ ۱۴ فروردين ۹۹ ، ۱۳:۲۵
Put Yourself First

آخیش! پروژه تموم میشه آدم خستگی از تنش در میاد خدایا شکرت:)

فایل game.xml

<?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:orientation="vertical"
    tools:context=".game">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="360dp"
        android:id="@+id/goodlayout"
        android:background="@drawable/grid"
        android:backgroundTint="#FFEB3B"
        android:layout_centerInParent="true"
        android:orientation="vertical">

        <LinearLayout
 android:paddingBottom="8dp"
            android:paddingTop="8dp"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="0"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="1"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="2"
                tools:srcCompat="@drawable/bl" />
        </LinearLayout>

        <LinearLayout
            android:paddingBottom="8dp"
            android:paddingTop="8dp"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="3"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="4"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="5"
                tools:srcCompat="@drawable/bl" />
        </LinearLayout>

        <LinearLayout
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="6"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="7"
                tools:srcCompat="@drawable/bl" />

            <ImageView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:onClick="putbutton"
                android:tag="8"
                tools:srcCompat="@drawable/bl" />
        </LinearLayout>
    </LinearLayout>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="160dp"
    android:id="@+id/news"
    android:layout_marginLeft="80dp"
    android:layout_marginRight="80dp"
    android:background="#FFC107"
    android:layout_centerInParent="true">

    <TextView
        android:id="@+id/newstext"
        android:textAlignment="center"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:layout_centerHorizontal="true"
        android:text="Hey!!" />

    <Button
        android:id="@+id/button"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/newstext"
        android:layout_width="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_height="50dp"
        android:text="Play Again!"
        android:onClick="restart"
        />
</RelativeLayout>

</RelativeLayout>

فایل game.java

package ir.ben.frog;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class game extends AppCompatActivity {
   public static final int empty=0,rng=1,blu=2;
    int turn=rng,sum=0;
    int [] fl={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    int[][] winpos={{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem resst = menu.add("New Game");
        resst.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        resst.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                restart(null);
                return false;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if (item.getItemId() == android.R.id.home)
            finish();
        return super.onOptionsItemSelected(item);
    }


    public void putbutton(View v) {
        ImageView img= (ImageView) v;

        int pos=Integer.parseInt((String) v.getTag());
        if(fl[pos]!=empty)
            return;

        if(turn==rng)
                img.setImageResource(R.drawable.or2);
        else
                img.setImageResource(R.drawable.bl);
        fl[pos]=turn;
        checkwinner();
        turn=rng+blu-turn;
        sum++;
        if(sum==9)
        {
            TextView xxx=findViewById(R.id.newstext);
            xxx.setText("DraW!");
            findViewById(R.id.news).setVisibility(View.VISIBLE);
        }
    }

    private void checkwinner() {
        for(int j=0;j<winpos.length;j++)
        {
            if(fl[winpos[j][0]]!= empty && fl[winpos[j][0]]==fl[winpos[j][1]] && fl[winpos[j][1]]==fl[winpos[j][2]])
            {
                String happy=(turn==rng)?"Orange":"Blue";
                TextView khosh=findViewById(R.id.newstext);
                khosh.setText("Player "+happy+" Won!");
                findViewById(R.id.news).setVisibility(View.VISIBLE);
                return;
            }
        }
    }

    public void restart(View view) {
        findViewById(R.id.news).setVisibility(View.GONE);
        for(int j=0;j<10;j++)
            fl[j]=0;
        sum=0;
        turn=rng;
        LinearLayout biglay=findViewById(R.id.goodlayout);//cast
        for(int i=0;i<biglay.getChildCount();i++)
        {
            LinearLayout lay= (biglay.getChildAt(i) instanceof LinearLayout)? (LinearLayout) biglay.getChildAt(i) :null;
            if(lay==null) return;
            ImageView heh;
            for(int j=0;j<lay.getChildCount();j++)
            {
                heh= (lay.getChildAt(j) instanceof ImageView)? (ImageView) lay.getChildAt(j) :null;
                if(heh==null)return;
                heh.setImageResource(0);
            }
        }

    }


}

خدایا چقد اسکل شده بودم یه جا که به خاطر این که fl[pos] به جاش نوشته بودم pos هی کار نمی کرد تو winner 

یه جا هم موقع مقدار دهی fl که میخواستم همه رو صفر بذارم فقط fl[0] صفر شده بود اینم اولین زخمی که از جاوا خوردم!

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

تو فایل xml یه onclick گذاشتم:

    <ImageView
        android:id="@+id/sid"
        app:srcCompat="@drawable/sid"

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:scaleType="fitCenter"
        android:alpha="1"
        android:onClick="dance"
        />

و اون dance تو havij.java رو public کردم:

package ir.ben.frog;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;

public class havij extends AppCompatActivity {
    ImageView photo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.havij);

        photo=findViewById(R.id.sid);//instructor cast
        photo.setAlpha(0f);
     // photo.setTranslationX(-300);         dance(photo);
        if(getSupportActionBar()!=null)
        {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if(item.getItemId()==android.R.id.home)
            finish();
        return super.onOptionsItemSelected(item);
    }


    public void dance(View v) {

        v.animate().alpha(1f-v.getAlpha()).setDuration(1500);

    }
}

چن تا انیمیشن دیگه:

    public void dance(View v) {
        v.animate().scaleX(-0.2f).scaleYBy(-0.2f).setDuration(1000);
    //  v.animate().rotationBy(180f).setDuration(1000);
    //  v.animate().rotationXBy(180f).rotationYBy(180f).setDuration(1200);
    //  v.animate().translationYBy(100).translationXBy(200).setDuration(1000);
    }
}

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

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

آبی پررنگه دکمه بازگشت میذاره تو اکشن بار

فایل havij.java

package ir.ben.frog;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;

public class havij extends AppCompatActivity implements View.OnClickListener {
    ImageView photo;
    ImageView photo2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.havij);

        photo=findViewById(R.id.kola);//instructor cast
        photo2=findViewById(R.id.babe);
        photo.setOnClickListener(this);
        photo2.setOnClickListener(this);
        if(getSupportActionBar()!=null)
        {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if(item.getItemId()==android.R.id.home)
            finish();
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
     //   if(v.getId()==photo.getId())
            dance();
    }

    private void dance() {

        photo.animate().alpha(1f-photo.getAlpha()).setDuration(2000);
        photo2.animate().alpha(1f-photo2.getAlpha()).setDuration(2000);

    }
}

فایل havij.xml

<?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=".havij">


    <ImageView
        android:id="@+id/kola"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:scaleType="fitCenter"
        android:alpha="1"
        app:srcCompat="@drawable/kola" />

    <ImageView
        android:id="@+id/babe"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:scaleType="fitCenter"
        android:alpha="0"
        app:srcCompat="@drawable/babe" />
</RelativeLayout>

آلفا عددی بین صفر و یک که نشونن میده عکس چقد معلوم باشه یک معلوم صفر نامرئی

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

زمان میلی ثانیه

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

فایل grid.xml

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


    <View
        android:id="@+id/view3"
        android:layout_columnSpan="2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        android:layout_row="0"
        android:background="@color/chamani"
        android:layout_column="0" />

    <View
        android:id="@+id/view4"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_row="1"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:background="@android:color/holo_orange_dark"
        android:layout_column="0" />

    <View
        android:id="@+id/view5"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_row="1"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:background="#00BCD4"
        android:layout_column="1" />
</GridLayout>

حاصل عکس حاصل ۲

البته برا من که تو ایمولاتور نیمدش- فقط تو همون صفحه پیش نمایش خودش اومد

ظاهرا این مشکل مردم دیگه هم بوده باید به جای GridLayout خالی بنویسی android.support.v7.widget.GridLayout و یکی دو تا چیز تو کامپایلر تغییر بدی که به دردسرش نمی ارزه اصلا من چرا خودمو گیر این چیز بیخود انداختم سه ساعته؟!

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ فروردين ۹۹ ، ۲۱:۵۱
Put Yourself First
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        SubMenu subb=menu.addSubMenu("Gallery");
        subb.add("Photos").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
                return false;
            }
        });
        subb.add("Films");
        SubMenu askus=menu.addSubMenu("Ask us");
        askus.add("Call").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("tel:09123456789"));
                startActivity(intent);
                return false;
            }
        });

وقتی میخوای تو اصلیا باشه می زنیMenuItem name=menu.add("string")

وقتی بخوای خودش یه زیرمنو باشه مثل بالا می زنی دیگه

نتیجه: عکس حاصل ۱

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

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

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

public  class MainActivity extends AppCompatActivity {
    public static final int reqcod=24;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final FormInfo form=new FormInfo(this,R.id.forminfo);
        form.getBtsub().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name=form.getInputname().getText().toString().trim();
                String phone=form.getInputphone().getText().toString().trim();
                String email=form.getInputemail().getText().toString().trim();

                if(form.isvalidinput(name,phone,email))
                {
                    Intent intent= new Intent(MainActivity.this,two.class);
                    intent.putExtra("name",name);
                    intent.putExtra("email",email);
                    if(form.getCbshare().isChecked())
                    intent.putExtra("phone",phone);
                    startActivityForResult(intent,reqcod);

                }
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==reqcod)
        {
            if(resultCode==RESULT_OK)
            {
                Toast.makeText(this, "messge", Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        menu.add("Open Browser").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://blog.ir"));
                startActivity(intent);
                return false;
            }
        });

        menu.add("Send sms").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("sms:09123456789"));
                intent.putExtra("sms_body","Hiiiii");
                startActivity(intent);
                return false;
            }
        });

        menu.add("Call").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("tel:09123456789"));
                startActivity(intent);
                return false;
            }
        });


        return super.onCreateOptionsMenu(menu);
    }
}

 این جا ما پرمیشن لازم نداشتیم چون فوضولی نکردیم تو کارش! خودش اسمس یا زنگشو می زنه

ولی اگه لازم داشتیم تو منیفست باید بریم بگیم: اینو همون بالا زیر package باید بنویسی

<uses-permission android:name="android.permission.SEND_SMS">
</uses-permission>
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ فروردين ۹۹ ، ۱۱:۵۱
Put Yourself First

two.java:

package ir.ben.hassan;

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

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
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");
            }
            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();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       MenuItem itemok= menu.add("Confirm");
       itemok.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
       itemok.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
           @Override
           public boolean onMenuItemClick(MenuItem item) {
               Intent intent=new Intent();//////just inverse of the other intent 
               intent.putExtra("messge","yoohoooo");
               setResult(RESULT_OK,intent);
               //or instead of the red lines could be just: setResult(RESULT_OK); no need to make intent
               finish();//finishes this activity which is no longer needed
               return false;
           }
       });
        return super.onCreateOptionsMenu(menu);
    }
}

کلیک راست->generate getter 

formifo.java

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);

    }
//این یاسی ها با گتر ساخته شدن
    public EditText getInputname() {
        return inputname;
    }

    public EditText getInputphone() {
        return inputphone;
    }

    public EditText getInputemail() {
        return inputemail;
    }

    public CheckBox getCbshare() {
        return cbshare;
    }

    public Button getBtsub() {
        return btsub;
    }

    @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);

                }

            }
    }
//این قبلا پرایوت بود به خاطر گترها پابلیک شد
    public boolean isvalidinput(String name,String phone,String email) {
        if(name==null)
            name=inputname.getText().toString().trim();
        if(email==null)
            email=inputemail.getText().toString().trim();
        if(phone==null)
            phone=inputphone.getText().toString().trim();

        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);
        }
    }
}

main activity java

package ir.ben.hassan;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

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

public  class MainActivity extends AppCompatActivity {
    public static final int reqcod=24;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final FormInfo form=new FormInfo(this,R.id.forminfo);
        form.getBtsub().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name=form.getInputname().getText().toString().trim();
                String phone=form.getInputphone().getText().toString().trim();
                String email=form.getInputemail().getText().toString().trim();

                if(form.isvalidinput(name,phone,email))
                {
                    Intent intent= new Intent(MainActivity.this,two.class);
                    intent.putExtra("name",name);
                    intent.putExtra("email",email);
                    if(form.getCbshare().isChecked())
                    intent.putExtra("phone",phone);
                    startActivityForResult(intent,reqcod);

                }
            }
        });
//        form.getInputname().setTextColor(0xFFFF7002);
     //  form.getInputname().setTextColor(Color.argb(200,5240,67,4));
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==reqcod)
        {
            if(resultCode==RESULT_OK)
            {
                Toast.makeText(this, data.getStringExtra("messge"), Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

     getMenuInflater().inflate(R.menu.menu_main,menu);
        return super.onCreateOptionsMenu(menu);
    }

    }
}

باگ برا من اگه شماره تلفن وارد نکنه ولی زده باشه share اپ بسته میشه  اگه اون دستور null ها رو بذارم درست میشه؟

نع نشد

دلیلش این بوده:

if(extras.containsKey("phone")){
phone=extras.getString("phone").substring(2);

کد استاد اون substring رو برداشته بوده

 

میان بر: وقتی new می نویسی کنترل اسپس بزن . (منو پیدا کن من یه میان بر هستم که توش اینتر  و alt enter نداره!)

new ctrl space

itemok.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

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

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

دو راه:

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

 

باگ استاد نوشت 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

photoshop shortcuts”

 

alt+delete= foreground color

command+delete=background color

command space click =zoom in 

alt space click=zoom out

 

F=change view mode full screen

tab= hide/show menus

M marque tools

shift M = switch between “ “ 

 

موقه انتخاب کردن shift رو نگه دارم و بیضی باشه= دایره می کشه

 

 

موقه انتخاب کردن alt رو نگه دارم و بیضی باشه= از مرکز رشد میشه

command+D = deselect 

 

۴ مود انتخاب

new selection 

add to selection = shift+ select کردن

subtract from selection= alt+select کردن

intersect with selection=alt shift + select

 

اگه خواستی هم دایره بشه هم add to selection = دو تا شیفت= یه بار شیفتو ول کن دوباره بگیر

inverse selection= command shift i

 

feather =  shift f6 (after selected)

 

anti =alias=باعث نرم تر شدن تصویر میشه 

 

lasso L

shift L جابه چا شدن بین لسو های مختلف

لسو یعنی طناب گاوچرونی

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

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

 

 

عمل هند=< نگه داشتن اسپیس =جابه جا کردن صفحه

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ فروردين ۹۹ ، ۲۱:۱۶
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