Android AutoLayout
来源:互联网 发布:2016酒店业数据 编辑:程序博客网 时间:2024/06/04 01:38
public class AutoLayout
{
private boolean mStatusBarAvailable;
private static final String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height";
DisplayMetrics outMetrics = new DisplayMetrics();
private int mAvailableWidth;
private int mAvailaleHegiht;
private static final String KEY_DESIGN_WIDTH = "design_width";
private static final String KEY_DESIGN_HEIGHT = "design_height";
private int mDesignWidth;
private int mDesignHeight;
public int getAvailableWidth()
{
return mAvailableWidth;
}
public int getAvailaleHeight()
{
return mAvailaleHegiht;
}
public int getDesignWidth()
{
return mDesignWidth;
}
public int getDesignHeight()
{
return mDesignHeight;
}
public void auto(Activity activity)
{
auto(activity, true);
}
public void auto(Activity activity, boolean ignoreStatusBar)
{
getMetaData(activity);
WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(outMetrics);
mAvailableWidth = outMetrics.widthPixels;
mAvailaleHegiht = outMetrics.heightPixels;
mAvailaleHegiht -= getStatusHeight(activity.getResources());
if (ignoreStatusBar)
return;
checkStatusBar(activity);
if (mStatusBarAvailable)
{
mAvailaleHegiht += getStatusHeight(activity.getResources());
}
L.e("mAvailableWidth =" + mAvailableWidth + " , mAvailaleHegiht = " + mAvailaleHegiht);
}
private void getMetaData(Context context)
{
if (mDesignWidth > 0 && mDesignHeight > 0) return;
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo;
try
{
applicationInfo = packageManager.getApplicationInfo(context
.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null && applicationInfo.metaData != null)
{
mDesignWidth = (int) applicationInfo.metaData.getInt(KEY_DESIGN_WIDTH);
mDesignHeight = (int) applicationInfo.metaData.getInt(KEY_DESIGN_HEIGHT);
}
} catch (PackageManager.NameNotFoundException e)
{
throw new RuntimeException(
"you must set " + KEY_DESIGN_WIDTH + " and " + KEY_DESIGN_HEIGHT + " in your manifest file.", e);
}
L.e("mDesignWidth =" + mDesignWidth + " , mDesignHeight = " + mDesignHeight);
}
private void checkStatusBar(Activity activity)
{
Window win = activity.getWindow();
// ViewGroup decorViewGroup = (ViewGroup) win.getDecorView();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
// check theme attrs
int[] attrs = {android.R.attr.windowTranslucentStatus,
android.R.attr.windowTranslucentNavigation};
TypedArray a = activity.obtainStyledAttributes(attrs);
try
{
mStatusBarAvailable = a.getBoolean(0, false);
} finally
{
a.recycle();
}
// check window flags
WindowManager.LayoutParams winParams = win.getAttributes();
int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if ((winParams.flags & bits) != 0)
{
mStatusBarAvailable = true;
}
}
}
private int getStatusHeight(Resources res)
{
int result = 0;
int resourceId = res.getIdentifier(STATUS_BAR_HEIGHT_RES_NAME, "dimen", "android");
if (resourceId > 0)
{
result = res.getDimensionPixelSize(resourceId);
}
return result;
}
private AutoLayout()
{
}
private static volatile AutoLayout sInstance;
public static AutoLayout getInstance()
{
if (sInstance == null)
{
synchronized (AutoLayout.class)
{
if (sInstance == null)
{
sInstance = new AutoLayout();
}
}
}
return sInstance;
}
}
{
private boolean mStatusBarAvailable;
private static final String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height";
DisplayMetrics outMetrics = new DisplayMetrics();
private int mAvailableWidth;
private int mAvailaleHegiht;
private static final String KEY_DESIGN_WIDTH = "design_width";
private static final String KEY_DESIGN_HEIGHT = "design_height";
private int mDesignWidth;
private int mDesignHeight;
public int getAvailableWidth()
{
return mAvailableWidth;
}
public int getAvailaleHeight()
{
return mAvailaleHegiht;
}
public int getDesignWidth()
{
return mDesignWidth;
}
public int getDesignHeight()
{
return mDesignHeight;
}
public void auto(Activity activity)
{
auto(activity, true);
}
public void auto(Activity activity, boolean ignoreStatusBar)
{
getMetaData(activity);
WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(outMetrics);
mAvailableWidth = outMetrics.widthPixels;
mAvailaleHegiht = outMetrics.heightPixels;
mAvailaleHegiht -= getStatusHeight(activity.getResources());
if (ignoreStatusBar)
return;
checkStatusBar(activity);
if (mStatusBarAvailable)
{
mAvailaleHegiht += getStatusHeight(activity.getResources());
}
L.e("mAvailableWidth =" + mAvailableWidth + " , mAvailaleHegiht = " + mAvailaleHegiht);
}
private void getMetaData(Context context)
{
if (mDesignWidth > 0 && mDesignHeight > 0) return;
PackageManager packageManager = context.getPackageManager();
ApplicationInfo applicationInfo;
try
{
applicationInfo = packageManager.getApplicationInfo(context
.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null && applicationInfo.metaData != null)
{
mDesignWidth = (int) applicationInfo.metaData.getInt(KEY_DESIGN_WIDTH);
mDesignHeight = (int) applicationInfo.metaData.getInt(KEY_DESIGN_HEIGHT);
}
} catch (PackageManager.NameNotFoundException e)
{
throw new RuntimeException(
"you must set " + KEY_DESIGN_WIDTH + " and " + KEY_DESIGN_HEIGHT + " in your manifest file.", e);
}
L.e("mDesignWidth =" + mDesignWidth + " , mDesignHeight = " + mDesignHeight);
}
private void checkStatusBar(Activity activity)
{
Window win = activity.getWindow();
// ViewGroup decorViewGroup = (ViewGroup) win.getDecorView();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
{
// check theme attrs
int[] attrs = {android.R.attr.windowTranslucentStatus,
android.R.attr.windowTranslucentNavigation};
TypedArray a = activity.obtainStyledAttributes(attrs);
try
{
mStatusBarAvailable = a.getBoolean(0, false);
} finally
{
a.recycle();
}
// check window flags
WindowManager.LayoutParams winParams = win.getAttributes();
int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if ((winParams.flags & bits) != 0)
{
mStatusBarAvailable = true;
}
}
}
private int getStatusHeight(Resources res)
{
int result = 0;
int resourceId = res.getIdentifier(STATUS_BAR_HEIGHT_RES_NAME, "dimen", "android");
if (resourceId > 0)
{
result = res.getDimensionPixelSize(resourceId);
}
return result;
}
private AutoLayout()
{
}
private static volatile AutoLayout sInstance;
public static AutoLayout getInstance()
{
if (sInstance == null)
{
synchronized (AutoLayout.class)
{
if (sInstance == null)
{
sInstance = new AutoLayout();
}
}
}
return sInstance;
}
}
阅读全文
0 0
- Android AutoLayout
- Android Autolayout适配
- Android AutoLayout 使用
- Android AutoLayout 学习笔记
- Android AutoLayout 使用记录
- android autolayout适配
- AutoLayout android studio
- android autolayout框架
- Android layout系列-autolayout
- android屏幕适配autolayout
- 限定符(Qualifiers),Android AutoLayout
- Android中AutoLayout的使用
- Autolayout
- autolayout
- AutoLayout
- autolayout
- AutoLayout
- autolayout
- Linux总线驱动设计(1)-总线驱动模型
- HTML CSS + DIV实现整体布局
- Java 1.8 堆内存变化及GC算法
- json 与jsonp 区别与原理
- 巨杉数据库SequoiaDB的常用操作
- Android AutoLayout
- ActiveMQ
- R6010 -abort() has been called错误
- Kotlin——初始Kotlin及Android Studio配置环境开发HelloKotlin
- 树链剖分总结
- [leetcode]Binary Tree Postorder Traversal
- JMS java 消息机制
- 数字货币开发专题(PoS挖矿教程普通电脑即可挖矿)
- 线上运维哪些事