赞
踩
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 的图标
配置第一个被加载,启动页面
Laucher -> mainifirst -> lauch 标签的 activity 被加载 -> oncreat 被调用 -> java 关联 xml 布局页面 -> 显示 -> 等待用户触摸等操作
控件的宽度(快捷方式:w然后按Alt+/)
android:layout_width="match_parent"
控件的高度
android:layout_height="match_parent"
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 父控件的中央;
制作一个登陆界面
布局关系:
在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”
按键美化
Android 圆角按钮的实现_tracy的博客-CSDN博客_android button 圆角
2.自定义类实现按键监听事件的接口
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线程的回调函数
启动线程
- 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消息处理机制
Android WebView 的使用(超详细用法)_wt-cai的博客-CSDN博客_android webview
自己做个性化浏览器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。