GVKun编程网logo

AndroidStudio使用入门(androidstudio 教程)

7

如果您对AndroidStudio使用入门感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于AndroidStudio使用入门的详细内容,我们还将为您解答androidstud

如果您对AndroidStudio使用入门感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于AndroidStudio使用入门的详细内容,我们还将为您解答androidstudio 教程的相关问题,并且为您提供关于Android studio 将Eclipse代码导入到AndroidStudio的两种方式、Android Studio使用Android Annotations注解框架笔记、Android Studio使用lombok、Android Studio使用structure分析源码的有价值信息。

本文目录一览:

AndroidStudio使用入门(androidstudio 教程)

AndroidStudio使用入门(androidstudio 教程)

AndroidStudio使用入门

  • 1_AndroidStudio activity的基本使用
    • 1.1_MainActivity和activity_main的初识
    • 1.2_Activity的清单文件简介
    • 1.3_几种重要文件的介绍
    • 1.4_基本布局的认识与使用
      • 1.4.1_RelativeLayout(相对布局)
      • 1.4.2_线性布局
  • 2_访问资源的方式
    • 2.1_java访问资源的方式
    • 2.2_xml访问资源的方式
  • 3_控件的使用
    • 3.1_通用属性
    • 3.2_选择器的使用
    • 3.3_TextView的使用
    • 3.4_Button按钮和点击事件的添加
    • 3.5_EditText的使用
    • 3.6_单选框radio button和radio group的使用
    • 3.7_CheckBox的使用
    • 3.8_Toast提示的使用
    • 3.9_AlertDialog的使用
      • 3.9.1_AlertDialog的简单使用
      • 3.9.2_AlertDialog的单选框使用
      • 3.9.3_AlertDialog的自定义界面的使用
    • 3.10_ListView的使用
      • 3.10.1_SimpleAdapter的使用(略)
      • 3.10.2_ArrayAdapter的使用
      • 3.10.3_BaseAdapter的使用(略)
  • 4_生命周期与intent的使用
    • 4.1_生命周期
    • 4.2_页面跳转
    • 4.3_intent跳转页面传值
    • 4.4_intent传值自定义类
    • 4.5_回传数据(略)

1_AndroidStudio activity的基本使用

log.v("","");//在控制面板输出内容

1.1_MainActivity和activity_main的初识

  1. 在MainActivity所在文件夹中可以创建任意“?Activity”文件作为后端逻辑代码文件
  2. 同理在activity_main所在文件夹中可以创建任意“activity_?”文件作为前端页面控制代码文件
    注意两个文件名的“?”部分要相互对应

在这里插入图片描述

1.2_Activity的清单文件简介

在这里插入图片描述

1.3_几种重要文件的介绍

  1. Android中的界面是由两个文件组成的 一个是Activity的Java文件 还有一个是xml的布局文件.Java文件都放在java的文件下布局文件全部在res/layout下

  2. layout下的文件都是xml文件

  3. res下的文件不允许有大写字母

  4. manifests文件夹下,AndroidManifest.xml:清单文件。可以配置应用的第一个启动的Activity,注册Activity,修改应用图标及应用名称

    在这里插入图片描述

  5. values自定义变量名
    colors.xml:

    在这里插入图片描述

    strings.xml:
    在此文件中定义变量类似C语言中的#define
    多语言支持方式

  6. drawable文件夹和mipmap文件夹
    一般将APP的icon放在minmap文件夹下,其他图片资源放在drawable文件夹下

1.4_基本布局的认识与使用

