最近要参加嵌入式技术大赛,我负责小车的安卓控制部分,现在学习android的代码相关控制 学习了3天的Java,学到集合我觉得的就差不多了,后面直接在安卓开发上练习,遇到不懂的Java知识 在补充,我认为这样的学习方法是可行的, 开发环境的使用的Android Studio 3.2,安装起来也是一波三折还好都搞定了。

初始代码

package com.example.xyz.testapp;

import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       //调用父类方法
        setContentView(R.layout.activity_main);   //加载布局
    }
}

这是默认的布局这里setContentView加载了一个xml文件,这里的xml需要在AndroidManifest.xml中注册 注册如下

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

在后面的隐式Intent会使用到action和category, name里面参数是

android.intent.action.MAIN:决定应用的入口Activity,也就是我们启动应用时首先显示哪一个Activity。 android.intent.category.LAUNCHER:表示activity应该被列入系统的启动器(launcher)(允许用户启动它)。Launcher是安卓系统中的桌面启动器,是桌面UI的统称。

切换活动

package com.example.xyz.activitytest;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class FirstActivity extends AppCompatActivity {
   // Toast a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);  //设置主窗口

        Button button1 = (Button) findViewById(R.id.button_1); //创建一个view类转button类型
        button1.setOnClickListener(new View.OnClickListener() {    //setOnClickListener这是一个接口
                                       @Override
                                       public void onClick(View v) {
                                           //a =  Toast.makeText(FirstActivity.this,"这是一个测试",Toast.LENGTH_SHORT);   //toast类
                                           //a.show();
                                           Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                                           startActivity(intent);
                                       }
                                   }
        );

        Button button2 = (Button) findViewById(R.id.button_2);
        button2.setOnClickListener(new View.OnClickListener() {
                                       @Override
                                       public void onClick(View v) {
                                            String data = "这是一个测试能不能传递的文本";
                                            Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                                            intent.putExtra("extra_data",data);
                                            startActivity(intent);
                                       }
                                   }

        );

        Button button3 = (Button) findViewById(R.id.button_3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this,dataActivity.class);
                startActivityForResult(intent,1);
            }
        });



    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu){    //设置菜单
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId()){
            case R.id.add_item:
                Toast.makeText(FirstActivity.this, "1", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);
                break;
            case R.id.remove_item:
                Toast.makeText(FirstActivity.this, "2", Toast.LENGTH_SHORT).show();
                break;
                default:
        }
        return true;
    }

    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data){
        switch (requestCode){
            case 1:
                if (resultCode == RESULT_OK){
                    String returnData = data.getStringExtra("data123");
                    Toast.makeText(FirstActivity.this,returnData,Toast.LENGTH_SHORT).show();
                }
                break;
               default:
        }

    }



}

开始创建Button对象,button2.setOnClickListener为button注册点击事件这里的使用的内部类的方法,实现了onClick抽象的方法 Intent intent = new Intent(FirstActivity.this,SecondActivity.class); intent实例化实现在各个活动中切换这里使用的是显式Intent来切换 第一个类所在活动,第二个参数是要切换的活动,最后使用startActivity(intent);来切换,隐式Intent这样用

Intent intent = new Intent(“com.example.xyz.activitytest.ACTION”); //这里的com.example.xyz.activitytest.ACTION是一个activity里面的action标签内容

Intent通过下面的属性来描述的某个意图:

  1. action(动作): 用来表示意图的动作,如:查看,发邮件,打电话

  2. category(类别): 用来表示动作的类别。

  3. data(数据): 表示与动作要操作的数据。如:查看指定的联系人

  4. type(数据类型): 对data类型的描述。

  5. extras(附件信息): 附件信息。如:详细资料,一个文件,某事。

  6. component(目标组件): 目标组件。

intent.putExtra(“extra_data”,data);向下一个活动传递一个值,在了一个要接收的数据的活动使用

Intent intent = getIntent(); //获取Activity的Intent对象

String data = intent.getStringExtra(“extra_data”);

这里就获取到了上一个活动传递回来的值。

设置菜单

这里的代码是设置菜单, getMenuInflater()//获取当前菜单的对象;

@Override
    public boolean onCreateOptionsMenu(Menu menu){    //设置菜单
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId()){
            case R.id.add_item:
                Toast.makeText(FirstActivity.this, "1", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);
                break;
            case R.id.remove_item:
                Toast.makeText(FirstActivity.this, "2", Toast.LENGTH_SHORT).show();
                break;
                default:
        }
        return true;
    }

在使用inflate方法第一个参数是加载菜单布局文件,第二个参数是要填充的菜单; 菜单布局文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item
android:id = "@+id/add_item"
android:title="Add"
    />
<item
android:id = "@+id/remove_item"
android:title="remove" />
</menu>

onOptionsItemSelected点击的item事件

练习xml布局

类似html写法,不过现在的Android studio支持拖拉组件,不过在复杂的布局还是使用写xml比较好。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="60dp"
            android:padding="20dp"
            android:orientation="vertical"
            >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="1dp"
                android:textSize="30sp"
                android:drawableLeft="@mipmap/ic_launcher"
                android:text="Signin"
                />

            <EditText
                android:layout_marginTop="30dp"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:hint="你的邮箱账号"
                />

            <EditText
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:hint="你的密码"
                />

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="登录"
                />


            <RelativeLayout
                android:layout_marginTop="20dp"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="忘记密码"
                    android:textColor="#f90653"
                    />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:text="新用户注册"
                    android:textColor="#f90653"
                    />
            </RelativeLayout>
        </LinearLayout>


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="10sp"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="30dp"
            android:text="登录即代表阅读并同意服务条款"
            />
    </RelativeLayout>

</android.support.constraint.ConstraintLayout>

效果如下 avatar