Ⅰ 在一個Activity的java程序中,具體看問題描述
1、Intent
Intent是各個組件之間交互的一種重要方式,它不僅可以指明當前組件想要執胡純行的動作,而且還能在各組件之間傳遞數據。Intent一般可用於啟動Activity、啟動Service、發送廣播等場景。
Intent大致可分為2中:
1、顯示Intent
2、隱式Intent
1.1、顯示Intent打開Activity
fun openActivity(){
val intent = Intent(this, KotlinFirstActivity::class.java)
intent.putExtra("param", "testParams")
startActivity(intent)
}
注意:KotlinFirstActivity::class.java就相當盯念於Java中的KotlinFirstActivity.class。
1.2、隱式Intent打開程序內的Activity
相比於顯示Intent,隱式Intent並不指明啟動那個Activity而是指定了一系列的action和category,然後交由系統去分析找到合適的Activity並打開。
什麼是合適的Activity,其實就是和隱式Intent中指定的action和category完全匹配的Activity,而action和category我們可以在AdnroidManifest中指定。
在標簽中配置了action和category,只有和隱式Intent中的action和category完全匹配才能正常的打開該頁面。
val intent = Intent("com.example.abu.alertdialogdemo.ACTION_START")
startActivity(intent)
不是說action和category要完全匹配才能打開頁面嗎?這是因為android.intent.category.DEFAULT是一種默認的category,在調用startActivity()時會自動將這個category添加到Intent中。所以在Manifest中一定不要忘記配置這個默認的category:android.intent.category.DEFAULT,否則會報錯。
還有一點需要注意:Intent中只能添加一個action,但是可以添加多個category。
1.3、隱式Intent打開程序外的Activity
比如我們要打開系統的瀏覽器
fun openWeb(view: View) {
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("https://www..com")
startActivity(intent)
}
Intent.ACTION_VIEW是系統內置的動作,然後將https://www..com通過Uri.parse()轉換成Uri對象,傳遞給intent.setData(Uri uri)函數。Kotlin中intent.data=Uri.parse("https://www..com")就相當於Java中的intent.setData(Uri.parse("https://www..com")),這是Kotlin中的語法糖。
與此對應在標簽中配置一個標簽,用於更精確的指定當前Activity能夠相應的數據。標簽中主要可以配置一下內容:
1、android:scheme:用於指定數據的協議部分,如https
2、android:host:用於指定數據的主機名凱做困部分,如www..com
3、android:port:用於指定數據的埠,一般緊隨主機名後
4、android:path:用於指定數據的路徑
5、android:mimeType:用於指定支持的數據類型
只有當標簽中指定的內容和Intent中攜帶的data完全一致時,當前Activity才能響應該Intent。下面我們通過設置data,讓它也能響應打開網頁的Intent。
我們在ThirdActivity的中配置當前Activity能夠響應的action是Intent.ACTION_VIEW的常量值,而category指定了默認的category值,另外在標簽data中我們通過android:scheme="https"指定了數據的協議必須是https。另外由於AndroidStudio認為能夠響應ACTION_VIEW的Activity都應該加上BROWSABLE的category,否則會報出警告。加上BROWSABLE的category是為了實現deep link 功能和目前學習無關,所以我們在intent-filter標簽上添加tools:ignore="AppLinkUrlError"忽略警告。
然後我們就能通過隱式Intent的方法打開ThirdActivity了,代碼如下:
val intent= Intent(Intent.ACTION_VIEW)
intent.data=Uri.parse("https:")
startActivity(intent)
除了指定android:scheme為https我們也能隨意指定它的值,只需要保證AndroidManifest中設置的值和Intent中設置的data相對應即可。
2、Activity的生命周期
Activity類中定義了7個回調方法,覆蓋了Activity聲明周期的每一個環節。
1、onCreate(): 在Activity第一次創建時調用
2、onStart():在Activity可見但是沒有焦點時調用
3、onResume():在Activity可見並且有焦點時調用
4、onPause():這個方法會在准備啟動或者恢復另一個Activity時調用,我們通常在該方法中釋放消耗CPU的資源或者保存數據,但在該方法內不能做耗時操作,否則影響另一個另一個Activity的啟動或恢復。
5、onStop():在Activity不可見時調用,它和onPause主要區別就是:onPause在失去焦點時會調用但是依然可見,而onStop是完全不可見。
6、onDestory():在Activity被銷毀前調用
7、onRestart():在Activity由不在棧頂到再次回到棧頂並且可見時調用。
為了更好的理解Activity的生命周期,看下圖
Activity生命周期.png
3、體驗Activity的生命周期
下面我們通過實例更直觀的看下Activity的生命周期過程。
1、打開FirstActivity,生命周期過程如下
FirstActivity onCreate
FirstActivity onStart
FirstActivity onResume
2、在FirstActivity中打開SecondActivity,生命周期過程如下
FirstActivity onPause
SecondActivity onCreate
SecondActivity onStart
SecondActivity onResume
FirstActivity onStop
可以看到在打開SecondActivity時FirstActivity的onPause會執行,所以在onPause中是不能做耗時操作的,否則會影響SecondActivity的打開。
3、按返回鍵回到FirstActivity,生命周期過程如下
SecondActivity onPause
FirstActivity onRestart
FirstActivity onStart
FirstActivity onResume
SecondActivity onStop
SecondActivity onDestroy
可以看到在返回FirstActivity時會調用SecondActivity的onPause,如果SecondActivity的onPause中做了耗時操作的話,那麼也會影響Activity的返回。而且當FirstActivity再次回到棧頂時會調用其onRestart,此時並不會執行onCreate因為FirstActivity並沒有銷毀。
4、Activity被回收了時的生命周期
現在描述一種場景:打開ActivityA,然後在ActivityA的頁面中打開ActivityB,此時ActivityA不在棧頂了如果內存不足可能會被回收,此時從ActivityB再回到ActivityA,下面描述下整個過程的生命周期。
1、打開ActivityA,執行的生命周期
ActivityA onCreate
ActivityA onStart
ActivityA onResume
2、打開ActivityB執行的生命周期
ActivityA onPause
ActivityB onCreate
ActivityB onStart
ActivityB onResume
ActivityA onStop
3、此時因內存不足,導致ActivityA被回收了,並返回ActivityA
ActivityA onDestory
ActivityB onPause
ActivityA onCreate
ActivityA onStart
ActivityA onResume
ActivityB onStop
從上面可以看出在ActivityA被回收後再次回到ActivityA時不再調用ActivityA的onRestart了,而是調用了ActivityA的onCreate,因為ActivityA已經被銷毀了。
5、Activity被銷毀,其中的臨時數據怎麼辦
ActivityA被銷毀了,這也就說明其中的臨時數據也會丟失了,比如ActivityA中有一個EditText,我們在其中輸入了一段文字,然後啟動ActivityB,此時由於內存緊張處於停止狀態的ActivityA被回收了,返回到ActivityA你會發現EditText中輸入的文字不見了,因為ActivityA重新創建了。
為此Activity提供了onSaveInstanceState方法,該方法能確保在被回收之前被調用,我們就能在onSaveInstanceState方法中進行臨時數據的保存,然後我們可以在onCreate(savedInstanceState: Bundle?)中利用savedInstanceState進行數據的恢復。Activity被回收重新創建時onCreate(savedInstanceState: Bundle?)中的savedInstanceState不再為null否則為null,其中帶有在savedInstanceState中保存的所有數據。
具體代碼如下:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.e("tag", "$tag onCreate")
//恢復數據
val tempData = savedInstanceState?.getString("data") ?: ""
et.setText(tempData)
}
//保存數據
override fun onSaveInstanceState(outState: Bundle?) {
super.onSaveInstanceState(outState)
Log.e("tag", "$tag onSaveInstanceState")
val tempData = et.text.toString().trim()
outState?.putString("data", tempData)
}
6、onSaveInstanceState()調用時機
1、用戶按下HOME鍵
2、長按HOME鍵進入其他程序
3、按下電源鍵關閉屏幕
4、從ActivityA跳轉到一個新的Activity
5、屏幕方向切換時,如從豎屏變成橫屏
總而言之,onSaveInstanceState()是在你的Activity有可能在未經允許的情況下被回收時調用,Activity被銷毀之前onSaveInstanceState()肯定會被觸發,我們可以onSaveInstanceState()中保存臨時數據,持久化的數據可以在onPause()中保存。
另外,雖然屏幕方向切換時,會造成Activity的重建會調用onSaveInstanceState(),但是不建議使用onSaveInstanceState()進行數據的保存,我們可以禁止屏幕的旋轉或禁止屏幕旋轉時Activity的重建。
禁止屏幕旋轉
可以在Mainifest中設置屏幕固定為豎屏
android:screenOrieritation="portrait"
禁止屏幕旋轉時Activity的重建
android:configChanges="orientation丨keyboardHidden丨screenSize"
7、Activity的啟動模式
啟動模式分為4種:
1、standard
2、singleTop
3、singleTask
4、singleInstance
我們可以在Manifest中通過android:launchMode指定啟動模式。
7.1、standard模式
如果不顯示指定啟動模式,那麼Activity的啟動模式就是standard,在該模式下不管Activity棧中有無該Activity,均會創建一個新的Activity並入棧,並處於棧頂的位置。
7.2、singleTop模式
1、要啟動的Activity位於棧頂
在啟動一個ActivityA時,如果棧頂的Activity就是ActivityA,那麼就不會重新創建ActivityA,而是直接使用,此時並不會調用ActivityA的onCreate(),因為並沒有重新創建Activity,ActivityA的生命周期如下:
ActivityA onPause
ActivityA onNewIntent
ActivityA onResume
可以看到調用了onNewIntent(intent: Intent?),我們可以在onNewIntent(intent: Intent?)中通過intent來獲取新傳遞過來的數據,因為此時數據可能已經發生了變化。
2、要啟動的Activity不在棧頂
雖然我們指定了ActivityA的啟動模式為singleTop,但是如果ActivityA在棧中但是不在棧頂的話,那麼此時啟動ActivityA的話會重新創建一個新的ActivityA並入棧,此時棧中就有2個ActivityA的實例了。
7.3、singleTask模式
如果准備啟動的ActivityA的啟動模式為singleTask的話,那麼會先從棧中查找是否存在ActivityA的實例:
場景一、如果存在則將ActivityA之上的Activity都出棧,並調用ActivityA的onNewIntent()。
場景二、如果ActivityA位於棧頂,則直接使用並調用onNewInent(),此時和singleTop一樣。
場景三、 如果棧中不存在ActivityA的實例則會創建一個新的Activity並入棧。
場景一:ActivityA啟動ActivityB,然後啟動ActivityA,此時生命周期過程:
ActivityB onPause
ActivityA onRestart
ActivityA onStart
ActivityA onNewIntent
ActivityA onResume
ActivityB onStop
ActivityB onDestroy
此時ActivityA不在棧頂,ActivityA之上有ActivityB,所以在啟動ActivityA時ActivityA之上的ActivityB會出棧,ActivityA將置於棧頂,所以ActivityA的onRestart和ActivityB的onDestory會執行。
場景二:ActivityA啟動ActivityA,此時生命周期過程:
ActivityA onPause
ActivityA onNewIntent
ActivityA onResume
此時ActivityA位於棧頂,此時singleTask和singleTop作用一樣,都是直接使用ActivityA,並且會調用ActivityA的onPause、onNewIntent、onResume。
場景三:ActivityA啟動ActivityB,此時生命周期過程:
ActivityA onCreate
ActivityA onStart
ActivityA onResume
7.4、singleInstance模式
不同於另外3個模式,指定singleInstance模式的Activity會啟動一個新的返回棧來管理這個Activity(其實如果singleTask模式指定了不同的taskAffinity,也會啟動一個新的返回棧),這么做的意義是什麼?
想像一個場景:如果我們程序內的一個Activity是允許其他程序訪問的,如果想實現其他程序和我們程序能共享這個Activity實例,該怎麼實現呢?使用前面3中模式是無法做到的,因為每個應用程序都有自己的返回棧,同一個Activity在不同返回棧中肯定都創建了新的實例,而使用singleInstance就可以解決這個問題。在這種模式下,會有一個單獨的返回棧來管理這個Activity,無論哪個應用程序來訪問這個Activity,都在同一個返回棧中,也就解決了共享Activity實例的問題。
為了更好的理解下面我們實戰一下:
1、將ActivityB的啟動模式修改為singleInstance
android:name=".ActivityB"
android:launchMode="singleInstance" />
2、在ActivityA、ActivityB、ActivityC的onCreate中列印taskId
##ActivityA
val tag = javaClass.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.e("TAG", "$tag taskId=$taskId")
}
##ActivityB
val tag = javaClass.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activity_second)
Log.e("TAG", "$tag taskId=$taskId")
}
##ActivityC
val tag = javaClass.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activity_c)
Log.e("TAG", "$tag taskId=$taskId")
}
在Kotlin中javaClass是當前實例的Class對象,相當於Java的getClass().
在Kotlin中ActivityB::class.java是獲取ActivityB類的Class對象,相當於Java中的ActivityB.class。
3、啟動ActivityA->啟動ActivityB->啟動ActivityC,taskId列印結果如下:
ActivityA taskId=4163
ActivityB taskId=4164
ActivityC taskId=4163
可以看到ActivityB的taskId是不同於ActivityA 和ActivityC的,這也說明了ActivityB 是在一個單獨的棧中的,並且返回棧中只有這一個Activity。
4、在ActivityC中按返回鍵,返回到ActivityA,再按返回鍵返回到ActivityB,這是為什麼呢?其實很好理解:ActivityA 和ActivityC 在同一個返回棧中,在ActivityC 中按返回鍵ActivityC 出棧,此時ActivityA就位於棧頂了,ActivityA就展示在界面上了,在ActivityA中再按返回鍵,這是當前的返回棧已經空了,於是就展示了另一個返回棧棧頂的ActivityB了。
————————————————
版權聲明:本文為CSDN博主「保瓶兒」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_31211457/article/details/114052641
Ⅱ 計算機二級考試內容是什麼
計算機二級包括二級C,二級C++,二級VB,二級VFP,二級Access,二級Java,二級office。其需要學習的內容如下:
1.二級C:DOS命令,計算機組成原理,多媒體、資料庫操作、計算機網路、C語言程序設計、上機考試。
2.二級C++:按照新大綱需要學習的內容有:C++語言概述、C++語言數據類型、運算符和表達式、基本控制語句、數組、指針與引用、函數、類和對象繼承、模板等內容。
3.二級VB:按照新大綱,需要學習的內容有:VB基本概念、集成開發環境、可視化編程方法、基本輸入輸出、常用控制項功能及使用、VB控制結構語句等。
4.二級VFP:需要學習的內容有:資料庫系統與VFP基礎知識、資料庫基本操作、結構化查詢語言SQL、VFP程序設計、設計器和項目管理器使用等。
5.二級Access:按照新大綱,需要學習的內容有:資料庫系統、資料庫和表、資料庫查詢窗體、報表、數據訪問頁、宏、模塊等。
6.二級Java:按照新大綱,需要學習的內容有:JAVA語言概論、JAVA數據類型、運算符和表達式、流程式控制制、類、數組和字元串操作、異常處理、輸入輸出及文件操作、線程與對象串列化、編寫圖形用戶界面、applet程序設計:J2SDK的下載和操作、JAVA的應用。
7.二級office:按照新大綱,需要學習的內容有:計算機的基礎知識,Word的功能和使用 ,Excel的功能和使用,PowerPoint的功能和使用。
(2)javaweb列印控制項擴展閱讀:
計算機二級C語言考試時間為每年的3月下旬和9月下旬,分別在12月份和9月份報考。考試題型主要是選擇共四十道,每題1分,其中公共基礎知識10分(10題),其他知識組合起來共30分(30題);程序填空、程序改錯和程序設計共六十分,其中程序填空18分、程序改錯18分、程序設計24分。
計算機二級考試的重要性:
許多單位、部門已把掌握一定的計算機知識和應用技能作為人員聘用、職務晉升、職稱評定、上崗資格的重要依據之一。鑒於社會的客觀需求,經原國家教委批准,原國家教委考試中心於1994年面向社會推出了NCRE,其目的在於以考促學,向社會推廣和普及計算機知識。
計算機技術的應用在我國各個領域發展迅速,為了適應知識經濟和信息社會發展的需要,操作和應用計算機已成為人們必須掌握的一種基本技能。
參考資料來源:網路—計算機二級考試
Ⅲ android實戰培訓課程
⑴ 安卓培訓主要學習哪兒些內容
每個人准備培訓情況和基礎都是不一樣的,但是看了你的問題之後覺得咱倆的情況還是很相似的,我是去年畢業的,當時我學的是計算機專業,當時在學校的時候開的各門的課程都是以理論基礎為主要的,我也不是說大學的教育不好,可是當時的課程一般都是教授級別的給我們講一般的模式就是老師講課在上面念PPT我們在下面拍照,等最後考試的時候老師直接給我們劃題答案背過基本這一年就這樣過去了,技術類的東西是真心沒學到,後來華清遠見到我們學校和我們學校合作,給我們弄得安卓方面的實訓課程,覺得自己欠缺的很多的,也是怕和你這種情況一樣找不到理想的工作,所以我就在華清遠見進行的安卓培訓,當時我們的學習內容主要有以下幾點,其實各種的培訓班的課程都是大同小異的老師屬於一部分的因素最關鍵的還是要靠自己的。
第一階段的課程一般都是Java編程開發,這一部分應該會和Java後台有相關聯的地方,但是比Java後台簡單,這一階段一般要學習Java語法和Java面向對象思想、Java數據結構及演算法、GUI界面編程、Java進程與線程、Java網路通信與流、設計模式、資料庫和Javaweb,安卓在這一階段的學習內容看似和後台關聯性很大,但是這一部分我們只學習後台一些基礎的東西和日後會用到的東西,我們要把基礎奠定好。
第二階段要學習的內容是安卓基礎開發,主要的課程內容為Android界面編程(界面編程是Android入門的核心技術,內容縱多,涉及四大組件之一Activity、Wedget、自定義View、事件處理、動畫處理、列表、圖片處理、國際化、資源文件、菜單、通知、對話框、Tools/ActionBar/Fragment、樣式/主題、Intent。)、進程與線程、服務與廣播、數據存儲、網路通信、多媒體以及硬體相關,這一階段更注重安卓入門基礎的培訓,一定要好好的把握。
接下來學習的內容是一個進階階段,主要學習的是安卓的高級開發,一般的課程內容為HOME開發、NDK開發等、地圖開發項目發布等等,以上就算是安卓培訓的所有學習內容,但是你掌握了學習內容之後還是遠遠不夠的,一般的培訓班都會給我們安排項目實戰的,這是一種思想的鍛煉,我們做什麼就要有什麼的思維做後台的有做後台的思維,做前端的有做前段的思維,我們學安卓的進行手機端APP開發的就要有安卓的思維,這一階段也是很重要的,就好比我們在華清遠見學完整體的內容之後也參與了一些項目的實戰。
我把每一階襪困段要學習的課程都給你整理了,你可以現在有準備的去看一些基礎的視頻或者相關的書籍了。
⑵ 我想學習安卓開發,哪個培訓機構靠譜呢
沒什麼好與不好,建議對比師資選擇,管理團隊擁有平均10年以上IT培訓行業從業經驗,核心講師團隊由Mars、老羅、餅乾等移動互聯網傳奇名師領銜,以良知教學為本、責任心強,平均8年的執教經驗,在業內首屈一指,教學方面可以不用擔心。
⑶ 現在的安卓教育培訓是真的嗎
當然是真的,首先國內移動互聯時代是移動應用App的爆發式增長,人們的消費與使回用傾向正逐漸向移動答端轉移,這種趨勢就如同當初的互聯網一樣勢不可擋。從各項統計來看,現在App的大行其道,正慢慢的吞噬著軟體業。都說互聯網改變了我們的生活,不過短短的數年時間,帶來的卻是一整個屬於移動端的時代。
其次移動開發行業的人才供不應求,缺口逐漸加大,所以除了專業的開發者,也吸引了一大群嘗試擇業的在職者和優秀畢業生。與此同時,移動端的教育培訓缺口也被打開,一些經典的如Android開發培訓課程受到了學員們熱烈的追捧。
數據表明,當前Android已經佔到移動系統的80%以上。因而越來越多的應屆畢業生與在職者從原來的專業或職業中走出來,擁抱IT,擁抱移動互聯網這個朝氣蓬勃的產業。首選就是學Android開發,因而選擇好的線上或線下Android培訓機構就顯得極為重要。
最後好的Android開發培訓課程,必唯伍然來自好的Android開發培訓機構。尚矽谷教育通過全日制小班授課與項目實戰相結合的形式,全方位的服務學員,專注於移動互聯網領域高端課程的研發。
⑷ Android培告山念訓課程有什麼內容
今後,業界將有兩種移動開發課程體系:一種是其他機構Android課程,一種是尚矽谷Android+HTML5混合開發課程。
尚矽谷Android課程全面升級為《Android+HTML5混合開發》,讓學員如虎添翼!在原Android課程基礎上加入HTML、CSS、JavaScript、React核心,React Native跨平台混合開發、豆瓣搜索項目實戰等H5前端技術。
當前,同時掌握「Android原生開發」+「H5跨平台開發」兩大核心技術的復合型移動開發人才嚴重供不應求,薪資節節攀升,就業及未來職業發展都極具競爭力。
⑸ 安卓系統 培訓 有什麼課題可以選
只要寫GUI開發就可以了,這本身就很深奧了。可以從以下著眼: 1.GUI框架 2.各個控鍵的重復使用 3.高擴展性 4.性能優化 可以參考一下《Java Swing ...
⑹ 安卓培訓多少錢,安卓培訓課程有哪些
Android培訓周期一般都是4個月,至於培訓費用大部分培訓機構的收費標准都不相上下,部分Android高端培訓費用會偏高一點,費用2W+。選擇Android培訓除了看培訓機構外也要看自身條件,適合參加什麼樣的培訓,例如普通還是高端,普通的Android培訓零基礎也可以,但高端Android培訓就需要計算機語言基礎了。
好程序員Android高端班課程,是一套涵蓋 Java 語言強化、Java Web 開發、Android 應用開發、Android 游戲開發的專業課程。本套課程真正圍繞Android知識體系制訂,絕非由Java EE課程、Java ME課程或者Symbian課程改造而成。每一階段課程涵蓋多個實戰項目,每個知識點均對應項目中實際功能,學習新知識的同時不斷向項目中添加新功能,獨特的教學方法幫助學員強化學習目標,迅速提升學習能力。致力於培養Android 高端開發人才,旨在培養真正的 Android 應用和游戲開發能力的高素質人才,學員畢業即具備行業前沿開發技術。
第一階段 Java面向對象高級編程——java編程語法進階
該階段課程重點講解了面向對象設計原則與設計模式;智能家居之遠程監控。
Java面向對象編程
1、面向對象設計原則
2、面向對象設計模式概要
3、面向對象設計模式a.創建型設計模式b.結構型設計模式c.行為模式4、數據結構與常用演算法
第二階段 高級JDK API開發技術 —— Java Web編程
該階段課程重點講解了JDK當中的高級API的使用方法,包括新的並發線程庫和反射機制。手機安全衛士
Java Web編程
1、並發線程庫介紹
2、線程本地變數的使用方法
3、信號量與可重入鎖
4、讀寫鎖的使用方法
5、阻塞隊列與同步 *** 庫使用方法
6、Java反射機制介紹
7、Class、Field和Method的使用方法
8、動態代理模式的使用方法
9、Java框架開發原理
第三階段 Android基礎階段大綱
一、UI基礎
1.Android環境搭建及工程目錄介紹:1.1 Android開發(版本:SDK21及以上版本)環境搭建1.2 Android發展史、移動設備操作系統、四層系統架構等理論知識1.3 HelloWorld程序1.4 adb shell簡介(install uninstall)
2.常用UI布局及主要控制項2.1 LinearLayout2.2 RelativeLayout2.3 FrameLayout2.4 GridLayout2.5 TextView基本用法
3.表單UI控制項及相應控制項的事件處理3.1 EditText、Button、ImageView3.2 RadioButton及RadioGroup的用法3.3 CheckBox的多選效果及監聽3.4 Toast的基本用法
4.Spinner、AutoCompleteTextView、ScrollView及適配器、數組資源4.1 Spinner4.2 適配器4.3 數組資源4.4 AutoCompleteTextView4.5 ScrollView4.6 ProgressBar、SeekBar、RatingBar
5.UI美化及Android資源5.1 Style的簡單用法5.2 Android資源匯總
二、應用核心組件初識
1.Activity生命周期及頁面跳轉傳值1.1 Activity的聲明和使用1.2 Activity生命周期1.3 Activity現場保護1.4 Activity基本頁面跳轉及傳值1.5 Activity具有返回值的頁面跳轉
2.Activity啟動模式及Intent七大屬性2.1 Task和Back Stack的基本概念2.2 Activity的啟動模式2.3 Intent屬性的特點及用法
3.AsyncTask非同步任務3.1 使用非同步任務的必要性3.2 非同步任務的用法
4.ListView基本用法及適配器介紹4.1 ListView基本用法4.2 SimpleAdapter4.3 BaseAdapter
5.ListView優化及分頁載入數據、GridView載入網路圖片、ExpandableListView5.1 ListView優化5.2 ListView滾動監聽實現分頁載入數據5.3 GridView載入圖片
三、數據存儲
1.菜單及對話框1.1 OptionsMenu1.2 ContextMenu1.3 PopupMenu1.4 PopupWindow1.5 AlertDialog1.6 ProgressDialog1.7 列表對話框1.8 自定義Dialog
2.數據存儲2.1 SharedPreferences2.2 內部存儲2.3 外部存儲2.4 存儲Bitmap圖片到外部存儲
3.SQLite資料庫與CursorAdapter適配器3.1 回顧SQLite3.2 SQLiteOpenHelper的用法3.3 CursorAdapter
4.ContentProvider4.1 ContentResolver實現系統資料庫的操作4.2 自定義ContentProvider
5.Loader5.1 CursorLoader的用法5.2 AsyncTaskLoader載入本地數據
四、移動開發主流界面實現
1.動畫資源1.1 幀動畫1.2 補間動畫1.3 屬性動畫
2.Fragment2.1 Fragment基本用法2.2 Fragment傳值2.3 Fragment性能優化
3.ViewPager3.1 ViewPager與適配器3.2 ViewPager載入網路圖片3.3 PagerAdapter的優化
4.書簽導航4.1 書簽導航多種實現方式(無需代碼實現)4.2 RadioGroup + ViewPager + Fragment實現導航4.3 HorizontalScrollView + ViewPager + Fragment實現導航
5.Handler、Looper消息傳遞機制5.1 Handler、Looper消息傳遞機制的原理5.2 Handler、Looper源碼
五、應用核心組件進階(Android Studio開發環境教學)
1.ActionBar (Action View、SearchView)+ ToolBar1.1 ActionBar1.2 ToolBar
2.BroadcastReceiver及Notification2.1 Notification (普通通知、大視圖通知、進度條通知、自定義通知)2.2 廣播接收器2.3 自定義發送廣播
3.Service基礎3.1 Service介紹3.2 Start Service3.3 IntentService3.4 Bind Service3.5 兩種服務混合使用實現MediaPlayer音樂播放
4.跨進程的Service4.1 AIDL4.2 Messenger
5.LruCache與Bitmap二次采樣、WebView與HTML5混合開發5.1 LruCache5.2 二次采樣5.3 WebView5.4 HTML5混合開發
六、View深入探究
1.網路地圖1.1 網路地圖基本用法1.2 網路地圖搜索
2. 事件分發消費機制2.1 事件分發消費機制原理2.2 事件分發消費機制的應用場景
3.自定義View(一)3.1 自定義View介紹3.2 自繪制的自定義View
4.自定義View(二)4.1 具有介面回調的自定義View4.2 繼承於ViewGroup的自定義View
5.機型適配及SVN搭建5.1 機型適配介紹5.2 屏幕相關重要概念回顧5.3 機型適配的解決方案5.4 SVN搭建
第四階段 Android項目實戰階段大綱
一、項目實戰第一階段
1.TabLayout及SlidingPaneLayout1.1 TabLayout(5.0Material Design新技術)與ViewPager配合自定義Tab1.2 SlidingPaneLayout左側或右側滑動1.3 NavigationView(5.0Material Design新技術)HeaderLayoutMenu xml配置Navigation監聽事件
2.okHttp網路訪問框架及Picasso2.1 okHttp框架的介紹2.2 okHttp框架的用法Http請求方法:get,post同步請求,非同步請求(回調在非UI線程中)2.3 Picasso載入網路圖片的用法簡單圖片請求Picasso通用配置:內存緩存大小,磁碟緩存大小及位置圖片載入配置:下載尺寸,填充模式,載入中圖片,錯誤圖片2.4 第三方側滑菜單:SlidingMenu菜單設置
3.Fresco(壁畫非同步載入圖片框架)3.1 Fresco框架的介紹3.2 Fresco框架的用法(中文文檔)簡單圖片請求Fresco通用配置:內存緩存大小,磁碟緩存大小及位置圖片載入配置:下載尺寸,填充模式,載入中圖片,錯誤圖片,頂層,底層,圖片變形
4.PullToRefresh、SwipeRefreshLayout及Ultra PullToRefresh4.1 PullToRefresh框架配置事件回調多種控制項PullToRefreshBase重寫4.2 SwipeRefreshLayout配置事件回調4.3 Ultra PullToRefresh(中文文檔)配置事件回調多種下拉效果
5.打包(按渠道打包)、混淆及數字簽名5.1 按渠道打包基本打包多渠道:資源,清單文件,代碼,調試5.2 混淆開啟混淆混淆配置:保留類,保留方法,忽略錯誤5.3 數字簽名生成keystore配置簽名
二、項目實戰第二階段——Android新技術
1.RecyclerView1.1 5.0新技術介紹(Material Design)設計理念、新增控制項1.2 RecyclerView的用法、CardView的用法1.3 RecyclerView與ListView比較
2.5.0Material Design新技術2.1 CoordinatorLayoutToolbar與Layout2.2 TextInputLayout錯誤監聽2.3 Snackbar監聽Action2.4 FloatingActionButton屬性介紹onClick
3.媒體播放器3.1 視頻播放器VideoView3.2 SurfaceView及MediaPlayerSurfaceView介紹與View區別SurfaceHolder與CallBackMediaPlayer.setDisplayMediaPlayer載入網路視頻3.3 獲取視頻縮略圖使用Fresco3.4 ListView的item實現視頻播放Item顯示視頻單Item播放Item滾出時停止播放3.5 播放器全屏顯示與恢復3.6 Vitamio(維他密播放器)
4.攝像頭、感測器、ZXing二維碼4.1 利用Intent實現攝像頭兩種模式,存文件和縮略圖4.2 加速度感測器實現《搖一搖》感測器獲取感測器監聽注冊加速度感測 搖一搖4.3 ZXing實現生成二維碼(容錯等級、二維碼正中心Logo)生成BitMatrix轉Bitmap容錯等級中心Logo4.4 ZXing實現二維碼掃描導包
5.JPush推送、ShareSDK一鍵分享及第三方登錄5.1 JPush極光推送的原理及用法通知推送消息推送推送原理5.2 ShareSDK一鍵分享及第三方登錄注冊集成分享第三方登錄APIOAuth介紹
三、項目實戰第三階段
1.加密解密1.1 對稱加密(AES 、DES、3DES)1.2 非對稱加密(RSA)1.3 消息摘要(MD5、 SHA-1 )1.4 編碼解碼(Base64、URLEncode、URLDecode)
2.網路支付2.1 Alipay支付2.2 微信支付
3.ButterKnife(反轉注入框架)、EventBus、ActiveAndroid(資料庫ORM框架)及Retrofit(網路訪問框架)3.1 ButterKnife(反轉注入框架)3.2 EventBus的用法3.3 ActiveAndroid(資料庫ORM框架)3.4 Retrofit(網路訪問框架)
4.項目實戰需知4.1Git、UML4.2XMPP4.3常見面試題4.4移動端與伺服器端的交互流程4.5移動開發工程師與web工程師工作配合的流程4.6面試常用技巧(面試禁忌)4.7開發規范(代碼規范)
第五階段 就業指導及職業規劃
⑺ 求比較好的android培訓的課程
可以看看android培訓學習課程大綱了解下,課程分階段進行,不同階段學習的詳細內容可以看下。
第一階段:Android編程基礎--JavaSE階段()
Java語言入門
1、介紹計算機的基本使用和DOS常用命令 2、Java概述和開發環境 3、關鍵字、標識符、常量與變數 4、數據類型和運算符
5、流程式控制制與數組 6、方法的定義及格式、正確的調用方法
OOP編程
1、面向對象編程(OOP)、類和對象 2、成員變數和局部變數、方法(方法重載)、匿名對象 3、構造方法、封裝、this關鍵字
4、方法參數的傳遞(傳值、傳址)、static關鍵字 5、繼承、super關鍵字、方法的重寫、訪問修飾符許可權 6、抽象類與抽象方法、介面
7、多態(對象的多態,對象的轉型) 內部類和常用的設計模式
Java核心API
1、異常、異常處理,自定義異常
2、java基礎類庫:Object類、Scanner類、String類、StringBuffer類、
StringBuilder類、Arrays類、基本包裝類(拆箱、裝箱)、正則表達式、Math類、Random類、System類、Date類、DateFormate類、Calendar類,及其常用方法
3、 *** 框架:Collcetion介面、List介面、Set介面、Iterator介面、Map介面
4、List介面:ArrayList類、LinkedList類、Vector類、Stack類 Set介面:HashSet類、TreeSet類、Map介面: HashMap類、HashTable類、LinkedHashMap類、TreeMap類
5、泛型的使用
6、File類、File類的常用方法
7、I/O操作:IO流的種類,IO流的使用(位元組輸入/輸出流、字元輸入/輸出流、 位元組(字元)緩存流、轉換流、列印流、內存流、對象流、隨機讀取流) 多線程的使用(Thread類的常用方法、線程的生命周期,線程的實現、線程的安全問題)
網路與Web應用
1、Socket編程
2、HTML(結構,form表單)、Servlet簡介
3、SQLite資料庫的使用
4、HTTP網路訪問(URL類、HttpURLConnection類、HttpClient類)
5、JSON解析(JSON的格式、JSON的常用解析:JSON、Gson、fastJson)
6、XML解析(XML簡介、兩種常用的解析方式: PULL解析、SAX解析) 反射機制
第二階段:Android開發初級階段
UI基礎
1、Android發展史及四層系統架構
2、Android環境搭建及SDK介紹
3、創建第一個Android程序
4、Eclipse開發APP的目錄結構
5、Android Studio開發APP的目錄結構
6、adb shell簡介
7、View常用屬性
8、Android長度相關單位的概念、區別及轉換運算(sp、dp、dip、px、dpi)
9、LinearLayout及RelativeLayout特有屬性
10、FrameLayout及GridLayout特有屬性
11、TextView、EditText、Button、ImageView基本用法
12、RadioButton及RadioGroup的用法
13、CheckBox的多選效果及監聽
14、Spinner常用屬性及適配器
15、AutoCompleteTextView、ScrollView、ProgressBar、SeekBar、RatingBar的基本用法
16、Style的作用及基本用法
17、Android常用資源(id、字元串資源、顏色資源、尺寸資源、布局資源、數組資源、樣式和主題資源 、菜單資源、圖像資源、動畫資源、原生xml資源、raw資源、特殊Drawable資源、自定義屬性資源)
應用核心組件初識
1、Activity生命周期及頁面跳轉傳值
2、ctivity啟動模式及Intent七大屬性
3、AsyncTask非同步任務 ListView常用屬性、方法及監聽器ListView與ArrayAdapter的使用
4、ListView與SimpleAdapter的使用
5、SimpleAdapter與ViewBinder結合使用
6、ListView與BaseAdapter
7、ListView優化(內存空間優化、運行時間優化、ListView中item多布局的復用)
8、ListView滾動監聽實現分頁載入數據
9、GridView載入圖片
10、ExpandableListView的用法
數據存儲及相關組件
1、菜單及對話框 (OptionsMenu、ContextMenu、PopupMenu、PopupWindow、AlertDialog、ProgressDialog、列表對話框、自定義Dialog)
2、SharedPreferences
3、內部存儲的概念及用法
4、外部存儲的概念、存儲目錄及用法
5、存儲Bitmap圖片到外部存儲
6、SQLite資料庫與CursorAdapter適配器
7、ContentProvider與ContentResolver的概念及關系
8、ContentResolver實現系統數據的操作(聯系人、媒體庫文件、通話記錄、簡訊記錄)
9、自定義ContentProvider
10、CursorLoader的使用場景及用法
11、AsyncTaskLoader的用法以及與CursorLoader的對比
移動開發主流界面實現
1、動畫資源(幀動畫、補間動畫、屬性動畫)
2、Fragment基本用法
3、Fragment傳值
4、Fragment性能優化
5、EventBus的作用以及在Fragment中的應用
6、ViewPager基本使用(ViewPager實現歡迎引導頁)
7、ViewPager的適配器PagerAdapter、FragmentPagerAdapter、FragmentStatePagerAdapter
8、ViewPager載入網路圖片
9、PagerAdapter優化
10、TAB書簽導航的多種實現方式
11、RadioGroup + ViewPager + Fragment實現TAB導航HorizontalScrollView + ViewPager + Fragment實現TAB導航
應用核心組件進階
1、ActionBar基本用法(ActionBar顯示和隱藏、ActionBar添加動作項、ActionBar啟動圖標導航、分離式ActionBar、
ActionBar導航模式、ActionBar現場保護 Action View的介紹、ActionProvider)
2、ActionBar上SearchView的用法
3、ToolBar的基本用法
4、ToolBar的Standalone用法
5、Notification (普通通知、大視圖通知、進度條通知、自定義通知)
6、廣播接收器的概念、作用、分類及注冊
7、廣播接收器實現系統監聽(開機監聽、簡訊監聽、電話監聽、耳機插拔監聽、網路狀態改變監聽、電量改變監聽)
8、自定義發送廣播(發送無序廣播、有序廣播、發送本地廣播、注冊本地廣播接收器 )
9、Service的概念、分類、生命周期、注冊及使用場景
10、Start Service實現音樂播放器
11、IntentService實現網路視頻文件下載
12、DownloadManager實現網路視頻文件下載
13、Bind Service實現音樂播放器
14、兩種服務混合使用實現MediaPlayer音樂播放
15、AIDL跨進程Service的概念及用法
16、Messenger的概念及用法
17、Handler、Looper消息傳遞機制的原理
18、Handler、Looper源碼分析
19、LruCache與Bitmap二次采樣
20、WebView基本用法以及與5交互
View深入探究
1、事件分發消費機制的原理分析及應用場景
2、自定義View的常規做法
3、自繪制的自定義View(畫布Canvas、畫筆Paint、重寫onDraw()方法、重寫onMeasure()方法、自定義屬性)
4、組合式自定義View
5、具有手勢監聽的自定義View
6、繼承於ViewGroup的自定義布局
7、Android中機型適配出現的原因(系統碎片和屏幕碎片)
8、機型適配的解決方案(屏幕適配:相對布局、尺寸限定符、最小寬度限定符、屏幕方向限定符、自動拉伸點陣圖,版本適配,語言自適應)
第三階段:Android開發高級階段
常用第三方框架
1、網路地圖(網路地圖API及配置、網路地圖定位及覆蓋物、網路POI檢索、出行線路規劃、公交路線查詢)
2、第三方側滑菜單SlidingMenu及與原生DrawerLayout、SlidingPaneLayout的對比
3、UIL(universal-image-loader)圖片載入框架
4、okHttp網路訪問框架
5、Picasso載入網路圖片框架
6、Fresco載入圖片框架
7、xUtils3、0框架
8、PullToRefresh下拉刷新框架
9、Ultra PullToRefresh下拉刷新框架
10、ButterKnife(反轉注入框架)
11、ActiveAndroid(資料庫ORM框架)
12、Retrofit(網路訪問框架)
Android5.0新技術
1、RecyclerView及CardView
2、ExpandableRecyclerView CoordinatorLayout協調AppBarLayout、CollapsingToolbarLayout、NestedScrollView、 Toolbar、RecyclerView等控制項實現特殊滾動效果
3、TextInputLayout與TextWatcher
4、FloatingActionButton
5、Snackbar
6、TabLayout介紹以及與ViewPager、Fragment配合實現TAB導航效果
7、NavigationView介紹以及結合DrawerLayout使用SwipeRefreshLayout下拉刷新控制項
其他高級技術
1、媒體播放器(MediaPlayer、VideoView、SurfaceView及MediaPlayer)
2、Vitamio第三方播放器
3、攝像頭
4、感測器
5、ZXing二維碼
6、JPush極光推送
7、ShareSDK一鍵分享及
8、第三方登錄
9、Alipay支付及微信支付
10、加密解密(編碼解碼、對稱加密、非對稱加密、消息摘要)/p>
第四階段:Android項目實戰階段
APP開發
1、商業應用項目模擬(項目結構分析及設計、UML、Git、SVN、打包混淆及數字簽名)
2、移動開發工程師與web工程師工作配合的流程
3、常見面試題
4、面試常用技巧(面試禁忌)
5、開發規范(代碼規范)
⑻ google android官方培訓課程中文版這個學完夠嗎
不夠啊,你在多拿幾個項目練練手
Ⅳ js列印問題,急!!!!!
對JS的列印方法總結一下,侍蠢方便日後查閱。
一.用JS自帶函數列印
直接調用
Java代碼 復制代碼
1. <a href="數啟javascript:window.print();">列印</a>
<a href="javascript:window.print();">列印</a>
二.IEWebBrowser組件
介紹
http://support.microsoft.com/default.aspx?scid=kb%3BEN-US%3BQ267240#top
http://support.microsoft.com/kb/q247671/#appliesto
Java代碼 復制代碼
1. <OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>
2. <input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打開>
3. <input name=Button onClick=document.all.WebBrowser.ExecWB(2,1) type=button value=關閉所有>
4. <input name=Button onClick=document.all.WebBrowser.ExecWB(4,1) type=button value=另存為>
5. <input name=Button onClick=document.all.WebBrowser.ExecWB(6,1) type=button value=列印>
6. <input name=Button onClick=document.all.WebBrowser.ExecWB(6,6) type=button value=直接列印>
7. <input name=Button onClick=document.all.WebBrowser.ExecWB(7,1) type=button value=列印預覽>
8. <input name=Button onClick=document.all.WebBrowser.ExecWB(8,1) type=button value=頁面設置>
9. <input name=Button onClick=document.all.WebBrowser.ExecWB(10,1) type=button value=屬性>
10. <input name=Button onClick=document.all.WebBrowser.ExecWB(17,1) type=button value=全選>
11. <input name=Button onClick=document.all.WebBrowser.ExecWB(22,1) type=button value=刷新>
12. <input name=Button onClick=document.all.WebBrowser.ExecWB(45,1) type=button value=關閉>
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>
<input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打開>
<input name=Button onClick=document.all.WebBrowser.ExecWB(2,1) type=button value=關閉所有>老畢陪
<input name=Button onClick=document.all.WebBrowser.ExecWB(4,1) type=button value=另存為>
<input name=Button onClick=document.all.WebBrowser.ExecWB(6,1) type=button value=列印>
<input name=Button onClick=document.all.WebBrowser.ExecWB(6,6) type=button value=直接列印>
<input name=Button onClick=document.all.WebBrowser.ExecWB(7,1) type=button value=列印預覽>
<input name=Button onClick=document.all.WebBrowser.ExecWB(8,1) type=button value=頁面設置>
<input name=Button onClick=document.all.WebBrowser.ExecWB(10,1) type=button value=屬性>
<input name=Button onClick=document.all.WebBrowser.ExecWB(17,1) type=button value=全選>
<input name=Button onClick=document.all.WebBrowser.ExecWB(22,1) type=button value=刷新>
<input name=Button onClick=document.all.WebBrowser.ExecWB(45,1) type=button value=關閉>
三.使用ScriptX.cab控制項
1.下載ScriptX.cab控制項
官網http://www.meadroid.com/scriptx/index.asp
2.使用object元素,修改codebase,classid的值
這里調用控制項ScriptX.cab
Java代碼 復制代碼
1. <OBJECT id="factory" style="DISPLAY: none" codeBase="${rootUrl}js/smsx.cab#VVersion=6,3,435,20" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>
<OBJECT id="factory" style="DISPLAY: none" codeBase="${rootUrl}js/smsx.cab#VVersion=6,3,435,20" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>
這段代碼用來載入cab文件,clsid和codebase必須要和你下載的cab中的信息對應,否則組件會載入錯誤,這兩項其實不難找,只要你用winrar打開你下載的cab文件,然後找到擴展名是.inf的文件,然後打開之,就能看到了。
3.調用控制項腳本
Print.js文件
Java代碼 復制代碼
1. function setPrintBase(headerText,footerText,rootUrl) {
2.
3. // -- advanced features ,未曾使用過,有待確認。
4.
5. //factory.printing.SetMarginMeasure(2); // measure margins in inches
6.
7. //factory.SetPageRange(false, 1, 3);// need pages from 1 to 3
8.
9. //factory.printing.printer = "HP DeskJet 870C";
10.
11. //factory.printing.copies = 2;
12.
13. //factory.printing.collate = true;
14.
15. //factory.printing.paperSize = "A4";
16.
17. //factory.printing.paperSource = "Manual feed"
18.
19. var header = (headerText==null||headerText=="")?'默認頁眉':headerText;
20.
21. var footer = (footerText==null||footerText=="")?'默認頁角':footerText;
22.
23. factory.printing.header = "&b"+header+"&b" ;
24.
25. factory.printing.footer = "&b"+footer;
26.
27. factory.printing.portrait = true;
28.
29. factory.printing.leftMargin =10.00;
30.
31. factory.printing.topMargin =10.00;
32.
33. factory.printing.rightMargin =10.00;
34.
35. factory.printing.bottomMargin =10.00;
36.
37. }
function setPrintBase(headerText,footerText,rootUrl) {
// -- advanced features ,未曾使用過,有待確認。
//factory.printing.SetMarginMeasure(2); // measure margins in inches
//factory.SetPageRange(false, 1, 3);// need pages from 1 to 3
//factory.printing.printer = "HP DeskJet 870C";
//factory.printing.copies = 2;
//factory.printing.collate = true;
//factory.printing.paperSize = "A4";
//factory.printing.paperSource = "Manual feed"
var header = (headerText==null||headerText=="")?'默認頁眉':headerText;
var footer = (footerText==null||footerText=="")?'默認頁角':footerText;
factory.printing.header = "&b"+header+"&b" ;
factory.printing.footer = "&b"+footer;
factory.printing.portrait = true;
factory.printing.leftMargin =10.00;
factory.printing.topMargin =10.00;
factory.printing.rightMargin =10.00;
factory.printing.bottomMargin =10.00;
}
例子
Java代碼 復制代碼
1. <%@ page contentType="text/html;charset=GBK"%>
2.
3. <html>
4. <head>
5. <meta http-equiv="imagetoolbar" content="no">
6. <script language="javascript" src="print.js"></script>
7. <style media="print">
8. .Noprint {DISPLAY: none;}
9. </style>
10. <title>列印測試</title>
11. </head>
12. <OBJECT id="factory" style="DISPLAY: none" codeBase="smsx.cab#VVersion=6,3,435,20" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>
13.
14. <script defer>
15. function window.onload() {
16. setPrintBase('頁眉','頁腳');
17. }
18. </script>
19. <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">
20. <center class="Noprint">
21. <input type=button value="列印" onclick="factory.printing.Print(true)">
22. <input type=button value="頁面設置" onclick="factory.printing.PageSetup()">
23. <input type=button value="列印預覽" onclick="factory.printing.Preview()">
24. <input type="button" value="關閉" onclick="window.close();">
25. </center>
26. <center>
27. <table width="100%" border="0" cellpadding="0" cellspacing="0">
28. <tr><td align="center"><b>內容</b></td></tr>
29. </table>
30. </center>
31. </body>
32. </html>
<%@ page contentType="text/html;charset=GBK"%>
<html>
<head>
<meta http-equiv="imagetoolbar" content="no">
<script language="javascript" src="print.js"></script>
<style media="print">
.Noprint {DISPLAY: none;}
</style>
<title>列印測試</title>
</head>
<OBJECT id="factory" style="DISPLAY: none" codeBase="smsx.cab#VVersion=6,3,435,20" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>
<script defer>
function window.onload() {
setPrintBase('頁眉','頁腳');
}
</script>
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">
<center class="Noprint">
<input type=button value="列印" onclick="factory.printing.Print(true)">
<input type=button value="頁面設置" onclick="factory.printing.PageSetup()">
<input type=button value="列印預覽" onclick="factory.printing.Preview()">
<input type="button" value="關閉" onclick="window.close();">
</center>
<center>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td align="center"><b>內容</b></td></tr>
</table>
</center>
</body>
</html>
四.對比
1.Window.print調用方便,但功能簡單
2.功能更強大,但使用IEWebBrowser有時會報JS沒有許可權的錯誤。
3.ScriptX控制項功能也比較強大,目前在使用這種方式。
這里的也不錯啊,有列印到 word的和excel
http://hi..com/afei0211/blog/item/20523955ca8bebc2b745ae98.html
http://hi..com/hongz1125/blog/item/0152bcfd84ce1e1008244d5c.html
.NET環境下的
http://blog.csdn.net/flygoldfish/archive/2004/08/17/77208.aspx
Ⅳ 如何在java web項目中實現列印功能,比如一
你可以了解下jatoolsprint 目前所遇到的列印問題都可以解決。
不過要裝一個控制項。大小60K.
這是他們網上的介紹。你可以了解下。
jatoolsPrinter (傑表.列印控制項)是一款實現網頁套打的專用工具。作為web應用開發者,我們經常會遇到在瀏覽器中列印報表、票據的需求,這些需求瀏覽器本身的列印功能一般不能滿足, 如精確分頁,套打等。這就需要有一種能解決常見的瀏覽器端列印問題的軟體工具,這也是 jatoolsPrinter 的研發背景。
jatoolsPrinter 的特點是可以直接對web頁面進行精確的分頁列印。jatoolsPrinter 通過在網頁中嵌入控制項,解決了web客戶端精確列印,批量列印,列印配置自動保留等問題。 具體功能有:
支持設置列印參數,指定輸出列印機、紙張類型,列印方向(橫、豎)等 。
支持html格式的頁腳、頁眉設置,也就是說,頁腳頁眉可設置圖片等,如公司logo。
支持程序分頁與自動分頁。
支持列印參數自動保留,待下一次列印同一票據時,自動設置,這使客戶端也可以控制列印參數。
支持列印預覽,支持預覽時指定頁、指定份數列印。
支持直接列印指定票據的URL。
支持票據及其附件的批量列印。
支持取得本機中的可用列印機,可用紙張類型列表,幫您設計出更友好的參數設置界面。
支持回調,可以幫助您在列印後自動處理有關事務,比如列印後自動關閉窗口、自動遞交表單數據等。
支持票據套打時,底圖僅在列印預覽時顯示,不輸出到列印機。
小巧,整個控制項只有60K。不需要額外的軟體包支持。
與您項目採用的技術標准無關,J2EE、.NET 項目均可。
IE 5.5+ 中適用。
Ⅵ java(web)列印 通常是怎麼實現的
Web系統中,列印功能一直是個老大難問題,因此產生了很多第三方的控制項,多數要收費,而且跟自己的系統結合有一定的麻煩。系統採用J2EE技術,jsp列印問題同樣存在於OA中。
列印方式有三種:一是不經過任何修改,直接調用javascript中的window.print()列印。二根據客戶要求的報表格式,編寫相應格式的html,裝載數據列印,同樣調用window.print()列印,只是對html的格式要求比較高。三是通過客戶提供的word格式,通過xml配置文件與資料庫的數據進行關聯,自動裝載數據到word中列印,這里是利用客戶端的word進行列印。
第一種幾乎不用編寫程序,最簡單快捷,這里會遇到幾個問題,只能列印表單內容,按鈕不希望列印出來;頁眉頁腳不想列印出來;IE的titile不想列印出來。
解決辦法:把button放在一個table或者div里,列印的時候隱藏,完成後顯示就可以。系統中的javascript列印代碼如下:
function Print() {
var tit = document.title;
document.title = "";
table1.style.display = "none";
window.print();
document.title = tit;
table1.style.display = "";
}
不過只能起到列印的目的,列印的效果一般比較土。不管怎麼說,可以最快的讓系統的大部分模塊都有列印的功能。
第二種方式必須根據每個報表的格式進行定製html和java程序開發,會花比較多的時間。要注意的是對html中table的樣式控制,在IE中瀏覽看起來很細的邊框,列印出來有些線條會比較粗,有些線條又會比較細,陰陽怪氣的很難看。
在table中直接用bordercolor會讓線條顯得很粗,用bordercolorlight,bordercolordark配合使用可以顯示出秀氣的線條。
<html>
<head></head>
<body>
<table border="1" bordercolorlight="red" bordercolordark="#FFFFFF" cellpadding="3" cellspacing="0">
<tbody>
<tr>
<td>姓名</td>
<td>所屬部門</td>
</tr>
<tr>
<td>陳</td>
<td>技術部</td>
</tr>
</tbody>
</table>
</body>
</html>
比如以上代碼,在IE中看起來線條一樣大小,還是比較秀氣。不要高興的太早,列印出來的效果不象在IE中看到的那樣,邊框雖細,內線卻很粗!原因是每個td都有邊框,td與td的交接處就會有線條重疊,雖然IE看起來沒有,可是列印的時候就會顯示出來。
這個問題的解決辦法是控制每一個td的樣式,對重疊的地方進行border-bottom:1px之類的控制。
這個方案比較消耗精力,而且列印的時候很難控制分頁,更不能隨時按照客戶的需要調整字體邊框顏色等。
第三種方案:從伺服器端生成word、excel等文檔,發送到瀏覽器進行列印
實現過程:先將需要列印的數據導入到word或者excel中,再利用word或者excel的列印功能來實現web列印。
下面以excel為例實現如何列印的過程
將網頁中數據導入excel中的方法有很多,這里先介紹一種,利用ActiveX控制項的方式,即 Excel.Application, 這個控制項是MS為excel提供的編程介面,在很多種編程語言種都可以通過該介面來操縱excel表格。
下面用javascript腳本來實現一個簡單的例子。
<script language = "javascript">
function ExcelPrint() {
var excelApp; //存放Excel對象
var excelBook; //存放Excel工件簿文件
var excelSheet; //存放Excel活動工作表
try {
excelApp = new ActiveXObject("Excel. Application"); //創建Excel對象}
catch(e) {
alert("請啟用ActiveX控制項設置!");
return;
}
excelBook = excelApp.Workbooks.Add(); //創建Excel工作簿文件
excelSheet = excelBook.ActiveSheet; //激活Excel工作表
var rowLen = printTable.rows.length; //table對象的行數
for (var i = 0; i < rowLen; i++) {
var colLen = printTable.rows(i).cells.length; //table對象的列數
for (var j = 0; j < colLen; j++) //為Excel表的單元格賦值
excelSheet.Cells(i + 1, j + 1).value = printTable.rows(i).cells(j).innerText;
} //將表格中的每個單元格的innerText導入到excel的單元格中
excelApp.Visible = true; //設置Excel對象可見
excelSheet.PrintOut(); //列印工作表
excelBook.Close(true); //關閉文檔
excelApp.Quit(); //結束excel對象
excelApp = null; //釋放excel對象
}
}
</script>
注意:
運行該程序的前提是 IE要允許對沒有標記為安全的Activex控制項進行初始化和腳本運行。設置方法如下:
打開控制面板→Internet選項→安全性→自定義級別→對沒有標記為安全的ActiveX控制項進行初始化和腳本運行→選中啟用,這樣我們的程序就可以運行了。如果沒有啟用該ActiveX控制項設置,那麼程序在執行創建Excel對象時會拋出一個異常,這時可以通過catch()語句來捕獲這個異常,並且做出相應的處理。
運行該程序必須客戶端安裝了MS EXCEL,否則Activex驅動不了。
Ⅶ 哪位用Apache的xml-security-1
這個多了去了 ,apache 絕對是 開源裡面的領頭羊
for example:
分類 項目名 說明 開發語言
伺服器
(共20) Apache HTTP Server 全球第一HTTP伺服器 C/C++
Tomcat Java的Web伺服器 Java
James 郵件伺服器 Java
SpamAssassin 反垃圾郵件 C/C++
Perl Apache的Perl編程語言支持 C/C++
Tcl TCL腳本語言 C/C++
Directory Server 超級目錄伺服器 Java
Axis WebServic伺服器 Java
Kanla Axis中WS-Coordination、WS-AtomicTransaction、WS-BusinessActivity協議的實現 Java
Muse Axis中WS-ResourceFramework (WSRF), WS-BaseNotification (WSN), and WS-DistributedManagement (WSDM) 標準的實現(該項目Logo是個不認識的古漢字) Java
Pubscribe Web Services Notification (WSN) 標准實現 Java
Sandesha WS-ReliableMessaging 標准實現 Java
WSS4J WS-Security 標准實現 Java
WSRF Web Services Resource Framework 標准實現 Java
Addressing WebService的WS-Addressing標准(IBM、微軟、BEA發布)實現 Java
XML Security XML簽名與加密標準的Java、C++實現 Java/C++
jUDDI UDDI的Java實現 Java
XML-RPC XML-RPC實現 Java
Derby 純Java做的關系資料庫 Java
Xindice XML資料庫 Java
開發工具(共5) Ant 自動編譯 Java
Maven 項目管理工具,比Ant強大,支持插件開發 Java
Gump 每日集成工具,支持Ant、Maven Python
JMeter Web應用性能測試 Java
DdlUtils 用XML來定義DDL Java
Web開發框架(共19) Struts MVC的Web開發框架 Java
Cocoon Web開發框架,基於可運行的XML管道語言 Java
FOP XSL-FO 列印與輸出解決方案,基於Java Java
AxKit 基於XML的Web發布 Java
Tapestry Web開瞎游賀姿發框架 Java
Turbine Web開發框架 Java
Shale 基於JSF的Web開發框架 Java
MyFaces 第一個開源的JSF實現 Java
Beehive 基於Structs的J2EE框架,簡化J2EE編程;含Web界面、WebService開發框架 Java
Velocity 模板引擎 Java
Portals 門戶解決方案 Java
Cactus Web開發測試框架 Java
Forrest 基於Cocoon的Web發布解決方案 Java
Slide 內容管理,支持WebDAV Java
Jackrabbit 內容庫,用於內容管理 Java
Lenya 內容管理,支持版本管理、工作流、所見所得編輯器 Java
Xang 基於JavaScript進行動態Web開發 Java
Xindice 純XML資料庫 Java
JCS 分布式Cache系統(Java Caching System) Java
容器(共7) Geronimo J2EE容器,類似JBoss Java
iBATIS 簡單OR映射,有.NET版本 Java/C#
Torque OR映射 Java
ORB ObjectRelationalBridge,OR映射 Java
JDO JDO標準的一個實現 Java
HiveMind 類似Spring的東西,微內核DI容器 Java
Excalibur IoC容器磨拍銷 Java
組件(共82) APR 不同操作系統間可移植運行時庫 C/C++
Regexp Java正則表達式 Java
ORO Perl風格的正則表達式 Java
Xerces XML解析,Java/C兩種版本 Java/C++
Crimson XML解析器 Java
AXIOM 更高效的DOM實現 Java
Lucene 全文檢索,有.NET版本 Java/C#
Logging 不僅Log4j,各個語言的版本都有了 Java/C++/Perl/C#
XMLBeans XML轉對象 Java
JaxMe Java/XML綁定的實現 Java
Taglibs JSP Tag庫 Java
HttpComponents HTTP訪問控制項 Java
ECS 輔助生成標簽(Element Construction Set) Java
WSIF WebService調用(Web Services Invocation Framework) Java
SOAP SOAP標准實現 Java
Woden WSDL書寫工具 Java
Tuscany 簡化SOA開發 Java
MIRAE 讓手機支持基於XML的服務 Java
BSF 腳本語言框架(Bean Scripting Framework),支持JavaScript等多種腳本語言 Java
BCEL 用於直接生成位元組碼(Byte Code Engineering Library) Java
POI 存取Office文檔 Java
Batik JAVA的SVG實現 Java
Attributes 訪問Java 1.5語言中定義的meta 這些項目都在jakarta commons中,都是Java的
BeanUtils 反射支持
Betwixt XML/JavaBean轉換
Chain 職責鏈模式實現
CLI 命令行參數解析
Codec 通用加密/加密演算法
Collections Java容器類完善擴充
Configuration 各種來源配置文件存取
Daemon Java模擬Unix的Daemon
DBCP 數據鏈連接池
DbUtils JDBC輔助類
Digester XML到Java對象映射工具
Discovery 根據名稱來查找資源
EL JSP 2.0 表達式標准實現
Email 發送Email類
FileUpload 文件上傳輔助類
HttpClient HTTP客戶端
IO IO操作輔助類
Jelly 基於XML的腳本引擎
Jexl JSTL 表達式語言擴展
JXPath 用XPath語言來操作對象的輔助類
Lang java.lang.類擴充
Launcher 跨平台Java應用啟動器
Logging 不同Log實現的封裝
Math 數學、統計輔助類
Modeler 創建兼容JMX標準的MBeans
Net 各種網路協議實現
Pool 對象池
Primitives 很小的Java原始對象類型操作輔助類
SCXML 狀態圖XML標准實現
Transaction 多層次容器、文件操作事務支持
Validator 用XML定義校驗器和校驗規則
VFS 虛擬文件系統用於操作FTP、SMB、Zip等
Compress tar、zip、bzip2壓縮格式文件操作 這些項目都在jakarta commons中的Sandbox中
CSV CSV文件格式支持
Exec 外部進程執行和環境設置輔助類
Finder 模擬Unix find命令
I18n 國際化輔助類
Id 生成ID輔助類
Javaflow 應用狀態管理
JCI Java編譯器介面
OpenPGP OpenPGP封裝
Pipeline 管道輔助類用於並行或者順序操作數據
Proxy 動態代碼生成輔助類
Cache 對象緩存服務 這些項目都在jakarta commons中的Dormant(睡眠)中
Clazz class操作和反射操作
Contract 契約編程用到Java中
Convert Java對象類西轉換輔助類
Events 事件管理容器
Feedparser RSS和Atom實現
Functor 用對象方式來操作函數
JJar Jar操作
Latka HTTP功能測試
Mapper 簡單封裝後可以選擇不同的對象映射實現
Messenger JMS用於Web開發中的輔助類
Resources 國際化資源信息查找
Scaffold Web應用開發工具
ThreadPool 線程池
Workflow 工作流管理系統框架
XMLIO XML配置快速簡便導入