onCreate中计算View的高度
可以借助getViewTreeObserver().addOnGlobalLayoutListener()来获得宽度或者高度,示例代码如下:
mWebView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mWebView.getWidth(); mWebView.getHeight(); //防止调用多次 mWebView.getViewTreeObserver().removeOnGlobalLayoutListener(this); } });
PopupWindow计算高度
PopupWindow在初始化创建好后,我想知道它的高度和宽度,可以这样计算:
popupWindow.getContentView().measure(0, 0); popupWindow.getContentView().getMeasuredWidth(); popupWindow.getContentView().getMeasuredHeight();
Theme.NoDisplay
在Android中想进行一些无界面的处理又不适合使用service时,此时可以在项目的AndroidManifest.xml文件中相应的Activity标签中添加这样一行:
android:theme=”@android:style/Theme.NoDisplay
activity父级activity的重建
当我们从其他App跳转到我们应用内部时,可能我们跳转到的不是应用的第一层级页面而是深层次的页面,这时候我们需要在关闭应用内部页面时,对高层的页面进行重建。
-
为activity指定父级activity
<application> <!-- 首层activity --> <activity android:name="com.example.Mainactivity"/> <!-- 第二层级activity --> <activity android:name="com.example.SecondeActivity" android:parentActivityName="com.example.Mainactivity" > <!-- 父activity的meta-data,用来支持4.0以下版本 --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.Mainactivity" /> </activity> </application>
二级页面返回时,重建任务栈
@Override public void onBackPressed() { // 获得指向父级activity的intent,NavUtils在support v4 包中 Intent upIntent = NavUtils.getParentActivityIntent(this); // 判断是否需要重建任务栈 if (NavUtils.shouldUpRecreateTask(this, upIntent)) { // 这个activity不是这个app任务的一部分, 所以当向上导航时创建 // 用合成后退栈(synthesized back stack)创建一个新任务。 TaskStackBuilder.create(this) // 添加这个activity的所有父activity到后退栈中 .addNextIntentWithParentStack(upIntent) // 向上导航到最近的一个父activity .startActivities(); } else { // 这个activity是这个app任务的一部分, 所以 // 向上导航至逻辑父activity. NavUtils.navigateUpTo(this, upIntent); } super.onBackPressed(); }
兼容低版本修改图片的tintColor
drawable.setColorFilter(Color.RED,PorterDuff.Mode.SRC_IN);
使用dumpsys命令查看系统信息
dumpsys命令很强大,可以查看当前系统的信息,用的还比较多,dumpsys常用命令如下:
dumpsys [options] meminfo 显示内存信息 cpuinfo 显示cpu信息 account 显示accounts信息 activity 显示所有的activities信息 window 显示键盘、窗口信息 wifi 显示wifi信息
例如:查看某个程序内部内存信息
adb shell dumpsys meminfo 包名 or pid
adb shell dumpsys window windows | grep -E 'mCurrentFocus'
结果类似如下:
mCurrentFocus=Window{43469d60 u0 com.jikexueyuan.geekacademy.debug/com.jikexueyuan.geekacademy.ui.activity.ActivityHomeV3}
Recyleview的LayoutManager设置成StaggeredGridLayoutManager后获取某个字view的spanIndex(也就是在第几列)
private static class MyItemDecoration extends RecyclerView.ItemDecoration { @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); int index = ((StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams()).getSpanIndex(); }
如果获取当前手机为每个app分配的堆大小,也就是内存大小
ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); int heapSize = manager.getMemoryClass();
注意:这里获得heapSize是M为单位返回的duplicate entry: android/support/annotation/ColorRes.class解决方案,只需要在app下的build.gradle加入以下配置就好了:
configurations { all*.exclude group: 'com.android.support', module: 'support-v4' }
方便快捷实现Activity变暗,并带有动画
/** * 调整窗口的透明度 * @param from>=0&&from<=1.0f * @param to>=0&&to<=1.0f * * */ private void dimBackground(final float from, final float to) { final Window window = getWindow(); ValueAnimator valueAnimator = ValueAnimator.ofFloat(from, to); valueAnimator.setDuration(500); valueAnimator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { WindowManager.LayoutParams params = window.getAttributes(); params.alpha = (Float) animation.getAnimatedValue(); window.setAttributes(params); } });valueAnimator.start(); } </pre>
然后这样调用
/** 窗口背景变暗*/ dimBackground(1.0f,0.5f); /** 窗口背景变亮*/ dimBackground(0.5f,1.0f);
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于