技术标签: Java java apache android
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的博客-程序员宅基地_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的博客-程序员宅基地_android webview
自己做个性化浏览器
文章浏览阅读178次,点赞3次,收藏2次。本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于python的Flask框架进行开发。前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。后端部分:基于python语言以Flask作为开发框架,同时集成Redis,Echarts等相关技。_水位在线监测预警系统开发
文章浏览阅读2.3k次。介绍一个python的图形化界面,wxpython。 wxpython是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。 wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS_wxpython 调用窗口控件
文章浏览阅读405次。(软件下载方式在文末)自从 PanDownload 被处理之后一直没有超越它的可替代的应用出来但是最近,竟然有人接盘了!重新制作上线推出了更加强劲的复活版!放张图,大家先感受下60MB/..._.较好的容灾处理(眼神暗示)
文章浏览阅读5.2k次。最近熊猫烧香肆虐,WC里CIM那群人集体中招,俺的机子裸奔竟然也没事,呵呵。刚好python的邮件列表上有人给“熊猫”玩文字游戏,觉得特有意思,拿出来和大家分享一下 。 床前明月光,熊猫在烧香。专杀杀不尽,两眼泪汪汪。 熊猫烧不尽,关机开又生。 宝剑锋从磨砺出,熊猫香自网上来。 无边香火烧烧下,不尽熊猫滚滚来。身心俱疲终不悔,为猫烧得人憔悴。 相见时难杀亦难,熊猫烧
文章浏览阅读7.8k次。前端时间参加了公司的管理培训,讲非职权影响力。对于领导者来讲,如果不能提高自己的影响力,那么是没办法做到让下属信服和追随的。整理了一下培训的收获。 影响力的定义运用一些别人所乐于接受的方式,改变他人的思想和行动,具体有个性、思想,以及行动。这些方式包括:举例引证、造成恐惧、赞美肯定、权势财富等。 影响力的6大武器互惠 承诺一致 社会认同 喜好 权威 稀缺另外次要..._职权影响力
文章浏览阅读765次,点赞2次,收藏7次。先放个效果图吧制作记事本一共分为五个部分。1、第一部分就是添加内容。目的是输入内容后按下enter能够在目录下出现对应的内容,此部分应用v-for,v-model以及v-text完成,html程序如下<div id="app"> <input id="text" type="text" v-model="addValue" @keyup.enter="add" placeholder="请输入内容"> <ul> <li v-f_vue选中文字做笔记
文章浏览阅读1.1w次,点赞6次,收藏31次。前面我们分析了三个播放器的av sync逻辑,可以看到他们都各有不同,那么究竟哪种方法可以达到最好的avsync结果?哪些逻辑是必要的?如果我们想自己从零开始写一个av同步的播放器,都需要做哪些工作?本文通过一个demo解答上面的问题_getplaybackheadposition
文章浏览阅读997次。[root@platform-103 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 252:0 0 60G 0 disk├─vda1 252:1 0 500M 0 part /boo..._linux重启后盘符交换
文章浏览阅读1.8k次,点赞3次,收藏15次。目录散列表散列函数哈希冲突开放地址法线性探测二次探测双重散列链表法装载因子散列表 前面数组、链表、栈、队列都是序列式容器,存储的都是一个元素。而散列表又叫哈希表(hash table),是一种关联式容器,存储的是一对值,一般是一个key对应一个value(又叫键值对)。 c++ stl中的map就是一个散列表,举个例子:std::map<std::string,int> m;m["小明"]=170;std::cout<<"小明的身高是"<<m["小明"]&_设计算法,将数组a 进行散列存储,以解决
文章浏览阅读8k次,点赞4次,收藏26次。它作为可以将域名和IP地址相互映射的一个分布式数据库,是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的系统,搭载域名系统的机器称之为域名服务器,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串。,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。..._域名
文章浏览阅读3.3k次。点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达本文转载自:AI人工智能初学者Rethinking BiSeNet For Real-time Semantic Seg..._语义分割的fps
文章浏览阅读6.6k次,点赞2次,收藏27次。 根据网络资源整合了一份, 并开发了自己的demo。http://download.csdn.net/detail/zdw86/9833470 一、添加控件(一)创建工程 (二)插入控件 (三)添加类 点完确认之后,要等很长一段时间.期间不要触碰VC++6.0否则程序..._vc 6.0 teechart8