基本布局的认识

  1. View:表示为Android视图
    Java文件和xml文件都能编写View
    不管是Java还是xml文件最后都会变成Java文件的视图(其中java编写的视图和java课上学的视图一样,一般开发软件不用java编写视图

  1. ViewGroup:表示为布局(在xml中布局可以嵌套)
    布局控件可以放其它控件常用布局 LinearLayout(线性布局)、RelativeLayout(相对布局)、ConstraintLayout(约束布局)
    如果只有一个子控件,则不需要写orientation属性,有多个必须要写,在新工具不一定
    常用控件 Button(按钮)、TextView(文本)、EditText(输入框)

  1. 根布局需要加代码<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"
    其中xmlns:app只在相对布局中加

1.4.1_RelativeLayout(相对布局)

没有方向性,但是有Z轴,代码在后的Z轴值越大,即可以悬浮必须要参照物
1、布局本身为参照
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘

2、通过id来指定参照物
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
3. 属性值为具体的像素值,如 30dip,40px
android:layout_marginBottom 离某元素底边缘的距离
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离

1.4.2_线性布局

如果只有一个子控件,则不需要写orientation属性,有多个必须要写,在新工具不一定在线性布局中
空间大小:android:layout_width="" android:layout_height=""
match_parent只会占满剩余的空间 wrap_content适应文本大小 除此之外,还可以写固定数值,单位是dp或dip
layout_weight是权重

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        >
        <Button
            android:id="@+id/button_alterdialog"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="删除"
            android:onClick="delete"
            />
        <Button
            
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="增加"
            android:onClick="delete"
            />
    </LinearLayout>

2_访问资源的方式

2.1_java访问资源的方式

R.resource_type.name//R可以理解为资源中的最高包
Android.R.//官方资源

2.2_xml访问资源的方式

@pakage_name:resource_type/name

3_控件的使用

3.1_通用属性

  1. gravity(对齐方式):center、left、rightbottom
    多个布局方式以"|"分隔

  1. 边距
    内边距:padding
    外边距:margin

  1. 限制文本行数
    android: lines="2" android:ellipsize="end"----超出的部分“。。。”表示

@H_256_301@
  • 放置图片(图片存储在mipmap(drawable)文件夹)
    Android:drawable
  • 背景图片和颜色
    Android:background="@mipmap/drawable_name"(背景图片)
    Android:background=“颜色”
  • 3.2_选择器的使用

    3.3_TextView的使用

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="16sp"
     android:textColor="#ffffff" 
     android:padding="10dip" 
     android:background="#cc0000" 
     android:layout_gravity="center" 
     android:text="Android Studio 工具箱"/>
    

    3.4_Button按钮和点击事件的添加

    1. Button继承于TextView

    2. android背景选择器的使用

    3. Button点击事件的添加(最简单的方式,另外两种方式见3.6

    java文件下:
    MainActivity文件中

    public void login(View view){
            //动作
        }
    

    res.layout文件夹下activity_main文件中

    <Button
            android:layout_width="90dp"
            android:layout_height="70dp"
            android:text="登录"
            android:textSize="25dp"
            android:onClick="login">
            </Button>
    

    3.5_EditText的使用

    基本使用

    <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="提示"
            android:inputType="datetime"
            ></EditText>
    

    其中inputType是输入类型,输入类型有密码、数字、文本、日期等

    如何在后端获取编辑框中的内容

    在java文件中

     EditText edit_text1 = findViewById(R.id.id名);
     edit_text1.getText().toString;
    

    3.6_单选框radio button和radio group的使用

    1. 直接应用:
    RadioGroup radioGroup = findViewById(R.id.radiogroup);
            radioGroup.setonCheckedchangelistener(new RadioGroup.OnCheckedchangelistener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    switch (checkedId){
                        case R.id.radiobutton_man:{
                            Log.i("radiobutton_man","男生");
                            break;
                        }
                        case R.id.radiobutton_woman:{
                            Log.i("radiobutton_woman","女生");
                            break;
                        }
                    }
                }
            });
    

    效果:

    在这里插入图片描述


    2. 继承接口:

    public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedchangelistener {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            RadioGroup radioGroup = findViewById(R.id.radiogroup_1);
            radioGroup.setonCheckedchangelistener(this);//this在此使用的多态的属性,表示继承的接口类而不是MainActivity类
        }
        @Override//实现接口中的抽象类
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId){
                case R.id.radiobutton_man:{
                    Log.i("radiobutton_man","男生");
                    break;
                }
                case R.id.radiobutton_woman:{
                    Log.i("radiobutton_woman","女生");
                    break;
                }
            }
        }
    }
    

    效果:

    在这里插入图片描述

    3.7_CheckBox的使用

    <CheckBox
        android:id="@+id/chaoxiong"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="超凶"
        ></CheckBox>
    
    CheckBox checkBox = findViewById(R.id.chaoxiong);//获取控件
            checkBox.setonCheckedchangelistener(new CompoundButton.OnCheckedchangelistener() {//进行监听
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked){//如果被选中
                        Log.i("OnCheckedChange",buttonView.toString()+"被选中");
                    }
                }
            });
    

    3.8_Toast提示的使用

    Toast.makeText(MainActivity.this,"被选中",Toast.LENGTH_LONG).show();
    

    3.9_AlertDialog的使用

    3.9.1_AlertDialog的简单使用

            <Button
            android:id="@+id/button_alterdialog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="删除"
            android:onClick="delete"
            />
    
    public void delete(View v){
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("确认").setIcon(R.mipmap.why).setMessage("确定删除吗?")
                    .setPositiveButton("确认", new DialogInterface.OnClickListener() {//创建确认选项按钮及其点击事件
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this,"删除成功",Toast.LENGTH_SHORT).show();
                }
            }).setNegativeButton("取消", new DialogInterface.OnClickListener() {//创建取消选项按钮及其点击事件
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            //下面两个千万不能忘记
            AlertDialog dialog = builder.create();//创建
            dialog.show();//显示
        }
    

    效果:

    在这里插入图片描述

    3.9.2_AlertDialog的单选框使用

    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="选择小周周的午餐"
            android:onClick="select"
            ></Button>
    
    public void select(View view){
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("馋的流口水了都").setIcon(R.mipmap.greedy).setSingleChoiceItems(new String[]{"奥尔良鸡腿", "菠萝", "冰激凌"}, 0, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "中午吃"+which, Toast.LENGTH_SHORT).show();
                }
            });
            //下面两个千万不能忘记
            AlertDialog dialog = builder.create();//创建
            dialog.show();//显示
        }
    

    效果:

    在这里插入图片描述

    3.9.3_AlertDialog的自定义界面的使用

    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="打开自定义界面"
            android:onClick="customView"></Button>
    
    public void customView(View view){
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("新窗口").setView(R.layout.activity_new);
            //下面两个千万不能忘记
            AlertDialog dialog = builder.create();//创建
            dialog.show();//显示
        };
    

    效果:

    在这里插入图片描述

    3.10_ListView的使用

    在这里插入图片描述

    3.10.1_SimpleAdapter的使用(略)

    3.10.2_ArrayAdapter的使用

    <ListView
            android:id="@+id/listview"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
    
            ></ListView>
    
    ListView listView = findViewById(R.id.listview);
            String[] name = {"菠萝","青皮桔","香蕉","西瓜"};
            ArrayAdapter arrayAdapter = new ArrayAdapter(newActivity.this,android.R.layout.simple_list_item_1,android.R.id.text1,name);
            listView.setAdapter(arrayAdapter);
    

    3.10.3_BaseAdapter的使用(略)

    4_生命周期与intent的使用

    4.1_生命周期

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LogUtils.d(TAG,"onCreate ---> 创建时调用");
    }
     
    @Override
    protected void onRestart() {
        super.onRestart();
        LogUtils.d(TAG,"onRestart ---> 重启时调用");
    }
     
    @Override
    protected void onStart() {
        super.onStart();
        LogUtils.d(TAG,"onStart ---> 即将可见不可交互时调用");
    }
     
    @Override
    protected void onResume() {
        super.onResume();
        LogUtils.d(TAG,"onResume ---> 可见可交互时调用");
    }
     
    @Override
    protected void onPause() {
        super.onPause();
        LogUtils.d(TAG,"onPause ---> 即将暂停时调用");
    }
     
    @Override
    protected void onStop() {
        super.onStop();
        LogUtils.d(TAG,"onStop ---> 即将停止不可见时调用");
    }
     
    @Override
    protected void onDestroy() {
        super.onDestroy();
        LogUtils.d(TAG,"onDestroy ---> 即将销毁时调用");
    }
    

    4.2_页面跳转

    AndroidManifest.xml代码注意,若要显示某个页面,必须将其在此文件夹中声明

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/angry"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                
            </activity>
            <activity android:name=".newActivity">
            </activity>
            
        </application>
    
    </manifest>
    
    public void windowSkip(View view){//按钮点击事件
            Intent intent = new Intent();
            intent.setClass(MainActivity.this,newActivity.class);//从前者跳往后者
            startActivity(intent);//启动
        }
    

    4.3_intent跳转页面传值

    MainActivity文件:

        public void loginSkip(View view){
            Intent intent = new Intent();
            intent.setClass(MainActivity.this,LoginActivity.class);//从前者跳往后者
            intent.putExtra("name","jiajia");
            intent.putExtra("sex","男");
            intent.putExtra("hobby",new String[] {"篮球","乒乓球","羽毛球"});
            startActivity(intent);//启动
        }
    }
    

    LoginActivity文件:

    public class LoginActivity extends AppCompatActivity {
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            //接收传值
            Intent intent = getIntent();
            String name = intent.getStringExtra("name");
            String sex = intent.getStringExtra("sex");
            String[] hobbies = intent.getStringArrayExtra("hobby");
            Log.i("LoginActivity",name+sex+hobbies);//打印
        }
    }
    

    4.4_intent传值自定义类

    只要继承了parcelable或者serializable接口就可以进行传值,注意接收的时候需要强行转成此自定义类的类型

    4.5_回传数据(略)

    回传数据

    Android studio 将Eclipse代码导入到AndroidStudio的两种方式

    Android studio 将Eclipse代码导入到AndroidStudio的两种方式

    前言

    Android Studio到现在已经发展到2.1.1+的版本了,最近也在试着使用它,原因是多方面的,一个毕竟是未来的趋势,二则是github上越来越多的大牛开源项目都是基于Android Studio的,因此会使用Android Studio就成为一件必须的任务。
    
     在具体下面的工作之前,有两个概念是与Eclipse不大相同的,即Project和Module。在Android Studio中,一个Project并不是Eclipse的project,倒是有点像workspace(或者说任务吧),而Module才是与Eclipse的project相似的。所以,一个Project中可以包含多个Module,多个Module在一起共同构成一个Project,每个Module可以是一个库,也可以是一个可运行的Module(对应可运行的apk)。
    

    正题

      说到使用AndroidStudio,除了新建的项目,我们都会面临的问题是原先Eclipse的代码该怎么导入到AndroidStudio中使用。
    

    这方面相关的资料还比较少,自己摸索了一下,总结出这篇博客,希望能让开发者少走些弯路。 OK,进入正题。

    Google为了让我们更加方便的使用AndroidStudio,提供了两种导入Eclipse代码的方式:一种兼容Eclipse,一种是全新的Android Gradle Project. 这里,我们先从兼容模式说起。 兼容模式 这种模式下,保证了Eclipse时代的代码目录结构,整体操作和使用和Eclipse也差不多。 最重要的,当你使用AndroidStudio时,你或者其他人也可以方便的使用Eclipse,互不干扰。

    实现步骤

    1. 从Eclipse中导出Gradle build files 在Eclipse菜单中 File --> Export-->Generate Gradle build files

    输入图片说明 接下来会到达警告界面,这里会提示AndroidStudio可以直接导入ADT的工程,先过,后面有直接导入的讲解。

    输入图片说明 选中你的项目工程,包括主工程和库工程(Library)。

    输入图片说明 确认生成

    输入图片说明 2. 修改导出文件参数 导出后,由于adt很久没更新,需要手动改一些参数,才能保证正常使用。 为了保证能够讲解的更清晰,下面分情况讲解一下:

    没有库工程,只有主工程 这种情况下你看到的目录是这样的

    输入图片说明 首先需要更改的是 build.gradle 文件 AndroidStudio 1.0 ~ 1.0.2 使用的都是 Android Gradle plugin 1.0.0,因此需要将图中红框内的 0.12.+ 改为 1.0.0

    输入图片说明 然后还需要更新Gradle版本,指定为所需要的2.2.1

    输入图片说明 含有库工程 其实改动方法和上面一样,只需要注意是改动整个项目的build.gradle和 /gradle/wrapper/gradle-wrapper.properties。 而不要尝试去主工程或者库工程里面找build.gradle

    输入图片说明

    1. 导入AndroidStudio 进入到AndroidStudio中,选择导入非AndroidStudio工程

    输入图片说明 找到需要导入的工程目录,可以看到图标和Eclipse创建的工程不一样。

    输入图片说明 点击OK,进入漫长的加载过程,之后就可以正常使用了。

    输入图片说明 已经创建过工程的打开AndroidStudio会直接进入以前的工程 这时候可以选择File-->Import Project, 选中后点击ok

    输入图片说明 兼容模式下的bug 使用IDE的打包:

    输入图片说明 在兼容模式只打主工程的,库工程没有加入到apk中,导致无法正常运行。 截止到1.0.2,AndroidStudio依然存在这个bug。 因为这个bug的存在,你在兼容模式可以使用AndroidStudio编程,打包时开启Eclipse。

    OK,兼容模式介绍到这里。 我们开始介绍主角: Android Gradle Project。 这里必须说明的是Google更希望我们使用这种方式,如果没有什么团队的压力,还是使用这种吧。

    Android Studio使用Android Annotations注解框架笔记

    Android Studio使用Android Annotations注解框架笔记

    一、新建Android项目

    二、配置build.gradle文件

    1)配置项目下面的build.gradle文件

    buildscript {
    
        repositories {
            jcenter()
            mavenCentral() //添加仓库
        }
    
        dependencies {
            classpath ''com.android.tools.build:gradle:2.1.2''
            classpath ''com.neenbedankt.gradle.plugins:android-apt:1.8'' //添加依赖
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    allprojects {
        repositories {
            jcenter()
           mavenCentral() //添加仓库
        }
    }
    
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    2)配置app下面的build.gradle文件

    apply plugin: ''com.android.application''
    apply plugin: ''com.neenbedankt.android-apt'' //apt插件
    def AAVersion=''4.1.0'' //AndroidAnnotations版本号
    
    android {
        compileSdkVersion 24
        buildToolsVersion "24.0.0"
    
        defaultConfig {
            applicationId "com.demo.androidannotationdemo"
            minSdkVersion 15
            targetSdkVersion 24
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: ''libs'', include: [''*.jar''])
        testCompile ''junit:junit:4.12''
        compile ''com.android.support:appcompat-v7:24.1.0''
        //添加依赖包
        apt "org.androidannotations:androidannotations:$AAVersion"
        compile "org.androidannotations:androidannotations-api:$AAVersion"
    }
    

    三、修改AndroidManifest.xml文件的Activity配置,在**.MainActivity后面加下划线,点击Build菜单下的Make Project**完成相关的配置下载jar包

    <activity android:name=".MainActivity_">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

    加下划线的原因详见:http://blog.csdn.net/u012702547/article/details/47355193

    这篇文章讲的是在eclipse使用AndroidAnnotations的

    四、在Activity中添加注解,运行项目就可以了

    @EActivity(R.layout.activity_main)
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.activity_main); 这边就不需要写了
        }
    }
    

    五、遇到的问题

    之前有人写的相关教程有添加如下的东西

    //apt {
    //    arguments {
    //        androidManifestFile variant.outputs[0].processResources.manifestFile
    //        resourcePackageName "com.demo.androidannotationdemo"
    //    }
    //}
    

    我这边MakeProject一直报错,后来把上面那段注释掉,反而好了

    Cannot get property ''processResources'' on null object

    Android Studio使用lombok

    Android Studio使用lombok

    参考:https://github.com/mplushnikov/lombok-intellij-plugin

    使用@Setter/@Getter时,刚开始在Structure的函数列表里没有生成响应的函数,且调用set/get的地方也报红,但编译OK。

    按网上的说法操作后还是不行,最后卸载lombok插件后重新安装就OK了。

     

    Android Studio使用structure分析源码

    Android Studio使用structure分析源码

    分析 以下代码实际上做了什么?

    1.Intent intent= new Intent(MainActivity.this, AActivity.class);//获取类名
    2.intent.putExtra("xcj","123");
    

    1.首先打开Intent的源码(在下载了源码包的前提下,使用ctrl+左键点击Intent就可以看到源码),如下:

    在这里插入图片描述

    显然,这是一个Intent的构造方法(无返回类型),从structure处可以看到是否有其他的构造方法
    你不知道如何打开structure?如下:然后会在侧边栏出现structure,以后只需要点击这里就好了

    在这里插入图片描述

    然后查看红色圆圈m中的(m表示method),该类中的所有方法(包括构造方法)都会显示在这里

    在这里插入图片描述

    2.这里先讲解一下structure的使用

    在这里插入图片描述

    p为Properties(属性),f为field(字段)
    属性和字段的区别:属性有get和set方法,如下:
    属性action有getAction()和setAction方法来进行赋值操作,事实上,属性和字段不都是一个变量(或常量)吗,为什么要区分二者?你可以这样想:这是为了防止开发者错误赋值带来的不安全性,也就是相当于对开发者的提醒,源码没有给你提供get和set方法的变量不要去赋值(也就是说你虽然可以去赋值,但是很可能会引发一些问题)

    在这里插入图片描述


    下面这个锁表示 显示非公开的内容,选上,不然private等修饰的内容都看不到

    在这里插入图片描述


    3.继续分析Intent

    在这里插入图片描述


    该Intent需要两个参数,这里传入两个类,又将其给了那么ComponentName(packageContext, cls),那它做了什么,

    在这里插入图片描述


    显然,它获取了类名,并付给了mPackage和mClass,因此可以知道new ComponentName(packageContext, cls);这个实例中有两个存储了类名的变量,这个实例赋给了mComponent,则通过mComponent.mPackage和mComponent.mClass就可以获取类名,那么就可以通过intent.mComponent.mPackage和intent.mComponent.mClass获取类名。
    总结:

    Intent intent= new Intent(MainActivity.this, AActivity.class);//获取类名
    

    这条语句获取了MainActivity和AActivity的类名
    4.分析

    intent.putExtra("xcj","123");
    

    同样查看源码:

    在这里插入图片描述


    首先看Bundle是什么?一层一层往下看,从这里还是不知道它做了什么,看他调用的父类构造方法:super();

    在这里插入图片描述


    在该方法中从注释中可以看出他是创建了一个空Bundle,继续看this,这是BaseBundle类的调用其实例的构造方法,往下看

    在这里插入图片描述


    注释中的意思:
    构造一个新的空包,该包使用特定的类加载器
    实例化可打包和可序列化对象。
    @param loader实例化对象时要使用的显式类加载器
    包里面。
    @param capacity ArrayMap的初始大小
    可以知道这里创建了一个capacity大小的ArrayMap用于存储键值对,并赋给了mMap,显然我们可通过mMap.put()来给mMap进行键值对的添加,也就是可以通过Bundle的实例 bundle.mMap.put()来给mMap进行键值对的添加,看完了Bundle进行一下总结

    在这里插入图片描述


    总:new Bundle()创建了一个实例,在实例主要进行了 Bundle实例下的变量mFlags 的赋值(暂时不知道有啥作用),以及 Bundle实例下的变量mMap 创建了一个ArrayMap<String, Object>,以及 Bundle实例下的变量 mClassLoader进行赋值,(这些变量有Bundle类继承自其父类),最后该Bundle实例赋给了mExtras,则可以通过mExtras.mMap.put();来给mMap添加键值对。

    那么再来看mExtras.putString(name, value);做了什么 。

    在这里插入图片描述


    先不管unparcel();看到mMap.put()就已经知道他给mMap添加了键值对

    最后总结第二条语句做了什么。

    intent.putExtra("xcj","123");
    

    该语句将键值对"xcj"和"123"储存到Bundle类的实例mExtras中了,而mExtras是intend的一个变量,也就是将该键值对储存到intent中去了,显然,在内部,可以通过intent.mExtras.mMap.get()来获取该键值对。

    总:以上全部都只是在分析以下两句代码实际上做了什么,了解它是怎么做的,在分析其他源码的时候可以采取同样的办法

    Intent intent= new Intent(MainActivity.this, AActivity.class);//获取类名
     intent.putExtra("xcj","123");
    

    今天的关于AndroidStudio使用入门androidstudio 教程的分享已经结束,谢谢您的关注,如果想了解更多关于Android studio 将Eclipse代码导入到AndroidStudio的两种方式、Android Studio使用Android Annotations注解框架笔记、Android Studio使用lombok、Android Studio使用structure分析源码的相关知识,请在本站进行查询。

    本文标签: