?
前言
?
?
正文
1、展開、收起狀態欄?
????????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、 獲取狀態欄高度
????????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極簡寫法
????????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;
????}
用法:
????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透明
????????<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、調用開發者選項中顯示觸摸位置功能
設置1顯示,設置0不顯示。
?
7、獲取設備上已安裝并且可啟動的應用列表
????????????intent.addCategory(Intent.CATEGORY_LAUNCHER);
????????????List<ResolveInfo>?activities?=?getPackageManager().queryIntentActivities(intent,?0)
注意:使用getInstalledApplications會返回很多無法啟動甚至沒有圖標的系統應用。ResolveInfo.activityInfo.applicationInfo也能取到你想要的數據。