Android小技巧
總結(jié)一些平時項目小技巧:
1、context.getResources().getDisplayMetrics()報空指針異常
Resources res; if (context == null)res = Resources.getSystem(); elseres = context.getResources(); DisplayMetrics dm = res.getDisplayMetrics();2、關(guān)于ScrollView:
(1)設置顯示置頂
? ? ? ??布局中添加ScrollView以后當ScrollView中的控件太多時,頁面會顯示到ScrollView的最低端。想要從頂端開始顯示,則要在ScrollView上面一個控件設置
android:focusableInTouchMode="true"?
(2)ScrollView設置視圖的滾動位置
? ? 很多人在設置scrollTo方法時候發(fā)現(xiàn)都無效
? ? mScrollView.scrollTo(offsetx,offsety);? ? ? ??在onCreate和onResume 里調(diào)用的這個方法,在方法沒有結(jié)束的時候,activity的數(shù)據(jù)并沒有完全加載好,所以這個時候調(diào)用該方法不會有什么實際的效果的。解決方法:
mScrollView.post(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubmScrollView.scrollTo(offsetx, offsety);}});
3、listView設置點擊無背景顏色:
android:listSelector="@android:color/transparent"4、一些關(guān)于SeekBar的問題:
(1)下面這句是設置Thumb在兩端的時候,可以完全顯示。
android:thumbOffset="0dp"? ? ? ??不設置效果圖:
? ? ? ??
? ? ? ??設置后效果圖:
? ? ? ??
(2)下面這兩句是設置Seekbar的高度(progressBar同理) android:maxHeight="10dp" android:minHeight="10dp"
? ? ? ??不添加這兩句效果圖:
? ? ? ??
? ? ? ??增加后效果圖:
? ? ? ??
(3) SeekBar設置不可點擊、滑動
? ? ? ??自定義類extends SeekBar,重寫onTouchEvent() return FALSE 即可:
/*** onTouchEvent 是在 SeekBar 繼承的抽象類 AbsSeekBar*/@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stub// 原來是要將TouchEvent傳遞下去的,我們不讓它傳遞下去就行了// return super.onTouchEvent(event);return false;}5、EditText輸入為密碼的時候,顯示密碼明文或者“···”
// 顯示密碼明文 mEtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); // 隱藏密碼明文 mEtPassword.setInputType(InputType.TYPE_CLASS_TEXT| InputType.TYPE_TEXT_VARIATION_PASSWORD);6、Android用xml畫虛線
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <!--顯示一條虛線,破折線的寬度為dashWith,破折線之間的空隙的寬度為dashGap,當dashGap=0dp時,為實線 --> <stroke android:dashGap="3dp" android:dashWidth="3dp" android:color="@color/black_light_10" /> <!-- 虛線的高度 --> <size android:height="1dp" /> </shape>? ? ? ??很多人會發(fā)現(xiàn)運行后顯示還是為實線。
解決方法:
? ? ? ??關(guān)閉硬件加速:1、在AndroidManifest.xml的Application標簽中加入android:hardwareAccelerated="false"。這種方法會令整個app顯得卡頓(不推薦)。
? ?? ? ? ??? ? ? ??? ? ? ??? ? ? ? ?2、在使用的地方如View標簽中加上?android:layerType="software" ,即可對單獨的View標簽進行關(guān)閉。
6.1下滑線:
textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);7、為listView顯示設置縮放動畫
LayoutAnimationController lac; ScaleAnimation sa;sa = new ScaleAnimation(0, 1, 0, 1); sa.setDuration(1000); lac = new LayoutAnimationController(sa, 0.5f);mLvBets.setLayoutAnimation(lac);8、自定義Toast
View view = LayoutInflater.from(this).inflate(R.layout.custom_toast,null); TextView tvToastCcontent = (TextView) view.findViewById(R.id.tv_toast_content);tvToastCcontent.setText(content);Toast toast = new Toast(this);toast.setView(view);toast.setDuration(Toast.LENGTH_SHORT);toast.setGravity(Gravity.CENTER, 0, 0);toast.show();
9、刪除sharedPreference文件
/** File中儲存數(shù)據(jù)的路徑 **/public final String DATA_URL = "/data/data/";/** sharedPreferences文件名稱 **/public final String LAST_SHARED_PREF = "HAS_PERFORM_PROLOGUE.xml"; <span style="white-space:pre"> </span>File file = new File(DATA_URL + getPackageName().toString()+ "/shared_prefs", LAST_SHARED_PREF);if (file.exists()){file.delete();}10、布局文件多個控件使用相同的屬性
? ? ? ??定義一個style,避免重復輸入相同的屬性。
? ? ? ??普通布局文件中的控件:
<RadioButtonandroid:id="@+id/rb_function"style="@style/main_tab_bottom"android:drawableTop="@drawable/icon_function"android:text="@string/tab_function" />styles.xml文件
<style name="main_tab_bottom"><item name="android:textSize">@dimen/bottom_tab_font_size</item><item name="android:textColor">@color/bottom_text_color</item><item name="android:ellipsize">marquee</item><item name="android:gravity">center</item><item name="android:background">@drawable/transparent</item><item name="android:paddingTop">@dimen/bottom_tab_padding_up</item><item name="android:layout_width">0dp</item><item name="android:layout_height">match_parent</item><item name="android:button">@null</item><item name="android:singleLine">true</item><item name="android:drawablePadding">@dimen/bottom_tab_padding_drawable</item><item name="android:layout_weight">1.0</item></style>順便說下,style之間可以有繼承關(guān)系
11、項目使用SlidingMenu導航切換頁面
? ? ? ??自己在公司做項目的時候,是在前人搭建的框架,進行增加功能的。其中大量的使用了Activity(夸張的地方有好幾層的Activity),在SlidingMenu,切換的時候也是重新start一個Activity出來,效率極其低效。
? ? ? ? 這里介紹一種回調(diào)的方法,實現(xiàn)頁面的切換。
? ? ? ??首先,是菜單Fragment中定義調(diào)用主頁面MainActivity的方法:
private void switchFragment(Fragment f) {if(f != null){if(getActivity() instanceof MainActivity){((MainActivity)getActivity()).switchFragment(f);}} } ? ? ? ?? 參數(shù)Fragment為要切換到的頁面,在new完后調(diào)用該方法。? ? ? ??((MainActivity)getActivity()).switchFragment(f);這句話就是使用MainActivity的實例調(diào)用MainActivity中的方法,對應的方法:
public void switchFragment(Fragment f){getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, f).commit();//slidingMenu打開時它會將它關(guān)閉,反之一樣。sm.toggle(); }? ? ? ??這里的sm為SlidingMenu的實例。
12、獲取手機設置語言
? ? 下面兩句代碼判斷系統(tǒng)語言是否為中文:
private boolean mChinease;mChinease = TextUtils.equals(Locale.getDefault().getLanguage(), "zh");
13、關(guān)于窗體的設置
//設置窗體的全屏顯示 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//設置窗體始終點亮 getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
14、點擊空白處Dialog不自動消失
當我們使用Dialog來代替進度條的時候我們就不希望,用戶點擊空白的地方令Dialog消失。此時,可以通過下面這句話取消點擊空白令Dialog消失: mLoadingDialog.setCanceledOnTouchOutside(false);// 設置點擊屏幕Dialog不消失15、獲取圖片資源的寬高
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher); int bmpWidth = bitmap.getWidth(); int bmpHeight = bitmap.getHeight();16、SDK Manager只顯示已經(jīng)裝過的API,不顯示其他API:
這個時候通常 Tools下的 Add-on Sites里面沒有URL。需要修改hosts文件。找到C:\Windows\System32\drivers\etc下面的hosts文件。
添加:74.125.237.1 dl-ssl.google.com, ?重啟SDK Manager即可。
其中的IP地址是在DOS下輸入:ping dl-ssl.google.com得到的。
17、應用中下載過資源,如圖片,進入圖庫不顯示已經(jīng)下載過的圖片,需要重新掃描SD-card。
17.1首先配置權(quán)限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />17.2發(fā)送廣播通知 Intent intent = new Intent();intent.setAction(Intent.ACTION_MEDIA_MOUNTED);intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));sendBroadcast(intent);
但在Android4.4中,則會拋出以下異常:
W/ActivityManager( ?498): Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=2269, uid=20016
那是因為Android4.4中限制了系統(tǒng)應用才有權(quán)限使用廣播通知系統(tǒng)掃描SD卡。
解決方式:
使用MediaScannerConnection執(zhí)行具體文件或文件夾進行掃描。
MediaScannerConnection.scanFile(this, new String[]{Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath() + "/" + fileName}, null, null);
參考: http://www.2cto.com/kf/201404/293667.html
18、RadioButton 內(nèi)容不居中。
android:gravity="center"在三星手機中設置了上面一句話后,發(fā)現(xiàn)RadioButton的內(nèi)容還是不居中,一般表現(xiàn)為偏右,這個時候需要再加上一句話: android:paddingLeft="0dp"
內(nèi)容就顯示為居中了。
19、設置->輔助功能->大號字體 令字體不變大
重寫getResource()方法 @Overridepublic Resources getResources() {Resources res = super.getResources();Configuration config = new Configuration();config.setToDefaults();res.updateConfiguration(config, res.getDisplayMetrics());return res;}
總結(jié)
以上是生活随笔為你收集整理的Android小技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++读图写图
- 下一篇: 超强图解Pandas