以前的一些记录


解决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. public static Bitmap drawableToBitmap(Drawable drawable) {  
  2.           
  3.         Bitmap bitmap = Bitmap  
  4.                         .createBitmap(  
  5.                                         drawable.getIntrinsicWidth(),  
  6.                                         drawable.getIntrinsicHeight(),  
  7.                                         drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
  8.                                                         : Bitmap.Config.RGB_565);  
  9.         Canvas canvas = new Canvas(bitmap);  
  10.         //canvas.setBitmap(bitmap);  
  11.         drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
  12.         drawable.draw(canvas);  
  13.         return bitmap;  
  14. }  

 

2、从资源中获取Bitmap

 

Java代码  

  1. Resources res=getResources();  
  2.   
  3. Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);  

 

3、Bitmap → byte[]

 

Java代码  

  1. private byte[] Bitmap2Bytes(Bitmap bm){  
  2.     ByteArrayOutputStream baos = new ByteArrayOutputStream();    
  3.     bm.compress(Bitmap.CompressFormat.PNG, 100, baos);    
  4.     return baos.toByteArray();  
  5.    }  

 
4、 byte[] → Bitmap

Java代码  

  1. private Bitmap Bytes2Bimap(byte[] b){  
  2.             if(b.length!=0){  
  3.                 return BitmapFactory.decodeByteArray(b, 0, b.length);  
  4.             }  
  5.             else {  
  6.                 return null;  
  7.             }  
  8.       }  

 

 

 

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

 

 

 

 

系统摄像头调用

· protected void onActivityResult(int requestCode, int resultCode, Intent data)方法即可  

·     

·  如:  

·     

· final int TAKE_PICTURE = 1;  

· protected void onActivityResult(int requestCode, int resultCode, Intent data) {  

·   if (requestCode == TAKE_PICTURE) {  

·     if (resultCode == RESULT_OK) {  

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

·       imgPhoto.setImageBitmap(bm);  

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

·    

·       if (sdCardExit) {  

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

·    

·         if (!myRecAudioDir.exists()) {  

·           myRecAudioDir.mkdir();  

·          }  

·       } else {  

·         mMakeTextToast("", true);  

·       }  

·    

·       try {  

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

·         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));  

·    

·         photoPath=f.getPath();  

·    

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

·    

·         bos.flush();  

·         bos.close();  

·     

·       } catch (FileNotFoundException e) {                                          

·         e.printStackTrace();  

·       } catch (IOException e) {                                          

·         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 >  

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

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

</intent-filter>  

<intent-filter >  

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

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

<data android:mimeType="text/plain" />  

</intent-filter>  

</activity> 

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

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

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

Java代码

Intent intent = getIntent();  

String action = intent.getAction();  

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

       TextView tv = (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.οnscrοll=set;

 

05

    btn.οnclick=function (){

06

        btn.style.display="none";

 

07

        window.οnscrοll=null;

08

        this.timer=setInterval(function(){

 

09

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

10

            if(d.scrollTop==0) clearInterval(btn.timer,window.οnscrοll=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 = new Intent(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 = new Notification.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 = new Notification(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. Info info = list.get(position);  

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

3.         viewHolder.checkBox.setOnCheckedChangeListener(new CheckListener(info)); 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值