参考:几个开源UI框架
先记录一下,正在研究Pull-to-Refresh.Rentals-Android这个框架,用的比较多。
============================
原创,转载请指明出处。
在Activity/Fragment的onCreate/onCreateView方法中如果试图获取view的宽和高,如使用getMeasuredWidth
与getMeasuredHeight
方法,会返回0。
众所周知,view显示在屏幕上会经过三个阶段:测量、布局和绘制。其中测量阶段确定整个布局中每个view(包括外层的ViewGroup和内层的子view)的高和宽。布局阶段确定子view在父view的哪个地方(子view的layout_xxx属性就发生作用),布局阶段发生之前,就已经知道了每个view的大小了。绘制阶段则通知子view绘制自己(父view如果不设置背景色的话,就不会发生绘制),绘制阶段之前就已经知道具体的位置了。
=============================
原创,如需转载,请指明出处
使用Hexo搭建博客比较方便,在创建新的文章(post)、草稿(draft)或者页面(page)时,hexo会使用默认的模板。默认模板可能不太符合我们自己的习惯,因此需要自定义。
打开hexo的安装目录,目录树为:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53hexo-install-directory
├── CNAME
├── _config.yml //Hexo的配置文件,可以配置主题、语言等
├── avatar.jpg
├── db.json
├── debug.log
├── node_modules
│ ├── hexo
│ ├── hexo-deployer-git
│ ├── hexo-generator-archive
│ ├── hexo-generator-category
│ ├── hexo-generator-feed
│ ├── hexo-generator-index
│ ├── hexo-generator-sitemap
│ ├── hexo-generator-tag
│ ├── hexo-migrator-wordpress
│ ├── hexo-renderer-ejs
│ ├── hexo-renderer-marked
│ ├── hexo-renderer-stylus
│ └── hexo-server
├── package.json
├── public //执行hexo g命令后,生成的内容会在这里,包括所有的文章、页面、分类、tag等.
│ ├── 2013
│ ├── 2014
│ ├── 2015
│ ├── 2016
│ ├── 404.html
│ ├── Staticfile
│ ├── archives
│ ├── atom.xml
│ ├── categories
│ ├── css
│ ├── images
│ ├── index.html
│ ├── js
│ ├── page
│ ├── sitemap.xml
│ └── vendors
├── scaffolds //保存着默认模板,自定义模板就是修改该目录下的文件
│ ├── draft.md //默认的草稿模板
│ ├── page.md //默认的页面模板
│ └── post.md //默认的文章模板
├── source //Hexo存放编辑页面的地方,可以使用vim或其他编辑器编辑这里的内容
│ ├── 404.html //自定义404页面,可以使用腾讯公益404页面
│ ├── Staticfile
│ ├── _drafts //存放所有的草稿文件的目录
│ ├── _posts //存放所有的文章文件的目录,用的最多,比如执行hexo n "post_name"之后,post_name这篇文章就存放在这个目录下
│ ├── categories
│ └── images //这是我自己定义的,用于存放个人的avatar
└── themes //Hexo的所有主题
├── landscape
├── next //这是我目前用的主题
└── yilia
如上所述,如果要自定义文章模板,则直接用编辑器打开hexo-install-directory/scaffolds/post.md
这个文件,然后自己编写需要的模板信息,保存即可。下次再执行hexo n "page_name"
命令时,Hexo就会使用这个模板来新建文章了。
Markdown语法适合快速编写博客,比HTML还简单,在编辑博客的时候,添加链接、图片、代码段和引用链接等不用再去编辑框点各种按钮,直接输入相关的语法即可。
这里列出两个网址,适合Markdown语法入门。
参考:
1.stackoverflow
2.Android Technology Blog
#简单的方法
主要的方法是:1
2
3
4
5
6
7
8WallpaperManager myWallpaperManager
= WallpaperManager.getInstance(getApplicationContext());
try {
myWallpaperManager.setResource(R.drawable.five);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
其中WallpaperManager还有其他的设置壁纸的方法,如setBitmap
等,可以去官网)了解一下。
#设置合适的参数
如果图片比较高清,那么壁纸很可能显示不完全,或者很模糊。要想把整张图片完全的作为壁纸显示,其实只要简单几步即可,如下:
1.在AndroidManifest文件中添加如下的权限:1
2
3
4<!-- 设置壁纸的权限 -->
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<!-- 设置壁纸参数的权限 -->
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/>
2.设置壁纸的代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38/**
* 把bitmap设置为壁纸
* @param context 上下文
* @param bitmap 要设置为壁纸的bitmap
* */
public void setWallpaper(Context context, Bitmap bitmap) {
WallpaperManager manager = WallpaperManager.getInstance(context);
int desiredWidth = context.getWindowManager().getDefaultDisplay().getWidth();
int desiredHeight = context.getWindowManager().getDefaultDisplay().getHeight();
Bitmap sb = scaleBitmap(bitmap, desiredWidth, desiredHeight);
int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
int screenHeight = context.getResources().getDisplayMetrics().heightPixels;
manager.suggestDesiredDimensions(screenWidth, screenHeight);
manager.setBitmap(sb);
}
/**
* 裁剪bitmap
* @param b 原始图片
* @param w 目标宽
* @param h 目标高
* @return 裁剪后的bitmap
* */
private Bitmap scaleBitmap(Bitmap b, int w, int h) {
int width = b.getWidth();
int height = b.getHeight();
float scaleWidth = ((float) w) / width;
float scaleHeight = ((float) h) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);//缩放
return Bitmap.createBitmap(b, 0, 0, width, height, matrix, true);
}
2.1 根据屏幕的宽和高裁剪原始的bitmap:1
2
3int desiredWidth = context.getWindowManager().getDefaultDisplay().getWidth();
int desiredHeight = context.getWindowManager().getDefaultDisplay().getHeight();
Bitmap sb = scaleBitmap(bitmap, desiredWidth, desiredHeight);
2.2 为WallpaperManager设置合适的宽和高:1
2
3int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
int screenHeight = context.getResources().getDisplayMetrics().heightPixels;
manager.suggestDesiredDimensions(screenWidth, screenHeight);
使用Android的Dialog时,默认会有标题栏和内容框。取消标题栏也比较简单:1
2dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //before
dialog.setContentView(R.layout.logindialog);
这其实是与Activity去掉顶部标题栏的操作是一样的,这里要注意的是,去掉标题栏的操作要在setContentView之前调用。
用于把Drawable转换成Bitmap,代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public static Bitmap drawableToBitmap (Drawable drawable) {
Bitmap bitmap = null;
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
if(bitmapDrawable.getBitmap() != null) {
return bitmapDrawable.getBitmap();
}
}
if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
在Android Studio中编写如下语句时遇到了问题:1
TypedArray ta = obtainStyledAttributes(R.style.MyCustomStyle, attrs);
AS的错误提示是Excepted resource of type styleable。即要求obtainStyledAttributes方法的第一个参数必须是R.styleable.xxx中已定义的ID,如果传的这个int值没有被AS识别为style类型,那么就会出这个错误。
在我们已知参数是正确的情况下,解决这个警告提示的方法就是加suppress。即在这条语句或包含这条语句的方法上加“@SuppressWarnings(“ResourceType”)”即可。
Android Studio的Preference->System Settings->HTTP Proxy设置的时候,上面有错误提示:You have JVM property “socksProxyHost” set to “127.0.0.1”.