不加任何旋转屏幕的处理代码的时候,旋转屏幕将会导致系统把当前activity关闭,重新打开。
如果只是简单的界面调整,我们可以阻止此问题的发生,屏幕旋转而自己调整屏幕的元素重构。
首先我们需要修改AndroidManifest.xml文件:
这样是让程序能够响应旋转屏幕的事件。
然后重写onConfigurationChanged方法:
这个就可以自己决定是否重写处理布局了。
如果只是简单的界面调整,我们可以阻止此问题的发生,屏幕旋转而自己调整屏幕的元素重构。
首先我们需要修改AndroidManifest.xml文件:
<activity android:name=".Magazine">
</activity>
//修改为:
<activity android:name=".Magazine"
android:configChanges="orientation|keyboard">
</activity>
</activity>
//修改为:
<activity android:name=".Magazine"
android:configChanges="orientation|keyboard">
</activity>
这样是让程序能够响应旋转屏幕的事件。
然后重写onConfigurationChanged方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
Log.v(" == onConfigurationChanged");
processLayout();
}
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
Log.v(" == onConfigurationChanged");
processLayout();
}
这个就可以自己决定是否重写处理布局了。
1. 什么是density
引用
1) density
density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per inch,通常屏幕大时,density就大,屏幕小时,density就小,通常
屏幕实际分辨率为240px*400px时,density=120
屏幕实际分辨率为320px*533px,density=160
屏幕实际分辨率为480px*800px,density=240
2) 分辨率
是整个屏是多少点,比如800x480,它是软件的显示单位
3) 从Android1.6版本开始支持density(对应API Level 4)
用于解决应用在屏幕大小不同的硬件上正常显示的问题
density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per inch,通常屏幕大时,density就大,屏幕小时,density就小,通常
屏幕实际分辨率为240px*400px时,density=120
屏幕实际分辨率为320px*533px,density=160
屏幕实际分辨率为480px*800px,density=240
2) 分辨率
是整个屏是多少点,比如800x480,它是软件的显示单位
3) 从Android1.6版本开始支持density(对应API Level 4)
用于解决应用在屏幕大小不同的硬件上正常显示的问题
by 毕淑敏
"衰老很重要的标志,就是求稳怕变。所以,你想保持年轻吗?你希望自己有活力吗?你期待着清晨能在新生活的憧憬中醒来吗?有一个好办法——每天都冒一点险。"
以上这段话,见于一本国外的心理学小册子。像给某种青春大力丸做广告。本待一笑了之,但结尾的那句话吸引了我——每天都冒一点险。
"险"有灾难狠毒之意。如果把它比成一种处境一种状态,你说是现代人碰到它的时候多呢,还是古代甚至原始时代碰到的多呢?粗粗一想,好像是古代多吧。茹毛饮血刀耕火种时,危机四伏。细一想,不一定。那时的险多属自然灾害,虽然凶残,但比较单纯。现代了,天然险这种东西,也跟热带雨林似的,快速稀少,人工险增多,险种也丰富多了。
"衰老很重要的标志,就是求稳怕变。所以,你想保持年轻吗?你希望自己有活力吗?你期待着清晨能在新生活的憧憬中醒来吗?有一个好办法——每天都冒一点险。"
以上这段话,见于一本国外的心理学小册子。像给某种青春大力丸做广告。本待一笑了之,但结尾的那句话吸引了我——每天都冒一点险。
"险"有灾难狠毒之意。如果把它比成一种处境一种状态,你说是现代人碰到它的时候多呢,还是古代甚至原始时代碰到的多呢?粗粗一想,好像是古代多吧。茹毛饮血刀耕火种时,危机四伏。细一想,不一定。那时的险多属自然灾害,虽然凶残,但比较单纯。现代了,天然险这种东西,也跟热带雨林似的,快速稀少,人工险增多,险种也丰富多了。
普通方法弹出alert后,取消标题还会有小部分高度,这个倒会好些:
先定义一个样式 res/values/styles.xml
弹出alert时稍微修改一下:
你可以弹出一个窗体,也和alert类似的效果。
首先修改一下窗体的属性:
修改AndroidManifest.xml 文件:
这是声明样式,下面是打开activity后,oncreate时加点参数:
这样会出现背景模糊的效果。
先定义一个样式 res/values/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="FullHeightDialog"
parent="android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
<resources>
<style name="FullHeightDialog"
parent="android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
弹出alert时稍微修改一下:
Dialog dialog = new Dialog(this, R.style.FullHeightDialog);
dialog.setContentView(R.layout.article_comment);
dialog.show();
dialog.setContentView(R.layout.article_comment);
dialog.show();
你可以弹出一个窗体,也和alert类似的效果。
首先修改一下窗体的属性:
修改AndroidManifest.xml 文件:
<activity android:name=".Test"
android:theme="@android:style/Theme.Dialog">
</activity>
android:theme="@android:style/Theme.Dialog">
</activity>
这是声明样式,下面是打开activity后,oncreate时加点参数:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
this.setContentView(R.layout.article_comment);
}
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
this.setContentView(R.layout.article_comment);
}
这样会出现背景模糊的效果。
程序如何把自身进行一次截图?或者对某个view对象截图?

