meizu魅族适配

45 篇文章 0 订阅
6 篇文章 0 订阅

魅族 好烦,感觉底层没写好。适配很坑

隐藏 smartBar  但是键盘好像也不管用了.

getWindow().getDecorView()  

            .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);



            判断是否魅族手机

            "Meizu".equalsIgnoreCase(Build.MANUFACTURER)


魅族 Utils

package com.bm.feipingflyclip.utils;

import java.lang.reflect.InvocationTargetException;


        import java.lang.reflect.InvocationTargetException;
        import java.lang.reflect.Method;

        import android.app.ActionBar;
        import android.content.res.Resources.NotFoundException;
        import android.graphics.drawable.Drawable;
import android.os.Build;

public class SmartUtils {

    /**
     * 调用 ActionBar.setTabsShowAtBottom(boolean) 方法�     *
     * <p>如果 android:uiOptions="splitActionBarWhenNarrow",则可设置ActionBar Tabsæ˜¾ç¤ºåœ¨åº•æ ã?
     *
     * <p>示例�/p>
     * <pre class="prettyprint">
     * public class MyActivity extends Activity implements ActionBar.TabListener {
     *
     *     protected void onCreate(Bundle savedInstanceState) {
     *         super.onCreate(savedInstanceState);
     *         ...
     *
     *         final ActionBar bar = getActionBar();
     *         bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
     *         SmartBarUtils.setActionBarTabsShowAtBottom(bar, true);
     *
     *         bar.addTab(bar.newTab().setText("tab1").setTabListener(this));
     *         ...
     *     }
     * }
     * </pre>
     */
    public static void setActionBarTabsShowAtBottom(ActionBar actionbar, boolean showAtBottom) {
        try {
            Method method = Class.forName("android.app.ActionBar").getMethod(
                    "setTabsShowAtBottom", new Class[] { boolean.class });
            try {
                method.invoke(actionbar, showAtBottom);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 判断是否有SmartBar
     */
    public static boolean hasSmartBar() {

        try {
            // 新型号可用反射调用Build.hasSmartBar()
            Method[] methods = Class.forName("android.os.Build").getMethods();
            for (Method method : methods) {
                if (method.getName().equals("hasSmartBar")) {
                    return ((Boolean) method.invoke(null)).booleanValue();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 反射不到Build.hasSmartBar(),则用Build.DEVICE判断
        if (Build.DEVICE.equals("mx2")) {
            return true;
        } else if (Build.DEVICE.equals("mx") || Build.DEVICE.equals("m9")) {
            return false;
        }
        return false;
    }

    /**
     * 调用 ActionBar.setActionBarViewCollapsable(boolean) 方法�     *
     * <p>设置ActionBaré¡¶æ æ— æ˜¾ç¤ºå†…å®¹æ—¶æ˜¯å¦éšè—ã€?     *
     * <p>示例�/p>
     * <pre class="prettyprint">
     * public class MyActivity extends Activity {
     *
     *     protected void onCreate(Bundle savedInstanceState) {
     *         super.onCreate(savedInstanceState);
     *         ...
     *
     *         final ActionBar bar = getActionBar();
     *
     *         // 调用setActionBarViewCollapsable,并设置ActionBar没有显示内容,则ActionBaré¡¶æ ä¸æ˜¾ç¤?     *         SmartBarUtils.setActionBarViewCollapsable(bar, true);
     *         bar.setDisplayOptions(0);
     *     }
     * }
     * </pre>
     */
    public static void setActionBarViewCollapsable(ActionBar actionbar, boolean collapsable) {
        try {
            Method method = Class.forName("android.app.ActionBar").getMethod(
                    "setActionBarViewCollapsable", new Class[] { boolean.class });
            try {
                method.invoke(actionbar, collapsable);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 调用 ActionBar.setActionModeHeaderHidden(boolean) 方法�     *
     * <p>设置ActionModeé¡¶æ æ˜¯å¦éšè—ã€?     *
     * <p>示例�/p>
     * <pre class="prettyprint">
     * public class MyActivity extends Activity {
     *
     *     protected void onCreate(Bundle savedInstanceState) {
     *         super.onCreate(savedInstanceState);
     *         ...
     *
     *         final ActionBar bar = getActionBar();
     *
     *         // ActionBar转为ActionMode时,不显示ActionModeé¡¶æ 
     *         SmartBarUtils.setActionModeHeaderHidden(bar, true);
     *     }
     * }
     * </pre>
     */
    public static void setActionModeHeaderHidden(ActionBar actionbar, boolean hidden) {
        try {
            Method method = Class.forName("android.app.ActionBar").getMethod(
                    "setActionModeHeaderHidden", new Class[] { boolean.class });
            try {
                method.invoke(actionbar, hidden);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }



    /**
     * 调用ActionBar.setBackButtonDrawable(Drawable)方法
     *
     * <p>设置返回键图æ ?     *
     * <p>示例�/p>
     * <pre class="prettyprint">
     * public class MyActivity extends Activity {
     *
     *     protected void onCreate(Bundle savedInstanceState) {
     *         super.onCreate(savedInstanceState);
     *         ...
     *
     *         final ActionBar bar = getActionBar();
     *         // 自定义ActionBarçš„è¿”å›žé”®å›¾æ ‡
     *         SmartBarUtils.setBackIcon(bar, getResources().getDrawable(R.drawable.ic_back));
     *         ...
     *     }
     * }
     * </pre>
     */
    public static void setBackIcon(ActionBar actionbar, Drawable backIcon) {
        try {
            Method method = Class.forName("android.app.ActionBar").getMethod(
                    "setBackButtonDrawable", new Class[] { Drawable.class });
            try {
                method.invoke(actionbar, backIcon);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (NotFoundException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值