以前的一些记录

解决webview显示图片分辨率的方法

例如适合800px宽度的页面,如果通过WebView1024px的屏幕宽度下显示时,内容(图片)会被放大,整体页面会超出屏幕。

试了将WebViewsettings中的缩放都关闭了也不行。
后来发现了WebSettings.ZoomDensity这个设置,并在文档中找到了以下说明:
Enum for specifying the WebView's desired density. FAR makes 100% looking likein 240dpi MEDIUM makes 100% looking like in 160dpi CLOSE makes 100% lookinglike in 120dpi
这样就能很好的说明以上问题的原因了,又是密度惹的祸...
默认WebViewZoomDensityMEDIUM,对应160dpi。而我之前800px宽度的屏幕对应的是60dpi1024px宽度的屏幕对应的是240dpi。所以,页面在高分辨率的屏幕上被放大了1.5倍。这个和图片自缩放的机制是一样的。
于是,只要通过当前屏幕的密度,动态设置该属性就能适应不同屏幕(当然,默认你的页面是针对160dpi的密度大小设计的),即可解决:

/////////////////////////////////////////////////////////////////////

int screenDensity =getResources().getDisplayMetrics().densityDpi ;

WebSettings.ZoomDensityzoomDensity = WebSettings.ZoomDensity.MEDIUM ;

switch (screenDensity){

case DisplayMetrics.DENSITY_LOW :

zoomDensity = WebSettings.ZoomDensity.CLOSE;

break;

case DisplayMetrics.DENSITY_MEDIUM:

zoomDensity = WebSettings.ZoomDensity.MEDIUM;

break;

case DisplayMetrics.DENSITY_HIGH:

zoomDensity = WebSettings.ZoomDensity.FAR;

break ;

}

webView.getSettings().setDefaultZoom(zoomDensity);//webSettings.setDefaultZoom(zoomDensity);

解决SQLITE数据库查找速率的方法

通常有些查找算法是无法通过事物来提高速度的

数据库算法应尽量减少movetofrist语句,因为查找语句的真正运行是在movetofrist执行时运行的,因此,用IN语句来代替forLIKE的组合能够大幅度提高查找速率

Fori

{

Sqlite(LIKE String[i])

}

Replaced by:

For(i)

{

String[i]+String[i+1]……

}

Sqlite(IN)

 

android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下:

1、Drawable → Bitmap

Java代码

  1. publicstaticBitmapdrawableToBitmap(Drawabledrawable){
  2. Bitmapbitmap=Bitmap
  3. .createBitmap(
  4. drawable.getIntrinsicWidth(),
  5. drawable.getIntrinsicHeight(),
  6. drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
  7. :Bitmap.Config.RGB_565);
  8. Canvascanvas=newCanvas(bitmap);
  9. //canvas.setBitmap(bitmap);
  10. drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
  11. drawable.draw(canvas);
  12. returnbitmap;
  13. }

2、从资源中获取Bitmap

Java代码

  1. Resourcesres=getResources();
  2. Bitmapbmp=BitmapFactory.decodeResource(res,R.drawable.pic);

3、Bitmap → byte[]

Java代码

  1. privatebyte[]Bitmap2Bytes(Bitmapbm){
  2. ByteArrayOutputStreambaos=newByteArrayOutputStream();
  3. bm.compress(Bitmap.CompressFormat.PNG,100,baos);
  4. returnbaos.toByteArray();
  5. }


4、 byte[] → Bitmap

Java代码

  1. privateBitmapBytes2Bimap(byte[]b){
  2. if(b.length!=0){
  3. returnBitmapFactory.decodeByteArray(b,0,b.length);
  4. }
  5. else{
  6. returnnull;
  7. }
  8. }

以上是我在实践中遇到的一些转换,以后遇到类似的就不用到处找了,希望对大家也有一点用处!

系统摄像头调用

·protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)方法即可

·

· 如:

·

·finalintTAKE_PICTURE=1;

·protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){

·if(requestCode==TAKE_PICTURE){

·if(resultCode==RESULT_OK){

·Bitmapbm=(Bitmap)data.getExtras().get("data");

·imgPhoto.setImageBitmap(bm);

·sdCardExit=Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);

·

·if(sdCardExit){

·myRecAudioDir=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/custom_picture");

·

·if(!myRecAudioDir.exists()){

·myRecAudioDir.mkdir();

· }

·}else{

·mMakeTextToast("",true);

·}

·

·try{

·Filef=File.createTempFile(strTempFile,".jpg",myRecAudioDir);

·BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(f));

·

·photoPath=f.getPath();

·

·bm.compress(Bitmap.CompressFormat.JPEG,80,bos);

·

·bos.flush();

·bos.close();

·

·}catch(FileNotFoundExceptione){

·e.printStackTrace();

·}catch(IOExceptione){

·e.printStackTrace();

·}

·}

·}

· }

在HTML的图片编辑中,图片可能会有超屏的现象

解决方法:

<img style="max-width:100%" src =CKJF0019-01.png ></img>

此设置100%指的是屏幕宽度的100%,并不是指原图的100%,所以,很好用!

webview中图片的居中属性

在图文混排时,使用<imgAlign="absmiddle" src=""/>可以让超过一行文字高度的图片居中显示,更有利于公式等图片的排版显示

反射获取对象属性的方法

Class<?>ownerClass = Class.forName("org.sqlite.RS");

java.lang.reflect.Fieldinstance = SrcCur1.getClass().getDeclaredField("cols");

instance.setAccessible(true);//必要的设置

String[] last= (String[]) instance.get(SrcCur1);

instance.setAccessible(false);//必要的设置

Android webview中,HTML的<IMG>标签SRC

webview中,可以直接将<IMG>标签中src指向android工程目录

e.g.

<img id='flash' src = 'file:///android_asset/UI/flash.png'style='height:20px'>

 

将自己的软件加入到列表

使用过Android设备的朋友当我们要打开某个文件。这里以文本为例,有的时候会弹出一个列表,选择使用其中一个软件来打开文本。作为开发人员如何将自己的软件加入到列表中呢。

我们通过设置AndroidManifest.xml文件即可代码如下:

<activity

android:label="@string/app_name"

android:launchMode="singleTask"

android:name=".EsayNoteActivity"

android:screenOrientation="portrait">

<intent-filter>

<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

<intent-filter>

<actionandroid:name="android.intent.action.VIEW"/>

<categoryandroid:name="android.intent.category.DEFAULT"/>

<dataandroid:mimeType="text/plain"/>

</intent-filter>

</activity>

这样当打开文本文件的时候我们自己的软件就在列表里了

主要是设置mimeType的类型,文本文件是:text/plain

在配置中程序设置关联之后,还有参数传递问题需要在onCreate()里面添加如下代码:

Java代码

Intentintent=getIntent();

Stringaction=intent.getAction();

if(Intent.ACTION_VIEW.equals(action)){

TextViewtv=(TextView)findViewById(R.id.tvText);

tv.setText(intent.getDataString());//显示文件路径

}

常用的类型还有:

text/plain(纯文本)

text/htmlHTML文档)

application/xhtml+xmlXHTML文档)

image/gifGIF图像)

image/jpegJPEG图像)【PHP中为:image/pjpeg

image/pngPNG图像)【PHP中为:image/x-png

video/mpegMPEG动画)

application/octet-stream(任意的二进制数据)

application/pdfPDF文档)

application/mswordMicrosoft Word文件)

message/rfc822RFC 822形式)

multipart/alternativeHTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)

application/x-www-form-urlencoded(使用HTTPPOST方法提交的表单)

multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)

 

TextView对HTML标签的支持

方法如下,使用HTML转换即可

TextView x = (TextView)findViewById(R.id.textView1);

x.setText(Html.fromHtml("djwai<br>dojawidoawdaw"));

注:不一定支持所有标签。

隐式调用判断action是否存在

隐式调用如果被调用action来自外部AP,且没有被安装,就会出现当机情况,加入判断语句即可解决问题

Intent intent = new Intent();

intent.putStringArrayListExtra("unitnumberarray",IOArray);

intent.setAction("com.besta.app.knowledge.twchemistry.KNOWLEDGE1");

if(getPackageManager().queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY).size()>0)

{

startActivity(intent);

}

else

{

Toast.makeText(this,"Thefunction is not found!",Toast.LENGTH_SHORT).show();

}

公共存储区域

android中,如果有些AP需要计数器等,但又不想创建文件读取,那么可以使用其公共内存存储区域Push键值对进去,很是方便

PageCount =getPreferences(MODE_PRIVATE).getInt("pagecount", 0);

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();

editor.putInt("pagecount",--PageCount);

editor.commit();

数据库关闭报错

数据库关闭报错有很多种,有如下一种其情况:

04-0109:46:07.922: E/AndroidRuntime(8383): android.database.sqlite.SQLiteException:unable to close due to unfinalised statements

这是由于游标未被关闭导致,很多人在使用数据库时都会忘记关闭游标,这样在游标未操作完成(而你以为操作完成)的情况下关闭数据库,则会有当机的风险。

SQLiteDatabase db = null;

db = SQLiteDatabase.openDatabase(dbPath,null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);

String dbcommand = "SELECT * FROM CSS WHERE filename LIKE \""+ cssFileName +"\"";

Cursor cssCur = db.rawQuery(dbcommand, null);

if(cssCur != null )

{

if(cssCur.moveToFirst())

{

cssString =cssCur.getString(cssCur.getColumnIndex("content"));

}

}

cssCur.close();//一定要记得关闭!!

db.close();

 

【HTML】表格自动换行

Kay'sword: 看了无数,发现就这个能用,主要在tabletd的属性里加上

<tablestyle="TABLE-LAYOUT:fixed;word-break:break-all;word-wrap:break-all;"……>

<tdstyle="word-break:break-all;word-wrap:break-word;"……>

用表格做网页排版的时候,一般都能正常使用。偏偏有时会碰到一段连续的英文词或者一堆感叹号(!!!)把网页就撑开的现象:(
总结了一下,只要在CSS中定义了如下句子,可保网页不会再被撑开了。
table{table-layout: fixed;}
td{word-break: break-all; word-wrap:break-word;}
注释一下:
1.第一条table{table-layout: fixed;},此样式可以让表格中有!!!(感叹号)之类的字符时自动换行。
2.td{word-break: break-all}
,一般用这句这OK了,但在有些特殊情况下还是会撑开,因此需要再加上后面一句(word-wrap:break-word;)就可以解决。此样式可以让表格中的一些连续的英文单词自动换行。

语法:

word-break : normal | break-all | keep-all

参数:

normal :
 依照亚洲语言和非亚洲语言的文本规则,允许在字内换行
break-all :
 该行为与亚洲语言的normal相同。也允许非亚洲语言文本行的任意字内断开。该值适合包含一些非亚洲文本的亚洲文本
keep-all :
 与所有非亚洲语言的normal相同。对于中文,韩文,日文,不允许字断开。适合包含少量亚洲文本的非亚洲文本


语法:

word-wrap : normal | break-word

参数:

normal :
 允许内容顶开指定的容器边界
break-word :
 内容将在边界内换行。如果需要,词内换行(word-break)也行发生

说明:

设置或检索当当前行超过指定容器的边界时是否断开转行。
对应的脚本特性为word-wrap。请参阅我编写的其他书目。



语法:

table-layout : auto | fixed

参数:

auto :
 默认的自动算法。布局将基于各单元格的内容。表格在每一单元格读取计算之后才会显示出来。速度很慢
fixed :
 固定布局的算法。在这算法中,水平布局是仅仅基于表格的宽度,表格边框的宽度,单元格间距,列的宽度,而和表格内容无关

说明:

设置或检索表格的布局算法。
对应的脚本特性为tableLayout

 

【HTML】JS返回顶部代码

本文介绍三款简单的返回页面顶部代码,可以使用简单的HTML锚标记,也可使用Javascript Scroll函数动态返回,其它的还有悬浮脚本等有点复杂了,本文不再介绍,大家根据自己需要选择其中的一种即可,总之简约最美的,能减少代码就减少代码,能不调用的就别调用,要不是天缘博客的文章都是牛长也不会添加这个功能。

一、使用锚标记返回页面顶部

使用HTML锚标记最简单,就是看起来有点不好看,点击后会在地址栏显示这个锚标记,其它的倒没什么。

页面顶部放置:

<a name="top" id="top"></a>

放置位置在<body>标签之后随便找个地方放都可以,只要靠近顶部即可。

页面底部放置:

<a href="#top" target="_self">返回顶部</a>

二、使用Javascript Scroll函数返回顶部

scrooll函数用来控制滚动条的位置,有两种很简单的实现方式:

方式1

1

<a href="javascript:scroll(0,0)">返回顶部</a>

scroll第一个参数是水平位置,第二个参数是垂直位置,比如要想定位在垂直50像素处,改成scroll(0,50)就可以了。

方式2

本方式是渐进式返回顶部,要好看一些,代码如下:

1

function pageScroll() {

2

window.scrollBy(0,-10);

3

scrolldelay = setTimeout('pageScroll()',100);

4

}

5

6

<a href="pageScroll();">返回顶部</a>

这样就会动态返回顶部,不过虽然返回到顶部但是代码仍在运行,还需要在pageScroll函数加一句给停止掉。

1

if(document.documentElement.scrollTop==0) clearTimeout(scrolldelay);

三、使用Onload加上scroll功能实现动态返回顶部

1、首先在网页BODY标签结束之前加上:

<div id="gotop">返回顶部</div>

2、再调用以下JS脚本部分:

01

BackTop=function(btnId){

02

var btn=document.getElementById(btnId);

03

var d=document.documentElement;

04

window.onscroll=set;

05

btn.onclick=function (){

06

btn.style.display="none";

07

window.onscroll=null;

08

this.timer=setInterval(function(){

09

d.scrollTop-=Math.ceil(d.scrollTop*0.1);

10

if(d.scrollTop==0) clearInterval(btn.timer,window.onscroll=set);

11

},10);

12

};

13

function set(){btn.style.display=d.scrollTop?'block':"none"}

14

};

15

BackTop('gotop');

Z-BLOG而言,可以放到$(document).ready(function(){....函数中,也可以独立存成一个js文件,比如gotop.js,再通过:

<SCRIPT src="/js/gotop.js" type=text/javascript></SCRIPT>

来调用,当然了位置最好放在返回顶部标签的下面,该调用方法已假设路径为JS,其它位置请自行修改。

补充:

上述返回顶部代码都是文字式样的,也可以把文字更换为漂亮一点的图标,另外还有悬浮状的返回顶部代码(就是页面滚动时,返回顶部图标也会跟着跑的那种),需要使用到层等,搞的有点复杂了,本文暂不列出。

 

查看sqlite3表结构的命令

 

android下通过adb shell命令可以进入sqlite3的命令行client,见:在android命令行下使用sqlite3

如果想列出该数据库中的所有表,可:

.table

如果想查看这些表的结构:

select * from sqlite_master where type="table";

可以看到类似:

默认情况下,不会出现红框中的表头,需要之前设置,命令为:

.header on

如果只想查看具体一张表的表结构,比如查看emperors表,命令为:

select * from sqlite_master where type="table" andname="emperors";

另外,也可以这样:

sqlite> .schema emperors
CREATE TABLE emperors( id integer primary key autoincrement, name text,dynastytext,start_year text);

 

 

 

Android http GET URL字符转义

当在android采用GET方式的url来传值时,需要使用URLEncoder来将字符转义

e.g.

URLEncoder.encode("getTitle","utf-8")

Android Holo 主题 — 开发者的中立主题

还记得3个月前被手机厂商炒的沸沸扬扬的关于Android将统一界面的新闻报道吗?当时再加上Android 3.0的闭源开发,很多手机厂商和开发者都认为Google不想为他人做嫁衣,想进一步控制Android系统的发展,减少Android版本分化给用户和开发者照成的迷惑。

今天Android Framework团队开发者AdamPowell发表文章说,Android不会闭源, 统一界面是通过4.0引入的Holo主题来实现的。 在4.0+的系统上,所有要兼容Android CTS的手机系统都需要内置一个不可修改的Holo主题,开发者在开发程序的时候可以指定是使用Holo主题还是使用各个设备上的默认主题;同时为了便于手机厂商自定义界面,Android 4.0还引入了一个DeviceDefault主题,通过这种方式把设备主题和Holo主题分开,让手机厂商自定义界面和版本升级更加容易。

开发者可以在程序的Manifest文件中指定使用Holo主题,android:theme="@android:style/Theme.Holo.*",为了和以前的版本兼容,可以通过版本限定符(vN)来设置在不同的版本中使用不同的主题,如下:

在 res/values/themes.xml 中使用如下自定义主题:

1

2

3

4

5

<resources>

<style name="MyTheme" parent="@android:style/Theme">

<!-- 定义在3.0之前版本使用的主题 -->

</style>

</resources>

在 res/values-v11/themes.xml 中使用自定义主题,注意这里的v11限定符:

1

2

3

4

5

6

<resources>

<style name="MyTheme" parent="@android:style/Theme.Holo">

<!-- 在api level 为11+ 的版本上使用 Theme.Holo 主题 -->

</style>

</resources>

最后在app的 AndroidManifest.xml 文件中使用自定义主题:

1

2

3

4

5

6

7

<!-- [...] -->

<application android:name="MyApplication"

android:label="@string/application_label"

android:icon="@drawable/app_icon"

android:hardwareAccelerated="true"

android:theme="@style/MyTheme">

<!-- [...] -->

其实通过这种方式来解决这个第三方UI的问题,是个很不错的想法, 很多开发者都为了简单在4.0版本上都只使用Holo主题,这样就会导致厂商开发的自定义UI只在自己的设备上使用。最终的理想情况是:每个厂商开发的自定义UI只有他们自己的系统和内置的程序使用自定义的UI,而其他程序都使用Holo主题, 久而久之 手机厂商做自定义UI的激情也没有了, 从而实现了Android界面统一的终极目标。

程序文件修改

修改完資源文件的內容,下面來修改程序中的不兼容代碼,告訴你個快捷尋找不兼容代碼的方法,你把程序從minSdkVersion:14改成minSdkVersion:10,然後去把裏面所有紅色的代碼都加上try,catch。示例:

try{

//4.0 code

}catch(NoClassDefFoundError e) {

//2.3code}


public
voidsetNotify() {


if(!mIsNotify) {


return;

}

Intent intent =newIntent(getApplicationContext(),Management.class);

intent.putExtra(AppConstants.CommonArgs.UPDATE_FLAG,true);


//intent.putParcelableArrayListExtra("appList",


// UpdateData.gUpdateList);

PendingIntentcontentIntent = PendingIntent.getActivity(

getApplicationContext(), 0, intent, 0);

String tickerFormat= getString(R.string.notification_ticker);

NotificationmNotification =null;

NotificationManagermyNotificationManager = (NotificationManager)CheckLocalUpdateService.this

.getSystemService(NOTIFICATION_SERVICE);


try{

mNotification =newNotification.Builder(

CheckLocalUpdateService.this)

.setContentTitle(getText(R.string.notification_title))

.setContentText(String.format(tickerFormat,mUpdateList.size()))

.setContentIntent(contentIntent)

.setSmallIcon(R.drawable.icon_stat)

.setAutoCancel(true)

.setTicker(String.format(tickerFormat,mUpdateList.size()))

.setNumber(mUpdateList.size())

.setWhen(System.currentTimeMillis()).getNotification();

}catch(NoClassDefFoundError e) {

mNotification =newNotification(R.drawable.ic_launcher,

String.format(tickerFormat,mUpdateList.size()),

System.currentTimeMillis());

mNotification.flags= Notification.FLAG_AUTO_CANCEL;

mNotification.setLatestEventInfo(CheckLocalUpdateService.this,

getString(R.string.notification_title),

String.format(tickerFormat,mUpdateList.size()),contentIntent);

mNotification.number=mUpdateList.size();

}

myNotificationManager.notify(

AppConstants.CommonArgs.UPDATE_NOTIFICATION_ID,mNotification);

}

android listview ScrollView冲突 listview checkbox

 

博客分类:

android开发问题

1、解决问题:

加了checkbox之后,就会影响setOnItemClickListener(newOnItemClickListener() 不起作用。

办法:checkbox默认设置:android:focusable="false"

2、解决问题:

Java代码

1.Infoinfo=list.get(position);

2.viewHolder.checkBox.setChecked(info.getCheckState());

3.viewHolder.checkBox.setOnCheckedChangeListener(newCheckListener(info));

猜你喜欢

转载自will-du.iteye.com/blog/1775706
今日推荐