博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android学习笔记
阅读量:5233 次
发布时间:2019-06-14

本文共 14710 字,大约阅读时间需要 49 分钟。

 安装Androidstudio注意事项:

     Androidstudio常用快捷键:

     Androidstudio常用插件:

     Androidstudio常用设置:

     Androidstudio真机调试时出现mainSDK(API 28)>devicesdk(API 25):

    Androidstudio SDK开发帮助文档:

(一)目录文件:

\Hello\app\build\generated\not_namespaced_r_class_sources\debug\processDebugResources\r\com\example\hello\R.java文件不可修改,res文件下 的资源会在R.java中自动生成id(使用src文件中的资源直接引用R.xxx)几个内部类

\Hello\app\src\main\res\drawable:放置图片(不同的分辨率)

\Hello\app\src\main\res\layout文件:为activity配置布局

\Hello\app\src\main\res\values文件:放置键值对(为国际化语言考虑)

\Hello\app\src\main\AndroidManifest.xml文件是配置整个应用程序

 
 

//首先启动某个activity添加的代码:

(二)Activity

1,作用:可见的,用户和应用程序之间的交互接口,放置不同的控件(控件的容器)

2,activity要点:

    ①activity是一个类,需要继承Activity

    ②需要复复写onCreate()方法

    ③AndroidManifest.xml文件中会出现activity配置

   ④

3,多个activity的关系

   

Component name:指定一个请求跳转到另一个activity的名字

Action:指定跳转的activity的行为(如Intent.ACTION_SENDTO是一个发短信的行为)

Date:传递的数据(uri类型)

Extras:放置一些键值对

//点击MainActivity的按钮,跳转到Hello1Activity
package com.example.hello;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity{    private Button bt_a;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bt_a=(Button) findViewById(R.id.bt_a);        bt_a.setOnClickListener(new Bt_aListener());    }  class Bt_aListener implements View.OnClickListener//设置按钮的监听器,实现跳转功能  {        @Override      public void onClick(View v)      {          Intent intent=new Intent();          intent.setClass(MainActivity.this, Hello1Activity.class);          MainActivity.this.startActivity(intent);//传参      }  }
package com.example.hello; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class Hello1Activity extends AppCompatActivity {
private TextView tv_b=null; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello1); /* Intent intent=getIntent(); String data=intent.getStringExtra("data1");*/ tv_b=(TextView) findViewById(R.id.tv_b); //tv_b.setText(data); tv_b.setText(R.string.HelloActivity); } }
 

 

4,用intent在activity之间传递数据(两个Activity可能不是在一个应用程序中)

    (1),从MainActivity向HelloActivity传递参数123

  

package com.example.hello;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity{    private Button bt_a;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bt_a=(Button) findViewById(R.id.bt_a);        bt_a.setOnClickListener(new Bt_aListener());    }  class Bt_aListener implements View.OnClickListener  {        @Override      public void onClick(View v)      {          Intent intent=new Intent();          intent.putExtra("data1", "123");          intent.setClass(MainActivity.this, Hello1Activity.class);          MainActivity.this.startActivity(intent);      }  }}
package com.example.hello; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; public class Hello1Activity extends AppCompatActivity {
private TextView tv_b=null; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello1); Intent intent=getIntent(); String data=intent.getStringExtra("data1"); tv_b=(TextView) findViewById(R.id.tv_b); tv_b.setText(data); //tv_b.setText(R.string.HelloActivity); } }
 

    (2)用MainActivity实现发短信功能:

