安卓开发笔记

一、安卓工程构建和第一 APP 运行

1.构建容易,包名不能包含中文
2.模拟器一般用MuMu模拟器,eclipse 和MuMu模拟器建立连接 adb connect 127.0.0.1:7555
3.连接失败要重启 adb adb kill-server adb start-server
4.运行,工程名字上右键,run as android appclication

二、安卓的工程目录文件夹介绍

src: 存放 java 代码的,有包,有文件
gen: 存放自动生成的文件,关心是 R.java,程序页面,按键,文本等空间的 ID
Android 4.4: 存放安卓开发的一些库,供开发者调用
在这里插入图片描述
asserts: 存放一些资源,配置文件,图片
bin: 编译后会生成的一些文件,包括我们关心的 apk
lib: 依赖库
res:
        drawable: 存放 app 程序要用到的一些图片                
                在这里插入图片描述
        layout: 存放布局文件的文件夹,一般一个 activity (安卓页面)对应一个布局
        values:存放一些参数,或者自定义控件的文件
                在这里插入图片描述
AndroidMainfirst.xml: APP 的配置
        权限:网络访问权限,名片访问权限,相机访问权限
        目标机器 SDK 版本
        APP 的名字
        APP 的图标
        配置第一个被加载,启动页面

三、安卓 APP 启动过程

Laucher -> mainifirst -> lauch 标签的 activity 被加载 -> oncreat 被调用 -> java 关联 xml 布局页面 -> 显示 -> 等待用户触摸等操作

四、安卓布局控件

  1. 布局的种类

  1. 布局和页面的关系
  2. 显示一张美女图

控件的宽度(快捷方式:w然后按Alt+/)

           android:layout_width="match_parent"

控件的高度

           android:layout_height="match_parent"

  1. 布局背景颜色,背景图,显示两个美女

  1. 常用布局之相对布局

RelativeLayout中子控件常用属性:

1、相对于父控件,例如:android:layout_alignParentTop=“true”

android:layout_alignParentTop      控件的顶部与父控件的顶部对齐;

android:layout_alignParentBottom  控件的底部与父控件的底部对齐;

android:layout_alignParentLeft      控件的左部与父控件的左部对齐;

android:layout_alignParentRight     控件的右部与父控件的右部对齐;

