当前位置: 编程技术>移动开发
本页文章导读:
▪java署理 java代理
package net.tools.web;
import java.io.*;
import java.net.*;
public class TunnelClient implements Runnable
{
private static String tunnelurl;
private static void toBytes(long l, byte[] b, int offset, int len)
{
for(int i = 0; i &l.........
▪ 6. 正题 Theme 6. 主题 Theme
主题样式综述 Theming overviewJquery Mobile中每一个布局和组件都被设计为一个全新的面向对象的css框架,使我们能够给站点和应用程序适用完全统一的视觉设计主题。Jquery Mobile的主题.........
▪ 封闭应用的4种方法 关闭应用的4种方法
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现.........
[1]java署理
来源: 互联网 发布时间: 2014-02-18
java代理
package net.tools.web;
import java.io.*;
import java.net.*;
public class TunnelClient implements Runnable
{
private static String tunnelurl;
private static void toBytes(long l, byte[] b, int offset, int len)
{
for(int i = 0; i < len; i++)
b[i + offset] = (byte) (l >> (len * 8 - 8 - i * 8));
}
private static long fromBytes(byte[] b, int offset, int len)
{
long l = 0;
for(int i = 0; i < len; i++)
l |= ((long) (b[i + offset] & 0x00ff)) << (len * 8 - 8 - i * 8);
return l;
}
private static void writeTo(InputStream in, OutputStream out, byte[] buf) throws IOException
{
if(buf == null)
buf = new byte[65536];
int len;
while((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
out.flush();
}
}
private static int readByte(InputStream in) throws IOException
{
int b = in.read();
if(b < 0)
throw new EOFException();
return b;
}
private static void fill(InputStream in, byte[] buf, int offset, int len) throws IOException
{
while(len > 0)
{
int n = in.read(buf, offset, len);
if(n <= 0)
throw new EOFException();
offset += n;
len -= n;
}
}
private static class Tunnelling implements Runnable
{
private Socket ssock;
private InputStream in;
private OutputStream out;
private byte[] sessionId;
private String tunnelurl;
private Tunnelling(Socket ssock, InputStream in, OutputStream out, byte[] sessionId, String tunnelurl)
{
this.ssock = ssock;
this.in = in;
this.out = out;
this.sessionId = sessionId;
this.tunnelurl = tunnelurl;
}
public void run()
{
byte[] buf = new byte[65536];
try
{
while(true)
{
URLConnection conn = new URL(/blog_article/tunnelurl/index.html).openConnection();
conn.setDoOutput(true);
OutputStream out = conn.getOutputStream();
out.write(2);
out.write(sessionId);
out.flush();
InputStream in = conn.getInputStream();
if(in.read() != 1)
throw new EOFException();
writeTo(in, ssock.getOutputStream(), buf);
}
}
catch (IOException e)
{
//e.printStackTrace();
}
finally
{
try
{
ssock.close();
}
catch (Exception e)
{}
try
{
in.close();
}
catch (Exception e)
{}
try
{
out.close();
}
catch (Exception e)
{}
try
{
URLConnection conn = new URL(/blog_article/tunnelurl/index.html).openConnection();
OutputStream out = conn.getOutputStream();
out.write(4);
out.write(sessionId);
out.flush();
conn.getInputStream();
}
catch (Exception e)
{}
}
}
}
private Socket ssock;
private TunnelClient(Socket ssock)
{
this.ssock = ssock;
}
public void run()
{
InputStream in = null;
try
{
OutputStream sout = ssock.getOutputStream();
InputStream sin = ssock.getInputStream();
readByte(sin);
int len = readByte(sin);
for(int i = 0; i < len; i++)
readByte(sin);
sout.write(5);
sout.write(0);
readByte(sin);
int cmd = readByte(sin);
readByte(sin);
int addrtype = readByte(sin);
String remoteaddress = null;
byte[] buf = new byte[65536];
switch(addrtype)
{
case 1:
{
remoteaddress = "" + readByte(sin);
for(int i = 1; i < 4; i++)
{
remoteaddress += ".";
remoteaddress += readByte(sin);
}
}
break;
case 3:
{
len = readByte(sin);
fill(sin, buf, 0, len);
remoteaddress = new String(buf, 0, len);
}
break;
case 4:
throw new IOException("No accept address type 4");
default:
throw new IOException("No accept address type " + addrtype);
}
fill(sin, buf, 0, 2);
switch(cmd)
{
case 1:
URLConnection conn = new URL(/blog_article/tunnelurl/index.html).openConnection();
conn.setDoOutput(true);
OutputStream out = conn.getOutputStream();
out.write(1);
byte[] addr = remoteaddress.getBytes();
out.write(addr.length);
out.write(addr);
out.write(buf, 0, 2);//port
out.flush();
in = conn.getInputStream();
if(readByte(in) != 1)
throw new EOFException();
byte[] sessionId = new byte[8];
fill(in, sessionId, 0, 8);
sout.write(5);
sout.write(0);
sout.write(0);
sout.write(1);
sout.write(0);
sout.write(0);
sout.write(0);
sout.write(0);
sout.write(0);
sout.write(0);
sout.flush();
new Thread(new Tunnelling(ssock, in, sout, sessionId, tunnelurl)).start();
while((len = sin.read(buf)) > 0)
{
conn = new URL(/blog_article/tunnelurl/index.html).openConnection();
conn.setDoOutput(true);
out = conn.getOutputStream();
out.write(3);
out.write(sessionId);
out.write(buf, 0, len);
out.flush();
if(conn.getInputStream().read() != 1)
throw new EOFException();
}
break;
case 2:
throw new IOException("No accept command.");
case 3:
throw new IOException("No accept command.");
default:
throw new IOException("No accept command.");
}
}
catch (IOException e)
{
//e.printStackTrace();
}
finally
{
try
{
ssock.close();
}
catch (Exception e)
{}
try
{
in.close();
}
catch (Exception e)
{}
}
}
public static void main(String[] args) throws Exception
{
ServerSocket sssock = new ServerSocket(Integer.parseInt(args[0]));
tunnelurl = args[1];
while(true)
{
Socket ssock = sssock.accept();
new Thread(new TunnelClient(ssock)).start();
}
}
}
[2] 6. 正题 Theme
来源: 互联网 发布时间: 2014-02-18
6. 主题 Theme
主题样式综述 Theming overview
Jquery Mobile中每一个布局和组件都被设计为一个全新的面向对象的css框架,使我们能够给站点和应用程序适用完全统一的视觉设计主题。Jquery Mobile的主题样式系统与Jquery UI的ThemeRoller 系统很类似,但是做出了几点重要的改进.
--------------------------------------------
他使用的css3来显示圆角,文字和盒阴影和颜色渐变,而不是图片,使得主题文件非常轻量级,减轻了服务器的负担
--------------------------------------------
主体框架包含了几套颜色色板。每一套都包含了可以自由混搭和匹配的头部栏,body,按钮状态。用来构建视觉纹理,创建丰富的设计
--------------------------------------------
开放的主题框架允许你创建最多6套主题样式,给设计增加近乎无限的多样性
--------------------------------------------
一套简化的图标集,包含了移动设备上大部分需要使用的图标,并且sprite到一张图片里减少了图片大小
主题与色板 Themes & swatches
主题系统的关键在于把针对颜色与材质的规则,和针对布局结构的规则(例如padding和尺寸)的定义相分离。这使得主体的颜色和材质在样式表中只需要定义一次,就可以在站点中混合,匹配以及结合,得到广泛的使用?
--------------------------------------------
每一套主题样式包括几项全局设置,包括字体阴影,按钮和盒模型的圆角值。另外,主题也包括几套颜色色板,每一个都定义了工具栏,内容区块,按钮和列表项的颜色以及字体的阴影
--------------------------------------------
Jquery Mobile默认内建了5套主题样式,用(a,b,c,d,e)引用。为了使我们的颜色主题能够保持一直地映射到我们的组件中,我们遵从的规约是:a主题是视觉上最高级别的主题(黑色),b主题为次级用主题(蓝色),c主题为基准主题,在很多情况下是默认使用的,主题d为备用的次级内容用主题,主题e为强调用主题。你也可以手动添加主题用于强调,或者是特殊的场合。例如:你可以手动添加新的主题“i",用于制作红色的工具栏或者按钮,用于错误提示
--------------------------------------------
全新的ThemeRoller工具会在2011年 Jquery Mobile 1.0 release 版本时发布。在这之前,也很容易手动编辑默认的基准样式而且/或者编辑css文件增加主题:拷贝主题样式那一段css,将它用新的字母重命名,然后更换颜色
Bars
默认的主题包含了一下的5种bar的样
默认情况下,Jquery Mobile给所有的头部栏和尾部栏分配的是a主题,因为他们在应用中是视觉优先级最高的。如果要给bar设置一个不同的主题,只需要给头部栏和尾部栏容器增加 data-theme 属性,然后设定一个主题样式字母即可,例如b,d等? 更多参见工具栏主题样式
内容 Content Blocks
默认主题也包含了用于内容的颜色样式,使得在设计上与头部栏的颜色相匹配
如果没有特别指定的话,Jquery Mobile会默认给content分配主题c,使得在视觉上与头部栏区分开来
列表和按钮 Lists & Buttons
每一套主题也包含了针对交互元素,比如说列表项和按钮的默认样式
默认情况下,所有放置在一个bar里的按钮都会被自动分配一个和它所在的bar或者box的主题样式所匹配的主题,用以 在视觉上形成一个整体,像变色龙。
这样的默认行为可以使你很容易地通过设置父容器的主题样式改变整个页面的主题,因为你知道按钮在不同主题的视觉配重都是一样的。而因为表单元素用按钮的样式,他们也会适配他们的父容器
如果你要给按钮在视觉上进行强调,来帮助他从工具栏中凸现出来,可以给链接增加data-theme="a"属性。给按钮在标记中设置了不同的主题后,父容器主题更改时框架不会覆盖其颜色,因为你决定了要设置它
全局“活动”状态 Global "Active" state
Jquery Mobile框架用一个单独的主题叫做"active"(蓝色),用来总是指示被选中的状态,无视该组件的主题. 我们给导航与表单元素应用了这样的"活动"主题,不管是否有指示被选中的状态的需要。因为这一个主题样式是设计用来给用户清晰的,一致的反馈的,所以不能通过标记来覆盖,在主题中该项只要设置一次,,Jquery Mobile会在不管被选中或者活动状态需要时都应用他。该样式在样式表中的ui-btn-active规则来设置
“活动”状态用来给可切换的元素标记“on”状态
图标 Icons
Jquery Mobile包含了一套标准的图标,可以分配给按钮。为了尽量减小核心图标的文件大小,Jquery Mobile只包含了图标白色的图案,然后在图标背后自动添加了半透明的黑色圆形背景,使得图标在所有背景色下都可以看的明晰
主题样式综述 Theming overview
Jquery Mobile中每一个布局和组件都被设计为一个全新的面向对象的css框架,使我们能够给站点和应用程序适用完全统一的视觉设计主题。Jquery Mobile的主题样式系统与Jquery UI的ThemeRoller 系统很类似,但是做出了几点重要的改进.
--------------------------------------------
他使用的css3来显示圆角,文字和盒阴影和颜色渐变,而不是图片,使得主题文件非常轻量级,减轻了服务器的负担
--------------------------------------------
主体框架包含了几套颜色色板。每一套都包含了可以自由混搭和匹配的头部栏,body,按钮状态。用来构建视觉纹理,创建丰富的设计
--------------------------------------------
开放的主题框架允许你创建最多6套主题样式,给设计增加近乎无限的多样性
--------------------------------------------
一套简化的图标集,包含了移动设备上大部分需要使用的图标,并且sprite到一张图片里减少了图片大小
主题与色板 Themes & swatches
主题系统的关键在于把针对颜色与材质的规则,和针对布局结构的规则(例如padding和尺寸)的定义相分离。这使得主体的颜色和材质在样式表中只需要定义一次,就可以在站点中混合,匹配以及结合,得到广泛的使用?
--------------------------------------------
每一套主题样式包括几项全局设置,包括字体阴影,按钮和盒模型的圆角值。另外,主题也包括几套颜色色板,每一个都定义了工具栏,内容区块,按钮和列表项的颜色以及字体的阴影
--------------------------------------------
Jquery Mobile默认内建了5套主题样式,用(a,b,c,d,e)引用。为了使我们的颜色主题能够保持一直地映射到我们的组件中,我们遵从的规约是:a主题是视觉上最高级别的主题(黑色),b主题为次级用主题(蓝色),c主题为基准主题,在很多情况下是默认使用的,主题d为备用的次级内容用主题,主题e为强调用主题。你也可以手动添加主题用于强调,或者是特殊的场合。例如:你可以手动添加新的主题“i",用于制作红色的工具栏或者按钮,用于错误提示
--------------------------------------------
全新的ThemeRoller工具会在2011年 Jquery Mobile 1.0 release 版本时发布。在这之前,也很容易手动编辑默认的基准样式而且/或者编辑css文件增加主题:拷贝主题样式那一段css,将它用新的字母重命名,然后更换颜色
Bars
默认的主题包含了一下的5种bar的样
默认情况下,Jquery Mobile给所有的头部栏和尾部栏分配的是a主题,因为他们在应用中是视觉优先级最高的。如果要给bar设置一个不同的主题,只需要给头部栏和尾部栏容器增加 data-theme 属性,然后设定一个主题样式字母即可,例如b,d等? 更多参见工具栏主题样式
内容 Content Blocks
默认主题也包含了用于内容的颜色样式,使得在设计上与头部栏的颜色相匹配
如果没有特别指定的话,Jquery Mobile会默认给content分配主题c,使得在视觉上与头部栏区分开来
列表和按钮 Lists & Buttons
每一套主题也包含了针对交互元素,比如说列表项和按钮的默认样式
默认情况下,所有放置在一个bar里的按钮都会被自动分配一个和它所在的bar或者box的主题样式所匹配的主题,用以 在视觉上形成一个整体,像变色龙。
这样的默认行为可以使你很容易地通过设置父容器的主题样式改变整个页面的主题,因为你知道按钮在不同主题的视觉配重都是一样的。而因为表单元素用按钮的样式,他们也会适配他们的父容器
如果你要给按钮在视觉上进行强调,来帮助他从工具栏中凸现出来,可以给链接增加data-theme="a"属性。给按钮在标记中设置了不同的主题后,父容器主题更改时框架不会覆盖其颜色,因为你决定了要设置它
全局“活动”状态 Global "Active" state
Jquery Mobile框架用一个单独的主题叫做"active"(蓝色),用来总是指示被选中的状态,无视该组件的主题. 我们给导航与表单元素应用了这样的"活动"主题,不管是否有指示被选中的状态的需要。因为这一个主题样式是设计用来给用户清晰的,一致的反馈的,所以不能通过标记来覆盖,在主题中该项只要设置一次,,Jquery Mobile会在不管被选中或者活动状态需要时都应用他。该样式在样式表中的ui-btn-active规则来设置
“活动”状态用来给可切换的元素标记“on”状态
图标 Icons
Jquery Mobile包含了一套标准的图标,可以分配给按钮。为了尽量减小核心图标的文件大小,Jquery Mobile只包含了图标白色的图案,然后在图标背后自动添加了半透明的黑色圆形背景,使得图标在所有背景色下都可以看的明晰
[3] 封闭应用的4种方法
来源: 互联网 发布时间: 2014-02-18
关闭应用的4种方法
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。
1. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
2. 任务管理器方法
首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上
3. 根据Activity的声明周期
3. 我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口
Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent);
接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
4.自定义一个Actiivty 栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity。并提供退出所有Activity的方法。代码如下:
public class ScreenManager {
private static Stack activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
instance=new ScreenManager();
}
return instance;
}
//退出栈顶Activity
public void popActivity(Activity activity){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//获得当前栈顶Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//将当前Activity推入栈中
public void pushActivity(Activity activity){
activityStack=new Stack();
}
activityStack.add(activity);
}
//退出栈中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
break;
}
break;
}
popActivity(activity);
}
}
}
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。
1. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
2. 任务管理器方法
首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上
3. 根据Activity的声明周期
3. 我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口
Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent);
接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
4.自定义一个Actiivty 栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity。并提供退出所有Activity的方法。代码如下:
public class ScreenManager {
private static Stack activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
instance=new ScreenManager();
}
return instance;
}
//退出栈顶Activity
public void popActivity(Activity activity){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//获得当前栈顶Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//将当前Activity推入栈中
public void pushActivity(Activity activity){
activityStack=new Stack();
}
activityStack.add(activity);
}
//退出栈中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
break;
}
break;
}
popActivity(activity);
}
}
}
最新技术文章: