手機(jī)詞典開發(fā)問題收集_第1頁
手機(jī)詞典開發(fā)問題收集_第2頁
手機(jī)詞典開發(fā)問題收集_第3頁
手機(jī)詞典開發(fā)問題收集_第4頁
手機(jī)詞典開發(fā)問題收集_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、手機(jī)詞典開發(fā)問題收集環(huán)境的配置:1創(chuàng)建一個(gè)Android項(xiàng)目:2ZJDICPRO:項(xiàng)目名稱5界面設(shè)計(jì)問題7數(shù)據(jù)庫操作13線程問題:15手機(jī)的唯一標(biāo)識(shí)碼的問題:16TabHost 布局問題。18如何實(shí)現(xiàn)listView中批量刪除功能?20環(huán)境的配置:所需軟件:jdk(1.6)、SDK(16)、eclipse(3.8)安裝步驟:a、安裝jdk 搭建一個(gè)java開發(fā)的環(huán)境(安裝過程省略,一直下一步就好)。b、安裝SDK(安裝時(shí)注意SDK的版本):c、安裝eclipse。d、將SDK和eclipse集成:打開eclipseHelpInstall New SoftWare:點(diǎn)擊Add 按鈕 可以添加ec

2、lipse插件(ADT16:這里的ADT插件版本一定要和SDK的版本一致;ADT在安裝時(shí)會(huì)自動(dòng)找到SDK,不需要手動(dòng)關(guān)聯(lián)。)。創(chuàng)建一個(gè)Android項(xiàng)目:A、創(chuàng)建項(xiàng)目填寫項(xiàng)目名稱:選擇android的版本:(因?yàn)楹芏嗍謾C(jī)的android系統(tǒng)是不一樣的)選擇包名和 項(xiàng)目的第一個(gè)Acticity一下是創(chuàng)建好的項(xiàng)目:ZJDICPRO:項(xiàng)目名稱Src文件夾:里面放的是java源文件Gen文件夾:是開發(fā)工具自動(dòng)生成的文件(主要是R.java)Android2.1:是android版本中所包含的jar包Assets:里面可以放一些資源文件(這里的文件是不被記錄在R.java中的)Bin文件夾:里面方的是項(xiàng)

3、目生成的安裝文件Res文件夾:里面放的是一些資源文件Drawable-*:里面方的是一些圖片,這里有三個(gè)文件夾,各自代表的是不同的分辨率Layout:里面發(fā)的是布局文件,主要是界面布局的設(shè)計(jì)文件(*.xml)Values:里面放的是一些開發(fā)中需要的資源數(shù)據(jù)(比如:主題、樣式、字符串)AndroidManifest:.xml:是項(xiàng)目的配置文件(權(quán)限設(shè)置、activity注冊、service注冊、總體樣式設(shè)置等)B、Activity介紹:1、 開發(fā)中 用到的權(quán)限,要訪問手機(jī)上的某個(gè)功能,如果不申請(qǐng)權(quán)限是無法訪問的,權(quán)限申請(qǐng)如下:<!- 申明使用wifi -> <uses-feat

4、ure android:name="android.hardware.wifi" /> <!- 允許訪問網(wǎng)絡(luò)權(quán)限 -> <uses-permission android:name="android.permission.INTERNET" /> <!- 允許獲得網(wǎng)絡(luò)連接信息權(quán)限 -> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!- 允許連接wifi權(quán)限 -> &

5、lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!- 允許讀取手機(jī)藍(lán)牙權(quán)限 -> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!- 允許讀取手機(jī)藍(lán)牙權(quán)限 -> <uses-permission android:name="android.permission.BLUETOOTH" />

6、; <!- 在SDCard中創(chuàng)建與刪除文件權(quán)限 -> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!- 往SDCard寫入數(shù)據(jù)權(quán)限 -><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />界面設(shè)計(jì)問題A、 如何界面行添加滾動(dòng)條?解決方案:將需要出現(xiàn)滾動(dòng)條的部分放到 ScrollView 這個(gè)空

7、間下,而這個(gè)空間下的第一個(gè)子節(jié)點(diǎn)一定要是:LinearLayout 所以最終的代碼如下:<ScrollView android:id="+id/settingScrollView" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:id="+id/levelTwo" android:layout_width="fill_parent" a

8、ndroid:layout_height="fill_parent" android:orientation="vertical">這里放顯示內(nèi)容</ LinearLayout></ScrollView>B、 ListView的設(shè)置一般情況ListView的樣式只是簡單的列表如圖:ListView lv = (ListView)findViewById(R.id.wordListView);ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple

9、_list_item_1,list);lv.setAdapter(adapter);這里的android.R.layout.simple_list_item_1所在位置:%SDK_HOME%platformsandroid-7datareslayout如果想要每個(gè)item中的內(nèi)容豐富,自己重寫 BaseAdapter 代碼參考com.fugle.self.MyAdapter 如何調(diào)用:MyAdapter adapter = new MyAdapter(ZJDIC_HistroyListActivity.this,HistroyDAO.getDataHis(ZJDIC_HistroyListAc

10、tivity.this,order);lv.setAdapter(adapter);注意:如果發(fā)現(xiàn)在上下翻滾listView的時(shí)候發(fā)現(xiàn)背景色變了,這時(shí)需要設(shè)置一個(gè)屬性:android:cacheColorHint="#FFFFFF" 設(shè)置成和背景色一致就可以解決C、 類似右擊菜單實(shí)現(xiàn)(長按彈出菜單):第一步:創(chuàng)建菜單:Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) /設(shè)置右鍵彈出菜單menu.setHeaderIcon(R.drawable.

11、start_bg);if(v = lv)/判斷是哪一個(gè)上面的菜單menu.add(0,1,0,"加入單詞本");/哪一組、編號(hào)、排序號(hào)、顯示字符串menu.add(0,2,0,"刪除單詞"); super.onCreateContextMenu(menu, v, menuInfo);第二步:注冊菜單:ListView lv = (ListView)findViewById(R.id.histroyListView);this.registerForContextMenu(lv);/為控件注冊右鍵菜單第三步:如何處理菜單事件:Overridepublic

12、boolean onContextItemSelected(MenuItem item) /處理右鍵菜單事件switch(item.getItemId()case 1:tryWordBookDAO.addWordBook(this, Long.parseLong(wordId);Toast.makeText(this, "添加成功", 1000).show();catch(Exception e)Toast.makeText(this, "添加失敗", 1000).show();break;case 2:tryHistroyDAO.delHistroy(

13、this, Long.parseLong(delId);Toast.makeText(this, "刪除成功", 1000).show();searchHistroy(2);catch(Exception e)Toast.makeText(this, "刪除失敗", 1000).show();break;return super.onContextItemSelected(item);D、 如何實(shí)現(xiàn)手機(jī)按鍵上的MENU功能:第一步:創(chuàng)建MENUOverridepublic boolean onCreateOptionsMenu(Menu menu) me

14、nu.add(0, 1, 1, "按字母排序");/哪一組、編號(hào)、排序號(hào)、顯示字符串return super.onCreateOptionsMenu(menu);第二步:實(shí)現(xiàn)MENU各功能鍵:Overridepublic boolean onOptionsItemSelected(MenuItem item) if(item.getItemId() = 1)if(item.getTitle().equals("按字母排序") MenuState = "按字母排序" searchHistroy(1);item.setTitle(&quo

15、t;按時(shí)間排序");else MenuState = "按時(shí)間排序" searchHistroy(1);item.setTitle("按字母排序");return super.onOptionsItemSelected(item);E、 如何實(shí)現(xiàn)TAB界面 TabHost 一般界面上不要做什么操作,用代碼控制比較靈活/創(chuàng)建點(diǎn)擊TAB時(shí)需要跳轉(zhuǎn)的兩個(gè)IntentIntent intentBook = new Intent().setClass(this, ZJDIC_WordbookListActivity.class);Intent inten

16、tHistroy = new Intent().setClass(this, ZJDIC_HistroyListActivity.class);TabHost tabHost = getTabHost(); /得到TABResources res = getResources(); /得到資源數(shù)據(jù)TabHost.TabSpec spec = tabHost.newTabSpec("book").setIndicator("生詞本",res.getDrawable(R.drawable.ic_tab_book).setContent(intentBook)

17、;tabHost.addTab(spec);/將item加入到TAB中spec = tabHost.newTabSpec("histroy").setIndicator("歷史記錄",res.getDrawable(R.drawable.ic_tab_histroy).setContent(intentHistroy);tabHost.addTab(spec); /將item加入到TAB中tabHost.setCurrentTab(2); /設(shè)置TAB一個(gè)有幾個(gè)功能鍵TAB的功能按鈕 是可以自己重寫的,自帶的樣式文件在%SDK_HOME%platform

18、sandroid-7datareslayout下(比如默認(rèn)樣式:tab_indicator.xml)F、 觸摸屏滑動(dòng)如何實(shí)現(xiàn)(Gallery):第一步:布局文件創(chuàng)建一個(gè)Gallery/布局<Galleryandroid:id="+id/gallery" android:layout_width="fill_parent" android:layout_height="350dp" android:layout_marginTop="16dip" android:layout_marginBottom=&quo

19、t;16dip" />/ActivityGallery gallery = (Gallery) findViewById(R.id.gallery);gallery.setAdapter(new ImageAdapter(this);用系統(tǒng)自帶的在滑動(dòng)的時(shí)候太過于靈敏,不太好控制。所以需要自己重寫一下這個(gè)組件,代碼如下:/布局<com.fugle.myView.MyGallery android:id="+id/gallery" android:layout_width="fill_parent" android:layout_he

20、ight="350dp" android:layout_marginTop="16dip" android:layout_marginBottom="16dip" />/重寫的組件public class MyGallery extends Gallery /構(gòu)造方法public MyGallery(Context context, AttributeSet attrs) super(context, attrs); /向左滑動(dòng)事件private boolean isScrollingLeft(MotionEvent e1, M

21、otionEvent e2) return e2.getX() > e1.getX(); /滑動(dòng)過程中的判斷Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) int keyCode;if (isScrollingLeft(e1, e2) keyCode = KeyEvent.KEYCODE_DPAD_LEFT; else keyCode = KeyEvent.KEYCODE_DPAD_RIGHT;onKeyDown(keyCode, null);

22、return true;G、 語音功能如何實(shí)現(xiàn)(google自帶語音功能):第一步:實(shí)現(xiàn)與google語音服務(wù)器鏈接:/通過Intent傳遞語音識(shí)別的模式,開啟語音Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);/ 語言模式和自由模式的語音識(shí)別intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);intent.putExtra(RecognizerIntent.EXT

23、RA_PROMPT, "開始語音");/提示語音開始intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,SpeechDAO.getSpeachLanguage(activity);第二步:接收返回值/添加返回監(jiān)聽事件activity.startActivityForResult(intent,CommentConst.VOICE_RECOGNITION_REQUEST_CODE);/處理返回?cái)?shù)據(jù)/在Activity中有一個(gè) onActivityResult 方法,可以接收返回?cái)?shù)據(jù)Overrideprotected void onA

24、ctivityResult(int requestCode, int resultCode, Intent data);/ requestCode 請(qǐng)求CODE = CommentConst.VOICE_RECOGNITION_REQUEST_CODE/ resultCode 返回結(jié)果CODE 比如:RESULT_OK/ data 返回的數(shù)據(jù)/ 讀取data中的數(shù)據(jù):ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);String resultString

25、= new Stringresults.size();for(int i=0;i<results.size();i+)resultStringi = results.get(i).toString();注意:這個(gè)功能是依賴于google的一個(gè)語音搜索軟件的,但是由于手機(jī)在刷機(jī)的時(shí)候有可能會(huì)把這個(gè)軟件給丟掉,所以務(wù)必需要先驗(yàn)證是否存在這個(gè)軟件。如何實(shí)現(xiàn)單詞閱讀(google自帶的tts): /實(shí)例化mTextToSpeech = new TextToSpeech(this,new TextToSpeech.OnInitListener() Overridepublic void onIni

26、t(int status) if (status = TextToSpeech.SUCCESS) / 設(shè)置朗讀語言int supported = mTextToSpeech.setLanguage(Locale.US);if (supported != TextToSpeech.LANG_AVAILABLE) && (supported != TextToSpeech.LANG_COUNTRY_AVAILABLE) /找不到匹配語言);/開始閱讀int r = mTextToSpeech.speak(“Englist”,TextToSpeech.QUEUE_FLUSH, nul

27、l);/r=0 時(shí) 閱讀成功注意:這個(gè)閱讀功能也是需要依賴于手機(jī)上的語言庫的,如果沒有語言庫就找不到語言匹配,無法閱讀2、 SD卡的操作(得到SD卡:boolean sdCardExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); / 判斷sd卡是否存在sdDir = Environment.getExternalStorageDirectory();/ 獲取跟目錄sdDir.toString();注意:android系統(tǒng)是基于linux系統(tǒng)的注意路徑的正反斜杠問題)A、 如何將軟件中的

28、文件拷貝到SD卡中一般軟件中保存文件有兩種:第一種:放在assest中:讀?。篈ssest:InputStream is = getResources().getAssets().open("zjdic.rar");Raw:InputStream is = getResources().openRawResource(R.id.filename);  注意:android2.1版本 在拷貝文件是不能操作1.5M左右數(shù)據(jù)庫操作Android的數(shù)據(jù)庫文件在創(chuàng)建的時(shí)候 默認(rèn)是放在內(nèi)存中的在 /data/data/com.fugle.phone/database/*.db

29、中,創(chuàng)建數(shù)據(jù)庫代碼如下:public class MyDatabaseHelper extends SQLiteOpenHelper / 繼承SQLiteOpenHelper類private static final String DATABASENAME = CommentMethod.getSDPath() + "/zjdic/data/zjdic.db" ;/ 數(shù)據(jù)庫名稱/private static final String DATABASENAME = "zjdic.db" ;/ 數(shù)據(jù)庫名稱private static final int DA

30、TABASEVERSION = 1 ;/ 數(shù)據(jù)庫版本private static final String TABLEWORD = "WORD" ;/ 數(shù)據(jù)表名稱private static final String TABLEHISTROY = "HISTORYWORD" ;/ 數(shù)據(jù)表名稱private static final String TABLEWORDBOOK = "WORDBOOK" ;/ 數(shù)據(jù)表名稱private static final String TABLESETTING = "SOFTSET"

31、; ;/ 數(shù)據(jù)表名稱public MyDatabaseHelper(Context context) / 定義構(gòu)造super(context, DATABASENAME, null, DATABASEVERSION);/ 調(diào)用父類構(gòu)造Overridepublic void onCreate(SQLiteDatabase db) / 創(chuàng)建數(shù)據(jù)表Log.i(CommentConst.tagName, "running create table");db.execSQL("CREATE TABLE if not exists " + TABLEWORD + &

32、quot; (" + "IDlongPRIMARY KEY ," + "industryNameVARCHAR(1000)NOT NULL ," + "industryRemarkVARCHAR(4000)NOT NULL ," + "CnameVARCHAR(1000)NOT NULL ," +"CnameSimpleVARCHAR(1000)NOT NULL ," +"EnameVARCHAR(1000)NOT NULL ," +"EnameABVAR

33、CHAR(1000)NOT NULL ," +"EnamesVARCHAR(1000)NOT NULL ," +"EwordDescVARCHAR(1000)NOT NULL ," +"EwordCheVARCHAR(1000)NOT NULL ," +"EwordLaVARCHAR(1000)NOT NULL ," +"EwordGenVARCHAR(1000)NOT NULL ," +"WordFromVARCHAR(1000)NOT NULL ," +&quo

34、t;createTimedateNOT NULL )") ;db.execSQL("CREATE TABLE if not exists " + TABLEHISTROY + " (" + "IDlong PRIMARY KEY ," + "wordKeylong NOT NULL," + "createTimedateNOT NULL )") ;db.execSQL("CREATE TABLE if not exists " + TABLEWORDBOOK + &

35、quot; (" + "IDlong PRIMARY KEY ," + "wordKeylong NOT NULL," + "createTimedateNOT NULL )") ;db.execSQL("CREATE TABLE if not exists " + TABLESETTING + " (" + "IDlong PRIMARY KEY ," + "WIFIint NOT NULL," +"MOBILEint NOT NUL

36、L," +"SPEECH int NOT NULL )") ;db.execSQL("insert into "+TABLESETTING+" values(1,0,0,0)");Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) String sql = "DROP TABLE IF EXISTS " + TABLEWORD ;/ SQL語句db.execSQL(sql);/ 執(zhí)行SQL語句sq

37、l = "DROP TABLE IF EXISTS " + TABLEHISTROY ;db.execSQL(sql);sql = "DROP TABLE IF EXISTS " + TABLEWORDBOOK ;db.execSQL(sql);sql = "DROP TABLE IF EXISTS " + TABLESETTING ;db.execSQL(sql);this.onCreate(db); / 創(chuàng)建表這里在使用這個(gè)類時(shí)回去檢測是否有數(shù)據(jù)庫,如果沒有有則執(zhí)行Oncreate中的數(shù)據(jù)庫創(chuàng)建,如果有則跳過。但是如果我要更新數(shù)據(jù)

38、庫怎么辦:private static final int DATABASEVERSION = 1 ;/ 數(shù)據(jù)庫版本 這里是默認(rèn)的版本而當(dāng)你的版本比之前的版本高,他就會(huì)去執(zhí)行這里的onUpgrade方法,這樣就可以在這個(gè)方法中實(shí)現(xiàn)數(shù)據(jù)庫的更新了。注意:如果我要把數(shù)據(jù)庫文件放到SD卡中訪問 操作的話,繼承SQLiteOpenHelper 實(shí)現(xiàn)數(shù)據(jù)庫操作就會(huì)出錯(cuò),英文這個(gè)類默認(rèn)是沒有路徑的,而SD卡中是通過路勁找到數(shù)據(jù)庫文件的,所以我們需要重新一下SQLiteOpenHelper 為 SDSQLiteOpenHelper:參考代碼:com.fugle.self. SDSQLiteOpenHelpe

39、r線程問題:Android這種開發(fā) 會(huì)用到很多的線程,而在線程中不會(huì)避免會(huì)實(shí)現(xiàn)操作界面的實(shí)現(xiàn),但是如果你只是簡單的直接在線程中實(shí)現(xiàn)界面的操作,這時(shí)候會(huì)報(bào)錯(cuò):Can't create handler inside thread that has not called Looper.prepare() /這是由于線程不支持直接對(duì)UI操作解決方案:用Handler 實(shí)現(xiàn):簡單例子:private Handler handler = new Handler() Overridepublic void handleMessage(Message msg) / 定義一個(gè)Handler,用于處理下載

40、線程與UI間通訊if (!Thread.currentThread().isInterrupted() switch (msg.what) case 0:/操作UIbreak;case -1:/errorbreak;super.handleMessage(msg);private void sendMsg(int flag) Message msg = new Message();msg.what = flag;handler.sendMessage(msg);/線程中的實(shí)現(xiàn):Thread t = new Thread() public void run() sendMsg(0);手機(jī)的唯一標(biāo)

41、識(shí)碼的問題:由于手機(jī)中沒有一個(gè)明確的唯一標(biāo)識(shí)碼,所以打算從多個(gè)方面綜合成一個(gè)獨(dú)立的codepublic static String getUniqueCode(Context context) / 得到WIFI MAC地址String uniqueCode = ""WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);String szMac = ""if (wifi != null) WifiInfo info = wifi.getConnecti

42、onInfo();szMac = info.getMacAddress();/ 得到手機(jī)IMEISuppressWarnings("static-access")TelephonyManager TelephonyMgr = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);String szImei = ""if (TelephonyMgr != null) szImei = TelephonyMgr.getDeviceId();/ 得到手機(jī)個(gè)硬件參數(shù)Strin

43、g m_szDevIDShort = ""try m_szDevIDShort = "35"+ / we make this look like a valid IMEIBuild.BOARD.length() % 10 + Build.BRAND.length() % 10+ Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10+ Build.DISPLAY.length() % 10 + Build.HOST.length() % 10+ Build.ID.length() % 10 + B

44、uild.MANUFACTURER.length() % 10+ Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10+ Build.TAGS.length() % 10 + Build.TYPE.length() % 10+ Build.USER.length() % 10;/ 13 digits catch (Exception e) / 得打android IDString m_szAndroidID = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID

45、);m_szAndroidID = (m_szAndroidID = null) ? "" : m_szAndroidID;/ 得到藍(lán)牙MACBluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();String m_szBTMAC = ""if (m_BluetoothAdapter != null) m_szBTMAC = m_BluetoothAdapter.getAddress();String m_szLongID = szImei + m_szDevI

46、DShort + m_szAndroidID + szMac+ m_szBTMAC;/ compute md5MessageDigest m = null;try m = MessageDigest.getInstance("MD5"); catch (NoSuchAlgorithmException e) e.printStackTrace();m.update(m_szLongID.getBytes(), 0, m_szLongID.length();byte p_md5Data = m.digest();for (int i = 0; i < p_md5Data

47、.length; i+) int b = (0xFF & p_md5Datai);if (b <= 0xF)uniqueCode += "0"/ add number to stringuniqueCode += Integer.toHexString(b);uniqueCode = uniqueCode.toUpperCase();return uniqueCode.substring(0, 12);3、 如何判斷手機(jī)是否可以上網(wǎng):(手機(jī)一般有兩種上網(wǎng)情況:1、2G/3G 2、wifi)這里的判斷一般在下載大文件的時(shí)候需要判斷,因?yàn)橛捎诹髁肯牡膯栴},一般的

48、2G/3G都是比較小的public static int isWiFiActive(Context context) int state = -1;ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);if (connectivity != null) NetworkInfo mobile = connectivity.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); / 手機(jī)自

49、帶上網(wǎng)NetworkInfo wifi = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI); / wifi上網(wǎng)/ 判斷wifi是否連接if (wifi.getState().toString().equals("CONNECTED") / wifi連接state = 1;if (!wifi.getState().toString().equals("CONNECTED") / wifi未連接if (mobile.getState().toString().equals("CO

50、NNECTED") / mobile連接state = 2;if (!mobile.getState().toString().equals("CONNECTED") / mobile斷開state = 3;return state;TabHost 布局問題。A、 tab部分布局:/*-添加tab-*/Intent intentBook = new Intent().setClass(this, ZJDIC_WordbookListActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);Intent int

