一些杂乱的知识点(一)

一些杂乱的知识点(一)

1.Android下配置环境变量(类似于电脑上的cmd命令)

    需要把执行的文件放在system/xbin目录下,比如把sqlite3放在这下面,在
    adb shell下面,直接输入sqlite3直接可以运行.adb shell下面输入su可以提高到root权限也是这个道理.

2.ListView

    1.在公司,一般使用BaseAdapter.用一个类去继承这个类.
    2.能用fill_parent尽量用fill_parent,用wrap_content的话,它不知道
    到底多少个item才能填满屏幕的高度,所以如果当前的getcount返回的个数
    不够占满屏幕的高度的话,它会一直调用getview方法去不断地尝试去
    填满,getview方法会被调用很多次,效率降低.当使用fill_parent的时候
    ,它一开始就知道需要多少个item才能填满屏幕,所以不会去多调用getview方法.
    3.创建xml布局时,命名一般是  "item_功能_layout".在布局里面,一个ImageView控件的命名一般是  "item_img_功能"  ,可以设置一张默认图片.
    4.优化:public View getView(int position, View convertView, ViewGroup parent) {
    //1.获取position位置条目对应的list集合中的新闻,Bean对象
    NewsBean newsBean = list.get(position);

    View view = null;

    ViewHolder viewHolder = null;   //用来缓存view上的数据

    //2.复用convertView优化listview,创建一个view作为getview的返回值用来显示一个条目
    if(convertView != null){
        view = convertView;
        viewHolder = (ViewHolder) view.getTag();   //将之前缓存的数据  恢复
    } else {
        //加载布局
        view = View.inflate(context, R.layout.item_news_layout, null);
        viewHolder = new ViewHolder();

        //3.获取view上的子控件   存到  viewHolder里面
        viewHolder.item_img_icon = (ImageView)view.findViewById(R.id.item_img_icon);
        viewHolder.item_tv_title = (TextView)view.findViewById(R.id.item_tv_title);
        viewHolder.item_tv_des = (TextView)view.findViewById(R.id.item_tv_des);

        view.setTag(viewHolder);   //将这个内部类(缓存数据的类)存到view里面

    }
    //4.将数据设置给这些子控件显示
     //view子控件的view对象在ViewHolder里面,直接可以设置里面的数据,就等于在设置view里面的子控件的数据
    viewHolder.item_img_icon.setImageDrawable(newsBean.news_icon);   
    viewHolder.item_tv_title.setText(newsBean.title);
    viewHolder.item_tv_des.setText(newsBean.des);

    return view;
}

class ViewHolder{
    ImageView item_img_icon;
    TextView item_tv_title;
    TextView item_tv_des;
}

3.LinearLayout布局

    1.在使用到weight属性时,如果是vertical布局,则需要把height设置成
    0dp,如果是horizontal,则需要把width设置成0dp.
    2.gravity:子控件相对于自己居中
      layout_gravity:自己相对于父窗体居中
    3.android:scaleType="fitXY"拉伸图片,使之占满

4.Android使用图片

    1.Bitmap     setImageBitmap()
    2.Drawable   setImageDrawable()
        context.getResources().getDrawable(R.drawable.icon2);

5.常见包名

    1.bean   model  一个模型
    2.util   工具类
    3.adapter 适配器的包
    5.dao   db  操作数据库的包

6.单位

    1.dp  一般的长度单位就用这个
    2.sp  字体的大小用这个

7.工具类

    1.TextUtils.isEmpty(urlString)   可以判断字符串是否为空

8.耗时操作

    1.android耗时的操作(请求网络,大文件的拷贝,数据库的操作)需要在子线程中进行.
    2.安卓4.0之后的网络操作强制在子线程中进行.因为网络访问是耗时的操作,可能导致ANR(application not response 应用无响应);

9.线程

    1.子线程不能更新UI(某些情况下可以)
    2.Toast也算是更新UI,所以不能放在子线程中
    3.子线程可以通过handler或者java回调机制发送数据给主线程.其中用
    handler方式的时候,Message对象的what可以用来区分是哪个Message对象发送过来的数据.

10.Json数据解析

    1.用{}包含的是JsonObject
    2.用[]包含的是JsonArray

11.手机访问电脑上的服务器中的内容

    1.需要配置局域网,然后让手机连接服务器的地址,且是以ip地址开头,不是以电脑用户名开头.

12.SmartImageView

    Android中加载网络图片的ImageView,功能强大,代码简单.
    自定义控件的使用时,xml文件中必须写完整路径,比如这里需要写com.loopj.android.image.SmartImageView

13.自定义控件

    1.所有的自定义控件,必须实现它的所有的构造方法

14.网络

    1.需要开一个子线程去请求网络,一般线程是写到封装这个请求网络的方法里面.  如果需要返回值,则可以使用Handler,或者java的回调机制.
    2.判断下载完成:如果一个文件的md5正确了,就下载完成了.

15.小技巧

    1.当不知道一个实现的那个方法里面的参数是什么意思时(看api没看懂),
    可以在里面加一个Syso输出语句,然后在这一行打一个断点,debug一下,查看函数的参数分别是什么,即可知道参数的意思.

