当前位置:   article > 正文

安卓开发笔记_@override protected void oncreate(bundle savedinst

@override protected void oncreate(bundle savedinstancestate) { super.oncreat

一、安卓工程构建和第一 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属性(外边距)。

 

  1. <androidx.appcompat.widget.AppCompatEditText
  2. android:id="@+id/chat_input_edit"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:layout_marginStart="10dp"
  6. android:layout_marginTop="10dp"
  7. android:layout_marginEnd="10dp"
  8. android:layout_marginBottom="10dp"
  9. android:paddingHorizontal="12dp"
  10. android:paddingVertical="10dp"
  11. android:textColor="@color/white"
  12. android:textColorHint="#94ffffff"
  13. 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两部做的准备进行绑定。使得按键被按下后执行你写的业务代码

  1. package com.example.lin.learn;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.Toast;
  7. class MyClieckHandler implements View.OnClickListener{
  8. @Override
  9. public void onClick(View v) {
  10. // TODO Auto-generated method stub
  11. switch(v.getId()){
  12. case R.id.button1:
  13. System.out.println("按键一");
  14. //Toast.makeText(this, "按键一被按下", 0).show();
  15. break;
  16. case R.id.button2:
  17. System.out.println("按键二");
  18. //Toast.makeText(this, "按键二被按下", 0).show();
  19. break;
  20. }
  21. }
  22. }
  23. public class MainActivity extends Activity {
  24. Button btn1;
  25. Button btn2;
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_main);
  30. btn1 = (Button) findViewById(R.id.button1);
  31. btn2 = (Button)findViewById(R.id.button2);
  32. btn1.setOnClickListener(new MyClieckHandler());
  33. btn2.setOnClickListener(new MyClieckHandler());
  34. }
  35. }

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

4.Activity实现了click接口

六、安卓页面跳转

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

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

 

 在bin目录下有个AndroidManifest.xml

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

  1. <intent-filter>
  2. <action android:name="android.intent.action.MAIN" />
  3. <category android:name="android.intent.category.LAUNCHER" />
  4. </intent-filter>

6.2 如何跳转

6.2 跳转如何传参

方式一:

方式二:

七、安卓线程

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

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

启动线程

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

 

  1. package com.example.lin.learn;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. public class MainActivity extends Activity {
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_main);
  11. System.out.println("on Create");
  12. }
  13. @Override
  14. protected void onStart() {
  15. System.out.println("on Start");
  16. // TODO Auto-generated method stub
  17. super.onStart();
  18. }
  19. @Override
  20. protected void onResume() {
  21. // TODO Auto-generated method stub
  22. System.out.println("on Resume");
  23. super.onResume();
  24. }
  25. @Override
  26. protected void onStop() {
  27. // TODO Auto-generated method stub
  28. System.out.println("on Stop");
  29. super.onStop();
  30. }
  31. public void getSecond(View v){
  32. //去设置要跳转的页面
  33. Intent intent = new Intent(this,SecondActivity.class);
  34. //跳转
  35. startActivity(intent);
  36. }
  37. }

九、安卓网络编程

javaSocket服务端开发:

使用线程方式: 

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. public class test {
  6. public static void main(String[] args) {
  7. try {
  8. ServerSocket socket = new ServerSocket(8801);
  9. System.out.println("socket套接字创建成功,等待连接");
  10. while(true){
  11. final Socket con = socket.accept();
  12. System.out.println("有客户端接入");
  13. new Thread(new Runnable() {
  14. public void run() {
  15. // TODO Auto-generated method stub
  16. byte[] data = new byte[128];
  17. int len = 0;
  18. InputStream in;
  19. try {
  20. in = con.getInputStream();//获取输入流
  21. len = in.read(data);//读取输入流数据数据
  22. System.out.println("读到消息:"+new String(data, 0, len));
  23. } catch (IOException e) {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. }
  27. }
  28. }).start();
  29. }
  30. } catch (IOException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34. }
  35. }

JavaSocket 客户端开发:

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

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

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

安卓客户端代码

  1. package com.example.lin;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.Socket;
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. public class MainActivity extends Activity {
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. }
  15. public void SendMesageHandle()
  16. {
  17. try {
  18. Socket client = new Socket("192.168.100.191", 8081);
  19. OutputStream out = client.getOutputStream();
  20. String message = "hello world!";
  21. out.write(message.getBytes());
  22. InputStream in = client.getInputStream();
  23. int len;
  24. byte[] data = new byte[128];
  25. len = in.read(data);
  26. System.out.println("获得服务端返回数据是:"+new String(data, 0, len));
  27. }catch (IOException e) {
  28. // TODO Auto-generated catch block
  29. e.printStackTrace();
  30. }
  31. }
  32. public void SendMesage(View v)
  33. {
  34. new Thread(new Runnable() {
  35. @Override
  36. public void run() {
  37. // TODO Auto-generated method stub
  38. SendMesageHandle();
  39. }
  40. }).start();
  41. }
  42. }

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

安卓的Handler消息处理机制

十一、安卓webView

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

自己做个性化浏览器

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/685817
推荐阅读
相关标签
  

闽ICP备14008679号