博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日结小细节
阅读量:6242 次
发布时间:2019-06-22

本文共 7171 字,大约阅读时间需要 23 分钟。

hot3.png

 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.Field

        Field 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设计师不合格啦!

 

转载于:https://my.oschina.net/u/2355512/blog/523965

你可能感兴趣的文章
Activity、Fragment、ViewPage
查看>>
《信息安全系统设计基础》课程总结
查看>>
衣码对照表
查看>>
Vue-Router导航守卫
查看>>
tool
查看>>
hdu2087 剪花布条
查看>>
获取现阶段选中的tab的标题(easyui)
查看>>
tty的核心位置,与运行调用过程
查看>>
Python全栈学习_day011作业
查看>>
20172304 实验三报告
查看>>
[转载]项目风险管理七种武器-霸王枪
查看>>
正则实例
查看>>
Hash与Map
查看>>
sqlmap使用笔记
查看>>
U盾技术学习笔记
查看>>
云计算面临的安全挑战 访北大计算机学院院长陈钟
查看>>
一起谈.NET技术,C#中标准Dispose模式的实现
查看>>
艾伟:C#对游戏手柄的编程开发-API篇(2)
查看>>
关于defineProperty的一点理解
查看>>
如何创建只读域控制器RODC(Read-Only Domain Controller)
查看>>