package com.example.hello;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity{    private Button bt_a;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bt_a=(Button) findViewById(R.id.bt_a);        bt_a.setOnClickListener(new Bt_aListener());    }  class Bt_aListener implements View.OnClickListener  {        @Override      public void onClick(View v)               //必须重写这个方法      {        /*  Intent intent=new Intent();          intent.putExtra("data1", "123");          intent.setClass(MainActivity.this, Hello1Activity.class);          MainActivity.this.startActivity(intent);*/          Uri uri=Uri.parse("smsto://0800000123");          Intent intent=new Intent(Intent.ACTION_SENDTO,uri );          intent.putExtra("data2", "欢迎使用!");          startActivity(intent);      }  }}

  5,activity中常见的控件;

    (1),TextView:文本信息

     (2),ExitText:可编辑的文本框

     (3),Button:按钮

     (4),meno:菜单

     初始化一个菜单(当用户点击菜单按钮调用此方法)

      

@Override    public boolean onCreateOptionsMenu(Menu menu)    {        menu.add(0, 1,1 , R.string.menu_a);   //add(当前组的id,菜单小块item的id,当前菜单中小块排序的id,小块显示的值)        menu.add(0, 1,2 , R.string.menu_b);        return super.onCreateOptionsMenu(menu);    }

   当用户点击菜单中的某个item时:

@Override    public boolean onOptionsItemSelected(MenuItem item)    {        int id=item.getItemId();        if(id==1)        {            finish();        }        return super.onOptionsItemSelected(item);    }

    (5)练习做一个实现两个数相乘的APP

      ①.java代码:

//MainActivity.javapackage com.example.hello;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends AppCompatActivity{    private TextView tv;    private EditText et_a;    private EditText et_b;    private Button bt;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv=(TextView)findViewById(R.id.tv);        et_a=(EditText)findViewById(R.id.et_a);        et_b=(EditText)findViewById(R.id.et_b);        bt=(Button)findViewById(R.id.bt);        //bt.setText("计算");        //tv.setText("乘以(X)");        tv.setText(R.string.tv);        bt.setText(R.string.bt);        bt.setOnClickListener(new BtListener());    }    @Override    public boolean onCreateOptionsMenu(Menu menu)    {        menu.add(0, 1,1 , R.string.menu_a);   //add(当前组的id,菜单的id,当前菜单中小块排序的id,小块显示的值)        menu.add(0, 1,2 , R.string.menu_b);        return super.onCreateOptionsMenu(menu);    }    @Override    public boolean onOptionsItemSelected(MenuItem item)    {        int id=item.getItemId();        if(id==1)        {            finish();        }        return super.onOptionsItemSelected(item);    }     class BtListener implements View.OnClickListener    {        @Override        public void onClick(View v)        {            Intent intent=new Intent();            String et_astr=et_a.getText().toString();            String et_bstr=et_b.getText().toString();            intent.putExtra("et_a", et_astr);            intent.putExtra("et_b", et_bstr);            intent.setClass(MainActivity.this,Hello1Activity.class );            MainActivity.this.startActivity(intent);        }    }}//HelloActivity.javapackage com.example.hello;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;public class Hello1Activity extends AppCompatActivity{   private TextView tv_b;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_hello1);        tv_b=(TextView)findViewById(R.id.tv_b);        Intent intent=getIntent();        String et_astr=intent.getStringExtra("et_a");        String et_bstr=intent.getStringExtra("et_b");        int et_ain=Integer.getInteger(et_astr);        int et_bin=Integer.getInteger(et_bstr);        int result=et_ain*et_bin;        tv_b.setText(result+ " " );     //setText(必须是字符串类型)    }}//

     ②.xml代码:

//activity_main.xml
//activity_hello1.xml
//string.xml
Hello
HelloActivity!
乘以(X)
计算
后退
关于

     ③activity配置文件

//AndroidMainifest.xml

   ④出现的问题:不知道怎么回事,在真机上调试activity之间的跳转出现闪退现象。

  6,Activity的生命周期函数(当手机内存不足时调用onPause(),onStop(),onDestroy()方法的Activity会被kill掉):

    (1)首先是创建activity,也就是onCreate()方法,关于这个方法,官方文档描述为:第一种创建该activity时调用,主要完成静态数据的初始化等,还提供一个含有该activity自                己“冻结”的状态的Bundle对象;该方法常常后面会伴随onStart()方法。 

    (2)onStart()方法:当该activity对用户可见的时候调用

    (3)onResume()方法:当activity可以获取焦点时调用(也就是该activity是栈顶activity的时候);

    (4)onStop()方法:该方法适合onStart()方法对应的方法,即当该activity不可见的时候调用

     (5)onPause()方法:当activity不可以获取焦点时调用(也就是该activity不是栈顶activity的时候);

    (6)onDestroy()方法:当该activity销毁的时候调用(通常会在这里放一些解绑服务,取消广播注册的操作);

还有一个用得较少:

(7)onRestart()方法:当你的activity执行了onStop()之后,又想实现onStart()的效果,这个时候就会执行该方法

 图示:

    启动第一个Activity:

        

    从第一个Activity启动第二个Activity:(当第二个Activity完全遮掩第一个Activity时)若第二个Activity以小窗口形式将第一个Activity遮掩一部分,则不调用FirstActivity的onStop()方     法。

     

   从第二个Activity返回到第一个Activity:

    。SecondActivity

         -onPause()

    .FirstActivity

        -onRestart()

    .FirstActivity    

       -onStart()

    .FirstActivity

       -onResume()

   .SecondActivity

      -onStop()

   .SecondActivity

      -onDestroy():通常在调用finish()方法或当前内存不足时调用

  Task(任务)以栈的形式运行过程:

      打开第一个Activity,第一个Activity被压入其中,启动第二个Activity,第二个Activity被压入其中,手机显示最上面的Activity...

       

    当点击返回上面的Activity依次被取除。

     注意:当将第二个Activity中的按钮监听器中的startActivity(Intent)替换为finish(),则只会影响返回时的效果,在第三个Activity显示时点击返回,会直接返回到第一个Activity。

 

 

   SQLite数据库(可嵌入,程序驱动)访问

  

      

  SharedPreferenced的使用方法:SharedPreferences 是一个轻量级的存储类,主要是保存一些小的数据,一些状态信息

     第一步:初始化

         * 获取SharedPreferenced对象

        * 第一个参数是生成xml的文件名,第二个参数是存储的格式,SharedPreferences preferences = getSharedPreferences("OpenCount", Context.MODE_PRIVATE);

   第二步:获取edit对象

     //获取到edit对象,SharedPreferences.Editor edit = preferences.edit();

   第三步:通过edit对象写入数据,第一个参数是属性名,第二个参数是所要传的值 

             通过editor对象写入数据,edit.putInt("count",1);

  第四步:将数据保存到xml文件里,提交数据存入到xml文件中,edit.commit();

第五步:通过get方法读取所存的信息

int count = preferences.getInt("count", 0);

SharedPreferences这个方法可以将数据存入到本地文件,用来存储登录次数,和登录信息等各种信息

  SetFilters对输入框格式,字符数的控制:

   (1) et_vcode.setFilters(new InputFilter[ ]);参数是一个InputFilter类型的数组

     (2)如果直接添加限制字数的规则,直接newLengthFilter就可以了,例如限制输入最大不超过16位:et_vcode.setFilters(new InputFilter[ ]{new InputFilter.LengthFilter(16)});

      (3)如果此时你还有另一个规则,例如只能输入a-z的小写字母,直接在InputFilter数组中添加  : et_vcode.setFilters(newInputFilter[{ codeInputFilter  ,  newInputFilter .  LengthFilter(16)});

    (4) codeInputFilter继承InputFilter,规则自己定义,重写里面的public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {}

  filter参数介绍:

  source   :变化的字符串

  start    :变化字符的首字符下标

  end      :变化字符的尾字符下

  dest     :带光标的字符串

  dstart   :光标的起始位置 

  dend     :光标的结束位置

  filter方法返回的是一个CharSequence,用来控制可编辑控件添加字符时的约束条件。

主要分为三种情况:返回null,表示可正常添加source字符串;返回"",表示不变动原字符;返回以上之外的字符串,表示将返回的该字符串追加到远字符串中。

例如:

edit_register.setFilters(new InputFilter[]                  //设置输入格式                {                new InputFilter()                {                    @Override                    public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend)                    {                        for (int i = start; i < end; i++)                        {                            if (!Character.isLetterOrDigit(source.charAt(i)) &&                                    !Character.toString(source.charAt(i)).equals("_"))                            {                                Toast.makeText(Register_Activity.this, "只能使用'_'、字母、数字、汉字注册!", Toast.LENGTH_SHORT).show();                                return "";                            }                        }                        return null;                    }                }        })
方法:onEditorAction(TextView textView,int actionId,KeyEvent keyEvent)的用法: * 第一个参数:TextView textView 表示当前触发事件的EditText的对象,类似于textView=findViewById(R.id.edit_account) * 第二个参数:int actionId 表示 按下“完成按钮”,这里和xml文件中EditText属性imeOptions对应
actionId的取值:          imeOptions=”actionUnspecified” –> EditorInfo.IME_ACTION_UNSPECIFIED          imeOptions=”actionNone” –> EditorInfo.IME_ACTION_NONE          imeOptions=”actionGo” –> EditorInfo.IME_ACTION_GO          imeOptions=”actionSearch” –> EditorInfo.IME_ACTION_SEARCH          imeOptions=”actionSend” –> EditorInfo.IME_ACTION_SEND          imeOptions=”actionNext” –> EditorInfo.IME_ACTION_NEXT          imeOptions=”actionDone” –> EditorInfo.IME_ACTION_DONE (如果编辑信息输入完成 )
*             但要注意actionId是指软盘上的,而键盘上的actionId与软盘上的不一样;即在软盘上“完成按钮”的actionId为0, *             而键盘上的“完成按钮(回车键)”的actionId为6 * 第三个参数:KeyEvent keyEvent 表示 按下“完成按钮”,这里和xml文件中EditText属性imeOptions对应,但keyEvent里面的内容更丰富,内容如下: *             keyEvent.toString()=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_ENTER,  *               scanCode=28, metaState=0, flags=0x8, repeatCount=0, eventTime=5664212, downTime=5664212, deviceId=1, source=0x301 } * 返回值:返回true,保留软键盘;false,隐藏软键盘
InputMethodManager imm =(InputMethodManager) getSystemService(Login_Activity.this.INPUT_METHOD_SERVICE);   //调用系统服务(包括显示键盘,隐藏键盘) imm.hideSoftInputFromWindow(edit_password.getWindowToken(), 0);     //隐藏键盘
 
对输入的密码显示,隐藏操作:
boolean flag=false; if (flag == true) {
//不可见 edit_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); //显示密码 flag = false; openpwd.setBackgroundResource(R.drawable.invisible); } else { edit_password.setTransformationMethod(PasswordTransformationMethod.getInstance()); //隐藏密码 flag = true; openpwd.setBackgroundResource(R.drawable.visible); }

   TextUtils.isEmpty(CharSequence str)这个方法是系统为我们提供的一个非常方便的判断一个CharSequence类型的

参数是否为空的方法,这个方法的返回值是一个boolean,当括号内参数为(null)或者("")时,返回true。

   TextUtils.equals(CharSequence str1, CharSequence str2)这个是比较括号内两个CharSequence类型的参数是否相等

 

转载于:https://www.cnblogs.com/lq13035130506/p/10728988.html

你可能感兴趣的文章
03 线程池
查看>>
201771010125王瑜《面向对象程序设计(Java)》第十三周学习总结
查看>>
手机验证码执行流程
查看>>
python 基础 ----- 变量
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
:hover 鼠标同时触发两个元素变化
查看>>
go语言学习十三 - 相等性
查看>>
Idea 提交代码到码云(提交到github也大同小异)
查看>>
c#连接excel2007未安装ISAM解决
查看>>
Mono 异步加载数据更新主线程
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
张季跃 201771010139《面向对象程序设计(java)》第四周学习总结
查看>>
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>