16.发送短信

    1.// 获取SmsManager实例
    SmsManager smsManager = SmsManager.getDefault();
    // 如果短信内容过多 发不出去 分条发送
    ArrayList<String> divideMessage = smsManager.divideMessage(content);
    for (String string : divideMessage) {
        // 发送短信数据
        smsManager.sendTextMessage(number, null, string, null, null);
    }

    2.权限:<uses-permission android:name="android.permission.SEND_SMS"/>

17.样式和主题 style和Theme

17.1 共同点

    定义的方式是一样的

17.2 不同点

    1.style的作用范围比较窄(控件 button,textview), theme 作用在
    activity或者Application节点下.

17.3使用

    1.res->values->xxxx.xml   用styles.xml文件或者自己定义的文件来写都行
        <style name="my_style">
            <item name="android:layout_width">wrap_content</item>
            <item name="android:layout_height">wrap_content</item>
            <item name="android:textColor">#ff0000</item>
            <item name="android:textSize">25sp</item>
        </style>

        <style name="my_theme">
            <item name="android:animateOnClick">true</item>
            <item name="android:background">#aa0243</item>
        </style>

18. 国际化 i18n

    国际化就是在res下创建对应国家环境目录,然后更改strings.xml中的值.
    然后在运行程序的时候,它会自动的检测当前的系统语言环境去找对应的文件夹下的strings.xml资源.如果不知道那个国家的简写,可以打开IE浏览器,设置->语言,可以看到所有国家的简写.
        values-en  英文
        values-zh  中文

19. 2种上下文的区别

MainActivity.this   是Context的子类
getApplicationContext() 直接返回Context
对话框不能用getApplicationContext()

20. 对话框

20.1 普通对话框(用的比较多)

    // 构建AlertDialog
    AlertDialog.Builder builder = new Builder(this);
    builder.setTitle("警告");
    builder.setMessage("世界上最遥远的距离是没有网络");
    builder.setPositiveButton("确定", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            System.out.println("点击了确定按钮 执行的逻辑");

        }
    });
    builder.setNegativeButton("取消", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            System.out.println("点击了取消按钮");
        }
    });
    // 最后一步一定要记得 show出来
    builder.show();

20.2 单选对话框(用的少)

    builder.setSingleChoiceItems

20.3 多选对话框(用的少)

    builder.setMultiChoiceItems

20.4 进度条对话框

    //1.创建一个ProgressDialog对象      与Progress相关的可以在子线程更新UI
    final ProgressDialog progressDialog = new ProgressDialog(mContext);
    //2.设置标题
    progressDialog.setTitle("玩命儿加载ing");

    //3.设置风格,默认的风格是转圈儿     现在设置成水平
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    new Thread(){
        public void run() {
            for (int i = 0; i <= 100; i++) {
                SystemClock.sleep(50);   //睡眠50毫秒
                progressDialog.setProgress(i);    //设置进度条的进度
            }

            //关闭对话框
            progressDialog.dismiss();
        };
    }.start();    //开启线程
    //4.最后记得show
    progressDialog.show();

21. Android动画

21.1 属性动画

21.1 补间动画

21.1 帧动画

    就是加载一系列的图片资源,照着官方api来弄就行api guides->animation and graphics->drawable animation

22. 进程概念介绍

  • Android四大组件都是运行在主线程
  • Android中的服务,也是在后台运行 没有界面
  • 首先杀死等级低的进程(下面的进程等级由高到低)

22.1 Foreground process 前台进程

用户正在交互,可以理解成   相当于Activity的onResume()方法

22.2 Visible process 可视进程

用户没有在交互,但用户还一直能看得见页面,相当于Activity执行了onPause()方法

22.3 Service process 服务进程

通过startService()开启了一个服务

22.4 Background process 后台进程

当前用户看不见页面,相当于Activity执行了onStop()方法

22.5 Empty process 空进程

23. 获取SD卡路径

  • 获取内置SD卡路径 Environment.getExternalStorageDirectory().getPath();
  • 获取外置SD卡路径

    public List<String> getExtSDCardPath()  
    {  
        List<String> lResult = new ArrayList<String>();  
        try {  
            Runtime rt = Runtime.getRuntime();  
            Process proc = rt.exec("mount");  
            InputStream is = proc.getInputStream();  
            InputStreamReader isr = new InputStreamReader(is);  
            BufferedReader br = new BufferedReader(isr);  
            String line;  
            while ((line = br.readLine()) != null) {  
                if (line.contains("extSdCard"))  
                {  
                    String [] arr = line.split(" ");  
                    String path = arr[1];  
                    File file = new File(path);  
                    if (file.isDirectory())  
                    {  
                        lResult.add(path);  
                    }  
                }  
            }  
            isr.close();  
        } catch (Exception e) {  
        }  
        return lResult;  
    }  
    

24. 引进类库

比如视频播放开源项目vitamio,是一个类库,那是个Android不能允许的项目,里面有很多源码.当需要在自己的项目中引进时,先把vitamio导入到workspace,需要右键自己的项目属性Android->add library

25. 判断横竖屏

获取屏幕高度,宽度,如果高度>宽度则是竖屏,否则相反.

// 1. 获取手机的宽和高
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    Point outSize = new Point();
    wm.getDefaultDisplay().getSize(outSize);
    int width = outSize.x; // 宽
    int height = outSize.y; // 高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值