2、相对给定Id控件,例如:android:layout_above=“@id/**”

android:layout_above 控件的底部置于给定ID的控件之上;

android:layout_below     控件的底部置于给定ID的控件之下;

android:layout_toLeftOf    控件的右边缘与给定ID的控件左边缘对齐;

android:layout_toRightOf  控件的左边缘与给定ID的控件右边缘对齐;

android:layout_alignBaseline  控件的baseline与给定ID的baseline对齐;

android:layout_alignTop        控件的顶部边缘与给定ID的顶部边缘对齐;

android:layout_alignBottom   控件的底部边缘与给定ID的底部边缘对齐;

android:layout_alignLeft       控件的左边缘与给定ID的左边缘对齐;

android:layout_alignRight      控件的右边缘与给定ID的右边缘对齐;

3、居中,例如:android:layout_centerInParent=“true”

android:layout_centerHorizontal 水平居中;

android:layout_centerVertical    垂直居中;

android:layout_centerInParent  父控件的中央;

  1. 基础控件之Button(按键),TextView(文本),EditText(文本框),ImageView(图片)

制作一个登陆界面

布局关系:

  1. padding和margin

在Android界面开发时,为了布局更加合理好看,很多时候会用上Padding和Margin,

padding和margin是什么呢?即内边距和外边距;

某个View指定为padding是针对该View里面的子View距离该View距离而言的,或者是里面的内容距离容器的距离。

某个View指定为margin是针对该View本身距离别人或者父View而言的。

例如下图,输入框里面的文字内容,如果不设置内边距,那么就会紧挨左上角,这样看起来,就很不友好,合理的设置padding看起来会舒服很多。

如果,不设置外边距,会充满整个父布局,也不好看,这时候就需要margin属性(外边距)。

 

<androidx.appcompat.widget.AppCompatEditText
                android:id="@+id/chat_input_edit"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginStart="10dp"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="10dp"
                android:layout_marginBottom="10dp"
                android:paddingHorizontal="12dp"
                android:paddingVertical="10dp"
                android:textColor="@color/white"
                android:textColorHint="#94ffffff"
                android:textSize="14sp" />

padding属性

android:paddingLeft = “10dp”
android:paddingRight = “10dp”
android:paddingTop = “10dp”
android:paddingBottom = “10dp”

margin属性

android:marginLeft = “10dp”
android:marginRight = “10dp”
android:marginTop = “10dp”
android:marginBottom = “10dp”

  1. 做出一个智能家居布局图(新大陆2016年物联网国赛题目)

按键美化

Android 圆角按钮的实现_tracy的博客-CSDN博客_android button 圆角

  1. 常用布局之线性布局
  2. Android 线性布局_Mi_2021的博客-CSDN博客_android 线性布局
  3.    

五、安卓按键响应的几种方式

  1. 在xml中设置按键的onClick绑定的函数

   

2.自定义类实现按键监听事件的接口

  1. 绑定 局部变量button和xml中的button,  findViewById

      2.实现接口类,在类中实现onclicked方法,写业务代码

        3.为1,2两部做的准备进行绑定。使得按键被按下后执行你写的业务代码

package com.example.lin.learn;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

class MyClieckHandler implements View.OnClickListener{
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.button1:
			System.out.println("按键一");
			//Toast.makeText(this, "按键一被按下", 0).show();
			break;
		case R.id.button2:
			System.out.println("按键二");
			//Toast.makeText(this, "按键二被按下", 0).show();
			break;
		}	
	}	
}

public class MainActivity extends Activity {
	Button btn1;
	Button btn2;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        btn1 = (Button) findViewById(R.id.button1);
        btn2 = (Button)findViewById(R.id.button2);
        btn1.setOnClickListener(new MyClieckHandler());
        btn2.setOnClickListener(new MyClieckHandler());
        
    }
}

3.匿名内部类实现按键响应

4.Activity实现了click接口

六、安卓页面跳转

6.1 如何为安卓添加多个页面

在src目录下New->Other->Android->Android Activity

 

 在bin目录下有个AndroidManifest.xml

 以下代码可以设置哪个页面为启动页面

 <intent-filter>
             <action android:name="android.intent.action.MAIN" />

             <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>

6.2 如何跳转

6.2 跳转如何传参

方式一:

方式二:

七、安卓线程

实现页面的诺干秒后的自动跳转效果

run方法(函数)是线程要做的”事情”,相当linuxC线程的回调函数

启动线程

八、Activity(页面)的生命周期

 

package com.example.lin.learn;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("on Create");
        
      }
    @Override
    protected void onStart() {
    	System.out.println("on Start");
    	// TODO Auto-generated method stub
    	super.onStart();
    }
    @Override
    protected void onResume() {
    	// TODO Auto-generated method stub
    	System.out.println("on Resume");
    	super.onResume();
    }
    @Override
    protected void onStop() {
    	// TODO Auto-generated method stub
    	System.out.println("on Stop");
    	super.onStop();
    }
    public void getSecond(View v){
    	//去设置要跳转的页面
        Intent intent = new Intent(this,SecondActivity.class);
        //跳转
        startActivity(intent);
    }
   
}

九、安卓网络编程

javaSocket服务端开发:

使用线程方式: 

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class test {
	public static void main(String[] args) {
		
		try {
			ServerSocket socket = new ServerSocket(8801);
			System.out.println("socket套接字创建成功,等待连接");
			while(true){
				final Socket con = socket.accept();
				System.out.println("有客户端接入");
				new Thread(new Runnable() {
					
					public void run() {
						// TODO Auto-generated method stub
						byte[] data = new byte[128];
						int len = 0;
						InputStream in;
						try {
							in = con.getInputStream();//获取输入流
							len = in.read(data);//读取输入流数据数据
							System.out.println("读到消息:"+new String(data, 0, len));
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}).start();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

JavaSocket 客户端开发:

安卓Socket客户端开发注意事项:

网络访问不能在主线程(UI线程)中进行,否则程序会崩溃

要创建线程来发起网络访问

安卓客户端代码

package com.example.lin;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void SendMesageHandle()
    {
    	try {
			Socket client = new Socket("192.168.100.191", 8081);
			OutputStream out = client.getOutputStream();
		
			String message = "hello world!";
			
			out.write(message.getBytes());
			InputStream in = client.getInputStream();
			int len;
			byte[] data = new byte[128];
			len = in.read(data);
			System.out.println("获得服务端返回数据是:"+new String(data, 0, len));
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    public void SendMesage(View v)
    {
    	new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				SendMesageHandle();
			}
		}).start();
    }
    
}

十、安卓线程无法修改控件,如何解决

安卓的Handler消息处理机制

十一、安卓webView

Android WebView 的使用(超详细用法)_wt-cai的博客-CSDN博客_android webview

自己做个性化浏览器

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从入门到捕蛇者说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值