安卓零碎的知识重点(2)
1、获取标题栏的高度
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT)
.getTop();
int titleBarHeight = contentTop - statusBarHeight;
textView.setText("statusBarHeight" + statusBarHeight + ";contentTop="
+ contentTop + ";titleBarHeight" + titleBarHeight);
2、以Acivity作为布局
注:该类必须继承ActivityGroup
LocalActivityManager activityManager;
activityManager = getLocalActivityManager();
View view2 = activityManager.startActivity("act2",new Intent(this, Act2.class)).getDecorView();
linearLayout.addView(view2, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));3、屏幕截图并保存
View view = getWindow().getDecorView();
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),
view.getHeight(), Config.RGB_565);
view.draw(new Canvas(bitmap));
imageView.setImageBitmap(bitmap);4、android 获取组件尺寸大小
在oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽和高。看似没有问题。事实上他们去得值是0。并非你想要的结果?
这是为什么呢?
在调用oncreate()方法时,界面处于不可见状态,内存载入组件还没有绘制出来,你是无法获取他的尺寸。
那怎样在绘制组件之前能获取到该组件的尺寸大小呢?
这里有三种方法,经过验证的:
(1)
int width =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int height =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); view.measure(width,height); int height=view.getMeasuredHeight(); int width=view.getMeasuredWidth();
(2)
//添加组件绘制之前的监听
ViewTreeObserver vto =view.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public booleanonPreDraw() {
int height =view.getMeasuredHeight();
int width =view.getMeasuredWidth();
}
}); (3)//添加总体布局监听
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
@Override
public voidonGlobalLayout() {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int height =view.getMeasuredHeight();
int width =view.getMeasuredWidth();
}
});那么。在activity进入执行期时,组件的尺寸获取方法就非常easy了。直接getWidth()和getHeight().public class ThreadPoolUtils {
private ThreadPoolUtils() {
}
// 定义核心线程数。并行线程数
private static int CORE_POOL_SIZE = 3;
// 线程池最大线程数:除了正在执行的线程额外保存多少个线程
private static int MAX_POOL_SIZE = 200;
// 额外线程空暇状态生存时间
private static int KEEP_ALIVE_TIME = 5000;
// 堵塞队列。当核心线程队列满了放入的
// 初始化一个大小为10的泛型为Runnable的队列
private static BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable>(
10);
// 线程工厂,把传递进来的runnable对象生成一个Thread
private static ThreadFactory threadFactory = new ThreadFactory() {
// 原子型的integer变量生成的integer值不会反复
private final AtomicInteger ineger = new AtomicInteger();
@Override
public Thread newThread(Runnable arg0) {
return new Thread(arg0, "MyThreadPool thread:"
+ ineger.getAndIncrement());
}
};
// 当线程池发生异常的时候回调进入
private static RejectedExecutionHandler handler = new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
// 进行重新启动操作
}
};
// 线程池ThreadPoolExecutor java自带的线程池
private static ThreadPoolExecutor threadpool;
// 静态代码块,在类被载入的时候进入
static {
threadpool = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE,
KEEP_ALIVE_TIME, TimeUnit.SECONDS, workQueue, threadFactory,
handler);
}
public static void execute(Runnable runnable) {
threadpool.execute(runnable);
}
}
progressBar = new ProgressBar(getApplicationContext(), null, android.R.attr.progressBarStyleHorizontal); progressBar.setMax(100); // progressBar.setIndeterminate(false); // progressBar.setProgressDrawable(getResources().getDrawable( // android.R.drawable.progress_horizontal)); // progressBar.setIndeterminateDrawable(getResources().getDrawable( // android.R.drawable.progress_indeterminate_horizontal)); LayoutParams layoutParams2 = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); progressBar.setLayoutParams(layoutParams2); progressBar.setPadding(5, 5, 5, 5); runBarLayout.addView(progressBar);5、抽屉布局的使用
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ABCDFF"
tools:context="com.example.drawtest.MainActivity" >
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ABFFFF" >
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</FrameLayout>
<fragment
android:id="@+id/navigation_drawer"
android:name="com.drawer.test.LeftMenuFrag"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
tools:layout="@layout/leftmenu" />
</android.support.v4.widget.DrawerLayout>
版权声明:本文博主原创文章,博客,未经同意,不得转载。

浙公网安备 33010602011771号