天天看點

Android實用代碼七段(五)

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>

繼續閱讀