1. img.getLayoutParams().width//代码设置控件宽度
String path = Environment.getExternalStorageDirectory()+"/path/";//在SD卡建立文件夹
2.
dialog背景透明
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.alpha = 0.6f;
window.setAttributes(lp);
3.
//获取手机所有图片
//只查询jpeg和png的图片
Cursor mCursor = mContentResolver.query(mImageUri, null,
MediaStore.Images.Media.MIME_TYPE + "=? or "
+ MediaStore.Images.Media.MIME_TYPE + "=?",
new String[] { "image/jpeg", "image/png" }, MediaStore.Images.Media.DATE_MODIFIED);
while (mCursor.moveToNext()) {
}
4.
//获取图片的路径
String path = mCursor.getString(mCursor
.getColumnIndex(MediaStore.Images.Media.DATA));
//获取该图片的父路径名
String parentName = new File(path).getParentFile().getName();
5.
/**Button背景***/
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">//表示当前视图是否处于正在交互的窗口中,这个值由系统自动决定,应用程序不能进行改变。
<item android:state_window_focused="false"><shape>
<corners android:radius="10px" /><padding android:bottom="5px" android:left="30px" android:right="30px" android:top="5px" />
<stroke android:width="1px" android:color="#FF625B" />
<solid android:color="#FF625B" />
</shape></item>//表示当前视图获得到焦点,当前视图是否处于按下状态
<item android:state_focused="true" android:state_pressed="true"><shape> <corners android:radius="10px" /><padding android:bottom="5px" android:left="30px" android:right="30px" android:top="5px" />
<stroke android:width="1px" android:color="#FF625B" />
<solid android:color="#FFC0BE" />
</shape></item>//表示当前视图没有获得到焦点,当前视图是否处于按下状态
<item android:state_focused="false" android:state_pressed="true"><shape> <corners android:radius="10px" /><padding android:bottom="5px" android:left="30px" android:right="30px" android:top="5px" />
<stroke android:width="1px" android:color="#FF625B" />
<solid android:color="#FFC0BE" />
</shape></item>//表示当前视图处于选中状态
<item android:state_selected="true"><shape> <corners android:radius="10px" /><padding android:bottom="5px" android:left="30px" android:right="30px" android:top="5px" />
<stroke android:width="1px" android:color="#FF625B" />
<solid android:color="#FFC0BE" />
</shape></item> <item android:state_focused="true"><shape> <corners android:radius="10px" /><padding android:bottom="5px" android:left="30px" android:right="30px" android:top="5px" />
<stroke android:width="1px" android:color="#FF625B" />
<solid android:color="#FFC0BE" />
</shape></item></selector>
边角弧度:
<shape
xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 填充的颜色 --> <solid android:color="#FFFFFF" /> <!-- 设置按钮的四个角为弧形 --> <!-- android:radius 弧形的半径 --> <corners android:radius="15px" /></shape>
6.
//在app目录下创建文件夹
File file = this.getExternalFilesDir(Environment.DIRECTORY_PICTURES); files = new File(file,path);if (!files.exists()){ files.mkdir(); Log.e("tag",files.toString());}
7.
//屏幕宽高
int width = c.getResources().getDisplayMetrics().widthPixels;
int height = c.getResources().getDisplayMetrics().heightPixels;
8.
状态栏高度
private int getStatusBarHeight() {
Class<?> c = null; Object obj = null; //java.lang.reflect.FieldField field = null;
int x = 0, sbar = 0; try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField("status_bar_height"); x = Integer.parseInt(field.get(obj).toString()); sbar = getContext().getResources().getDimensionPixelSize(x); } catch (Exception e1) { e1.printStackTrace(); } return sbar; }9.
获取文件名:不带后缀
public String getFileNameNoEx(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot >-1) && (dot < (filename.length()))) { return filename.substring(0, dot); } } return filename;
byte[] 流转化文件
private void createFileWithByte(byte[] bytes) { // TODO Auto-generated method stub /** * 创建File对象,其中包含文件所在的目录以及文件的命名 */ File file = new File(Environment.getExternalStorageDirectory(), "2017_06_21.3gp");//2017_06_21.3gp是文件格式 // 创建FileOutputStream对象 FileOutputStream outputStream = null; // 创建BufferedOutputStream对象 BufferedOutputStream bufferedOutputStream = null; try { // 如果文件存在则删除 if (file.exists()) { file.delete(); } // 在文件系统中根据路径创建一个新的空文件 file.createNewFile(); // 获取FileOutputStream对象 outputStream = new FileOutputStream(file); // 获取BufferedOutputStream对象 bufferedOutputStream = new BufferedOutputStream(outputStream); // 往文件所在的缓冲输出流中写byte数据 bufferedOutputStream.write(bytes); // 刷出缓冲输出流,该步很关键,要是不执行flush()方法,那么文件的内容是空的。 bufferedOutputStream.flush(); } catch (Exception e) { // 打印异常信息 e.printStackTrace(); } finally { // 关闭创建的流对象 if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (bufferedOutputStream != null) { try { bufferedOutputStream.close(); } catch (Exception e2) { e2.printStackTrace(); } } }}
文件转byte[]流
public byte[] readStream(String imagepath) throws Exception { FileInputStream fs = new FileInputStream(imagepath); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while (-1 != (len = fs.read(buffer))) { outStream.write(buffer, 0, len); } outStream.close(); fs.close(); return outStream.toByteArray();}
10.
信任所有的Https请求
s_sSLContext.init(null, new TrustManager[]{new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } }}, new SecureRandom());
11.
jarsigner -verbose -keystore d:\FYRCB.jks -signedjar d:\signed.apk d:\tap_unsign.apk FYRCB
12.
PopupWindow
- showAsDropDown(View anchor, int xoff, int yoff) 以anchor的左下角为参照点,定义偏移
- showAsDropDown(android.view.View) 以anchor的左下角为参照点,不偏移
- showAtLocation(View parent, int gravity, int x, int y) 以parent为主容器,gravity为对齐参照点,定义偏移
推荐用showAsDropDwon方法。
这里是为了让PopupWindow居中显示,所以需要自己定义横向位移偏移量(其他位置类似)
int xoff = window.getWidth()/2-parent.getWidth()/2;window.update();window.showAsDropDown(parent, -xoff, 0);
13.
设计师常常并没有针对安卓设备单独做一套设计稿,而是选择了iphone手机作为参考机型。他们以为适配了IOS就等于适配了安卓。标注尺寸单位都是px。设计帅常常拿iphone6(s)或者是iphone6(s) plus作为参考机型,一个4.7寸一个5.5寸。比如是4.7英寸的iphone6,它的分辨率是1334x750(dpi是326),而安卓设备最接近这个数值的分辨率是1280*720,对应这个分辨率的dpi一般是320,跟iphone 6(s)很接近,那么UI使用的iphone6(s)设计稿就对应安卓1280x720(dpi是320)的设备,所以我们就用320这个dpi进行换算。再比如是5.5英寸的iphone6 plus,它的分辨率是1920x1080(dpi是480),而安卓设备刚好也有很多同等的分辨率,对应这个分辨率的dpi一般是480,而iphone6 plus的dpi也是480,所以我们用480的dpi进行换算。
举个例子,设计师基于iphone6的设计稿标注20px,换算成dp就是20x/(320/160)=20/2=10。也就是除以2得到dp。如果设计师基于iphone6 plus的设计稿标注120px,那么dp就是120x/(480/160)=30/3=40。也就是除以3得到dp。
一般我们看UI稿的尺寸就可以推测出它的参考机型,比如UI稿的尺寸是1334x750,那肯定是iphone6(s)一类的机型,或者是1920x1080,那就是iphone6(s) plus一类的机型。如果UI稿的尺寸匹配不到一款主流的机型,那就是UI设计师不合格啦!