由左至右,分别是 bt4 iv iv2 iv3
iv是屏幕截图,上半部分是黑色,下面是bt4的图
iv2填充的是未显示过的一个按钮,截取不到,呈黑色
iv3是复制bt4,跟bt4一样
上述代码包含了bitmap转换为drawable的方式
推荐阅读:
1 How-to convert a View to a Bitmap Image in our Android Application
2 Android之代码实现的截图方式
3 Android Bitmap和Canvas
4 android 保存图片 合成图片
5 Android图片总结 图片缩放和添加文字
6 Drawable、Bitmap、byte[]之间的转换
ImageView iv = (ImageView) findViewById(R.id.ImageView01);
ImageView iv2 = (ImageView) findViewById(R.id.ImageView02);
ImageView iv3 = (ImageView) findViewById(R.id.ImageView03);
//draw的方式对整屏截取,但信息栏为黑色
View cv = getWindow().getDecorView();
Bitmap b = Bitmap.createBitmap(200, 200, Bitmap.Config.RGB_565);
cv.draw(new Canvas(b));
iv.setImageBitmap(b);
//对隐藏的未画过的对象,截出的是黑色
Bitmap image = Bitmap.createBitmap(200, 200, Bitmap.Config.RGB_565);
bt3.draw(new Canvas(image));
iv2.setImageBitmap(image);
//get drawable cache , bitmap to drawable
bt4.setDrawingCacheEnabled(true);
Bitmap bitmap = bt4.getDrawingCache();
Drawable drawable = (Drawable) new BitmapDrawable(bitmap);
iv3.setBackgroundDrawable(drawable);
ImageView iv2 = (ImageView) findViewById(R.id.ImageView02);
ImageView iv3 = (ImageView) findViewById(R.id.ImageView03);
//draw的方式对整屏截取,但信息栏为黑色
View cv = getWindow().getDecorView();
Bitmap b = Bitmap.createBitmap(200, 200, Bitmap.Config.RGB_565);
cv.draw(new Canvas(b));
iv.setImageBitmap(b);
//对隐藏的未画过的对象,截出的是黑色
Bitmap image = Bitmap.createBitmap(200, 200, Bitmap.Config.RGB_565);
bt3.draw(new Canvas(image));
iv2.setImageBitmap(image);
//get drawable cache , bitmap to drawable
bt4.setDrawingCacheEnabled(true);
Bitmap bitmap = bt4.getDrawingCache();
Drawable drawable = (Drawable) new BitmapDrawable(bitmap);
iv3.setBackgroundDrawable(drawable);

由左至右,分别是 bt4 iv iv2 iv3
iv是屏幕截图,上半部分是黑色,下面是bt4的图
iv2填充的是未显示过的一个按钮,截取不到,呈黑色
iv3是复制bt4,跟bt4一样
上述代码包含了bitmap转换为drawable的方式
推荐阅读:
1 How-to convert a View to a Bitmap Image in our Android Application
2 Android之代码实现的截图方式
3 Android Bitmap和Canvas
4 android 保存图片 合成图片
5 Android图片总结 图片缩放和添加文字
6 Drawable、Bitmap、byte[]之间的转换
android模拟器如果自定义一个分辨率,那可能就是没有键盘的。
那怎么操作菜单和返回什么的呢?
下面是阿权的测试结果,这个是有键盘的按键对应的:
ESC 返回键
F2 menu键
F3 拨号键
F4 挂断键
F5 搜索键
F6 滚轮
F7 锁屏
F8 禁止网络
ctrl+F12 可以切换屏幕横向和竖向
那怎么操作菜单和返回什么的呢?
下面是阿权的测试结果,这个是有键盘的按键对应的:
ESC 返回键
F2 menu键
F3 拨号键
F4 挂断键
F5 搜索键
F6 滚轮
F7 锁屏
F8 禁止网络
ctrl+F12 可以切换屏幕横向和竖向
本文整理中。。
前言
发送一封邮件能够正常的到达用户的收件箱,期间会受哪些因素影响呢?
1 PHP编程,按正常方式发出
2 邮件发送程序(本文是postfix)处理并发出
3 邮件接收服务器确认是否垃圾邮件
4 用户邮件终端解析邮件内容
怎么样的邮件不正常?
1 PHP没有做好编码处理,直接导致乱码问题
2 postfix域配置不正常,导致邮件服务器验证失败,断定为垃圾邮件
3 客户端解析内容的兼容性差
如何进行环境配置
先安装postfix,系统自带的sendmail也可以发送,但明显比postfix用起来麻烦
简单的发邮件,两者都可以
centOS里执行 yum install postfix 即可。
假设我们要配置的发送人的邮箱是 root@notify.aslibra.com
那需要设定两个内容:
1 设定机器名为notify.aslibra.com,@后面那段
永久设定可以在 /etc/sysconfig/network 修改,否则以上设置重启后会被修改
这个hostname很重要,邮件服务器主要审查的就是此名称是否为合法的发送者
默认是localhost,不改名称很容易就变成垃圾邮件
2 notify.aslibra.com 的TXT记录,包含发邮件的服务器的公网IP,假设是1.2.3.4
添加一条TXT的记录为“v=spf1 ipv4:1.2.3.4 a mx ~all”
此操作是声明哪些ip可以用此域发邮件
更多请参考《postfix基本配置和设定DNS》
启动服务测试
启动postfix或者sendmail,然后命令行方式发送一封英文邮件试试
如果能够收到,那说明发送邮件已经正常
下面可以用php来完成更加复杂的邮件,比如html和中文支持
发送实例分析
关于 base64_encode 函数:
参考阅读内容:
1 HTML EMAIL WITH JPEG ATTACHMENTS TUTORIAL
2 用PHP MAIL()函数发送HTML邮件
3 解決寄件者名稱與信件標題亂碼問題
4 PHP发送UTF-8编码中文邮件标题乱码的解决
前言
发送一封邮件能够正常的到达用户的收件箱,期间会受哪些因素影响呢?
1 PHP编程,按正常方式发出
2 邮件发送程序(本文是postfix)处理并发出
3 邮件接收服务器确认是否垃圾邮件
4 用户邮件终端解析邮件内容
怎么样的邮件不正常?
1 PHP没有做好编码处理,直接导致乱码问题
2 postfix域配置不正常,导致邮件服务器验证失败,断定为垃圾邮件
3 客户端解析内容的兼容性差
如何进行环境配置
先安装postfix,系统自带的sendmail也可以发送,但明显比postfix用起来麻烦
简单的发邮件,两者都可以
centOS里执行 yum install postfix 即可。
假设我们要配置的发送人的邮箱是 root@notify.aslibra.com
那需要设定两个内容:
1 设定机器名为notify.aslibra.com,@后面那段
hostname notify.aslibra.com
永久设定可以在 /etc/sysconfig/network 修改,否则以上设置重启后会被修改
这个hostname很重要,邮件服务器主要审查的就是此名称是否为合法的发送者
默认是localhost,不改名称很容易就变成垃圾邮件
2 notify.aslibra.com 的TXT记录,包含发邮件的服务器的公网IP,假设是1.2.3.4
添加一条TXT的记录为“v=spf1 ipv4:1.2.3.4 a mx ~all”
此操作是声明哪些ip可以用此域发邮件
更多请参考《postfix基本配置和设定DNS》
启动服务测试
启动postfix或者sendmail,然后命令行方式发送一封英文邮件试试
如果能够收到,那说明发送邮件已经正常
下面可以用php来完成更加复杂的邮件,比如html和中文支持
发送实例分析
关于 base64_encode 函数:
引用
本函数将字符串以 MIME BASE64 编码。此编码方式可以让中文字或者图片也能在网络上顺利传输。在 BASE64 编码后的字符串只包含英文字母大小写、阿拉伯数字、加号与反斜线,共 64 个基本字符,不包含其它特殊的字符,因而才取名 BASE64。编码后的字符串比原来的字符串长度再加 1/3 左右。更多的 BASE64 编码信息可以参考 RFC2045 文件之 6.8 节。
参考阅读内容:
1 HTML EMAIL WITH JPEG ATTACHMENTS TUTORIAL
2 用PHP MAIL()函数发送HTML邮件
3 解決寄件者名稱與信件標題亂碼問題
4 PHP发送UTF-8编码中文邮件标题乱码的解决