51、entHistroy = new Intent().setClass(this, ZJDIC_HistroyListActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);TabHost tabHost = getTabHost();TabHost.TabSpec spec = tabHost.newTabSpec("book").setIndicator("生詞本").setContent(intentBook);tabHost.addTab(spec);spec = tabHost.newTa

52、bSpec("histroy").setIndicator("歷史記錄").setContent(intentHistroy);tabHost.addTab(spec);tabHost.setCurrentTab(2);/*-美化tab-*/默認(rèn)的樣式是有一個(gè)TextView和一個(gè)ImageView,而這兩個(gè)是RelativeLayout布局的,相互錯(cuò)位的,不是很好看,用代碼處理布局如下:TabWidget tabWidget = tabHost.getTabWidget();for (int i = 0; i < tabWidget.getChi

53、ldCount(); i+) /修改寬和高tabWidget.getChildAt(i).getLayoutParams().height = 55; tabWidget.getChildAt(i).getLayoutParams().width = 65; TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title);tv.setTextSize(15); tv.setTextColor(ZJDIC_WordBookActivity.this.getResources().getColorS

54、tateList(android.R.color.black);/改變頭部的背景色Object v = tabWidget.getChildAt(i); if (v instanceof RelativeLayout) RelativeLayout vvv = (RelativeLayout) v;if (tabHost.getCurrentTab() = i) vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.dic_btnbgsel2x); else vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.dic_btnbgbefore2x); 以上修改還是有問題,在選中的tab下方會(huì)出現(xiàn)一個(gè)橫線,具體顏色跟各自手機(jī)主題有關(guān)。去除辦法如下:/如果是2.2,2.3版本開發(fā),可以使用一下方法tabWidget.setStripEnabled(false) /tabWidget.setStripEnabled(false); /但是很可能你開發(fā)的android應(yīng)用是2.1版本, /tabWidget.setStri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論