Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android webView不簡單

android webView不簡單

編輯:關於Android編程

手機屏幕大小很傷程序員

勵志成為一名Java工程師的我,真的被它傷到了,不僅因為webView的強大,而且這個內容適合各樣屏幕大小問題。想當年蘋果工程師嘲笑安卓工程師們加班在處理屏幕的適配,簡直是在重復的工作,沒想到多年後,蘋果的手機也出現了屏幕大小不一樣的,蘋果工程師哭倒在廁所裡,萬事真的沒有絕對啊! 1.解析RSS的xml文件 現在大多數的新聞和雜志都會給大家RSS,我們需要解析它的xml文件,但是如果獲取裡面的數據時,注意它的標簽並不都一樣,需要注意!
                        File tempFile = Environment.getExternalStorageDirectory()
					.getAbsoluteFile();
			File file = new File(tempFile, (format.format(date) + .xml));
			HttpClient client = new DefaultHttpClient();
			HttpGet get = new HttpGet(RSS_URL);
			try {
				HttpResponse response = client.execute(get);
				if (response.getStatusLine().getStatusCode() == 200) {
					InputStream inputStream = response.getEntity().getContent();

					FileOutputStream fos = new FileOutputStream(file);
					int byteread = 0;
					byte[] buffer = new byte[1024];
					while ((byteread = inputStream.read(buffer)) != -1) {

						fos.write(buffer, 0, byteread);
					}
					fos.flush();
					fos.close();
					inputStream.close();
				}
			} catch (ClientProtocolException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
                        list=new ArrayList>();
			SAXReader reader = new SAXReader();
			try {
				Document document = reader.read(file); // 通過reader對象的read方法獲得document對象
				Element rootelement = document.getRootElement(); // 獲得根節點
				Element channelelement = rootelement.element(channel);// 獲得channel節點
				Iterator channel_iterator = channelelement.elementIterator();
				
				 // 准備第一個模板,將需要改變的時間格式   
				String pat1 = EEE, dd MMM yyyy HH:mm:ss Z ;    
		        // 准備第二個模板,將提取後的日期數字變為指定的格式    
		        String pat2 = yyyy年MM月dd日 HH時mm分 ;
		        Locale local=Locale.ENGLISH;
		        SimpleDateFormat sdf1 = new SimpleDateFormat(pat1,local) ;        // 實例化模板對象    
		        SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ;        // 實例化模板對象    
				while (channel_iterator.hasNext()) {
					//只能放在map裡,不能發在對象裡
					Mapmap1=new HashMap();
					Element itemelement = (Element) channel_iterator.next();
					if (item.equals(itemelement.getName())) {
						Iterator item_iterator = itemelement.elementIterator();
						rssItem = new RssItem();
						while (item_iterator.hasNext()) {
							
							Element itemChild = (Element) item_iterator.next();
							
							if (title.equals(itemChild.getName())) {
								
								rssItem.setTitle(itemChild.getStringValue());
								Log.i(RSS, itemChild.getStringValue());
								
							}
							if (link.equals(itemChild.getName())) {
								rssItem.setLink(itemChild.getStringValue());
								Log.i(RSS, itemChild.getStringValue());
							}
							if (description.equals(itemChild.getName())) {
								rssItem.setDescription(itemChild
										.getStringValue());
								Log.i(RSS, itemChild.getStringValue());
								if (getImgStr(itemChild.getStringValue())!=null) {
									//區第一個的url地址
									rssItem.setImage(getImgStr(itemChild.getStringValue()));
								}else{
									rssItem.setImage();
								}
								
								
								
							}
							if (pubDate.equals(itemChild.getName())) {
								
								Date date1= sdf1.parse(itemChild.getStringValue());
								String pubDate=sdf2.format(date1);
								rssItem.setPubDate(pubDate);
								Log.i(RSS, pubDate);
							}
							if (author.equals(itemChild.getName())) {
								
								rssItem.setAuthor(itemChild.getStringValue());
								Log.i(RSS, itemChild.getStringValue());
							}
							
						}
						if (rssItem.getImage().equals()) {
							
						}else {
							map1.put(rssItem, rssItem);
							list.add(map1);
						}
						
						//feed.addItem(map1);
						
						
					}
				}
				
			} catch (DocumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			 Message message = new Message();
			 message.what = 1;
			 handler.sendMessage(message);
			 RSS_URL=null;
		}

這樣的寫法不要學習,需要把其中一部分寫成公共的方法。因為也是在學習,所有後期會都封裝成公用的方法。 2.時間的格式化 因為RSS裡的文章日期格式是:Thu, 13 Aug 2015 11:30:00 +0800, Calendar時間格式,我們需要的格式是2015年9月1日。這個該怎麼轉換呢?網上找的都是以 new DATE()做為轉換對象,這不符合我們實際情況,這時候你需要查詢你的jdk文檔了,在文檔裡可以找到他的格式:EEE, dd MMM yyyy HH:mm:ss Z。
        String a=Fri, 14 Aug 2015 02:20:10 +0800;//
	String pat1 = EEE, dd MMM yyyy HH:mm:ss Z ;    //EEE, dd MMM yyyy HH:mm:ss Z
        // 准備第二個模板,將提取後的日期數字變為指定的格式    
        String pat2 = yyyy年MM月dd日 HH時mm分ss秒SSS毫秒 ;  //MOTH  
        //由於local生成很費時間,提前生成
        Locale local=Locale.ENGLISH;
        SimpleDateFormat sdf1 = new SimpleDateFormat(pat1,local) ;        // 實例化模板對象    
        SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ;        // 實例化模板對象    
        try {
			Date date= sdf1.parse(a);
			System.out.println(sdf2.format(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
對於這個應該都會很常用。 3.手機大小適配 webView很強大,能夠顯示html的內容,這讓手機能夠解析html,而且到了5.0 webView增加了更大的功能。我需要顯示文章的圖片,但是圖片變會超出屏幕大小,為了能在每個機子裡顯示的效果,需要加上這兩行代碼:
            //是內容與手機適配
	    bodyHtml.getSettings().setUseWideViewPort(true);
	    bodyHtml.getSettings().setLoadWithOverviewMode(true);
這樣確實可以把圖片變得適合手機大小,但是字體隨著圖片同樣的變小了,因此我們需要把字體調大:
            //設置默認的字體大小
	    bodyHtml.getSettings().setDefaultFontSize(40);
這雖然不是最佳解決辦法,應該在RSS裡文章的內容寫設定好圖片的最大大小,但如果在重新修改img標簽,會讓圖片多的文章加載變得慢,因此只能委曲求全應這個辦法,(網上寫的大多數方法還是不能解決我的需求,還是在泡上在網上的日子找到解決的辦法,該網站做的不錯,風格我喜歡的類型,簡潔風格)把全部代碼顯示如下:
                Intent itent=getIntent();
		//文章內容
		String title=itent.getStringExtra(content);
		
		//去除超鏈接,保留字體
		String regex=<\s*a.*?/a\s*>;
		title=title.replaceAll(regex, );
		
		//添加html標頭
		String news=
+title+; //得到WebView組件 WebView bodyHtml=(WebView)this.findViewById(R.id.wv_paper_content); //設置默認的字體大小 bodyHtml.getSettings().setDefaultFontSize(40); //是內容與手機適配 bodyHtml.getSettings().setUseWideViewPort(true); bodyHtml.getSettings().setLoadWithOverviewMode(true); //能夠的調用JavaScript代碼 bodyHtml.getSettings().setJavaScriptEnabled(true); bodyHtml.getSettings().setDefaultTextEncodingName(utf-8); //加載HTML字符串進行顯示 bodyHtml.loadDataWithBaseURL(null, news, text/html, utf-8, null);總算把這個星期碰到的問題和解決辦法寫完了,雖然只是簡單寫下,而且還是學了兩個星期的安卓,就開始做項目,但是真的學到了很多知識,尤其運用到了web的知識,我也相信webApp才是未來的主潮!!!


 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved