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) {
Method expand;
if (Build.VERSION.SDK_INT >= 17) {
expand = statusBarManager.getMethod("expandNotificationsPanel");
expand = statusBarManager.getMethod("expand");
expand.invoke(sbservice);
用途:可用于點選Notifacation之後收起狀态欄
2、 擷取狀态欄高度
public static int getStatusBarHeight(Context context){
Class<?> c = null;
Object obj = null;
Field field = null;
int x = 0, statusBarHeight = 0;
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也能取到你想要的資料。
系列
<a href="http://www.cnblogs.com/over140/p/3133262.html">Android實用代碼七段(四)</a>