標籤:des android style blog http io color ar os
前言
每次分享意味著每次都有進步,本系列以實用為主,歡迎和我分享和推薦好用的程式碼片段~~
聲明歡迎轉載,但請保留文章原始出處:) 部落格園:http://www.cnblogs.com農民伯伯: http://over140.cnblogs.com
本文
1、展開、收合狀態列
public static final void collapseStatusBar(Context ctx) {
Object sbservice = ctx.getSystemService("statusbar");
try {
Class<?> statusBarManager = Class.forName("android.app.StatusBarManager");
Method collapse;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
collapse = statusBarManager.getMethod("collapsePanels");
} else {
collapse = statusBarManager.getMethod("collapse");
}
collapse.invoke(sbservice);
} catch (Exception e) {
e.printStackTrace();
}
}
public static final void expandStatusBar(Context ctx) {
Object sbservice = ctx.getSystemService("statusbar");
try {
Class<?> statusBarManager = Class.forName("android.app.StatusBarManager");
Method expand;
if (Build.VERSION.SDK_INT >= 17) {
expand = statusBarManager.getMethod("expandNotificationsPanel");
} else {
expand = statusBarManager.getMethod("expand");
}
expand.invoke(sbservice);
} catch (Exception e) {
e.printStackTrace();
}
}
用途:可用於點擊Notifacation之後收合狀態列
2、 擷取狀態列高度
public static int getStatusBarHeight(Context context){
Class<?> c = null;
Object obj = null;
Field field = null;
int x = 0, statusBarHeight = 0;
try {
c = Class.forName("com.android.internal.R$dimen");
obj = c.newInstance();
field = c.getField("status_bar_height");
x = Integer.parseInt(field.get(obj).toString());
statusBarHeight = context.getResources().getDimensionPixelSize(x);
} catch (Exception e1) {
e1.printStackTrace();
}
return statusBarHeight;
}
3、ListView使用ViewHolder極簡寫法
public static <T extends View> T getAdapterView(View convertView, int id) {
SparseArray<View> viewHolder = (SparseArray<View>) convertView.getTag();
if (viewHolder == null) {
viewHolder = new SparseArray<View>();
convertView.setTag(viewHolder);
}
View childView = viewHolder.get(id);
if (childView == null) {
childView = convertView.findViewById(id);
viewHolder.put(id, childView);
}
return (T) childView;
}
用法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_feed_item, parent, false);
}
ImageView thumnailView = getAdapterView(convertView, R.id.video_thumbnail);
ImageView avatarView = getAdapterView(convertView, R.id.user_avatar);
ImageView appIconView = getAdapterView(convertView, R.id.app_icon);
用起來非常簡練,將ViewHolder隱於無形。
4、 設定Activity透明
<style name="TransparentActivity" parent="AppBaseTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
說明:AppBaseTheme一般是你application指定的android:theme是啥這裡就是啥,否則Activity內部的空間風格可能不一致。
用途:用於類比Dialog效果,比如再Service中沒法用Dialog,就可以用Activity來類比
5、 代碼切換全屏
//切換到全屏
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
//切換到非全屏
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
注意:切換到全屏時,底部的虛擬按鍵仍然是顯示的。次方法可多次調用用於切換
用途:播放器介面經常會用到
6、調用開發人員選項中顯示觸摸位置功能
android.provider.Settings.System.putInt(getContentResolver(), "show_touches", 1);
設定1顯示,設定0不顯示。
7、擷取裝置上已安裝並且可開機應用列表
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> activities = getPackageManager().queryIntentActivities(intent, 0)
注意:使用getInstalledApplications會返回很多無法啟動甚至沒有表徵圖的系統應用。ResolveInfo.activityInfo.applicationInfo也能取到你想要的資料。
系列
Android實用代碼七段(一)
Android實用代碼七段(二)
Android實用代碼七段(三)
Android實用代碼七段(四)
Android實用代碼七段(五)