android开发步步为营之73:Android开发常见问题技术点总结之二



37、enterprise architect (EA) 源码生成UML类图,帮助理解项目工程 
  http://blog.csdn.net/wpc320/article/details/8108640

38、No resource found that matches the given name 'Theme.AppCompat.Light 的完美解决方案
http://www.apkbus.com/android-182059-1-1.html

39、关于点击popupwindow以外区域 popupwindow自动消失问题
http://blog.csdn.net/admin_/article/details/7853588
http://blog.sina.com.cn/s/blog_455d67110101rd38.html

40、windowManager添加的view点击外部区域的时候view消失 
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                                | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
view.setOnTouchListener(new OnTouchListener() {
                            @Override
                            public boolean onTouch(View v, MotionEvent event) {
                                if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
                                    close(v);
                                }
                                return false;
                            }
                        });


41、Adb常用命令
Adb命令行配置
在系统变量path里面配置
D:\android-sdk-windows\sdk\platform-tools;
adb uninstall com.dotc.lockbooster
adb install  E:\projects\LockScreen\bin\LockScreen.apk
adb shell monkey -p com.dotc.lockbooster -v 1000  自动化测试
adb logcat 查看日志
adb kill-server
adb start-server
ADB抓活机log 
1.手机出了问题,但没死机(如:TP失效,通话自动中断等) 
2.连接电脑后,开始--运行--cmd(电脑设备管理器这会有2个高通端口+1个ADB端口) 3.先输入adb shell 回车查看是否进手机系统(光标变成$表示已进入手机系统),确定能进入系统后,按ctrl+c退出。 
抓log
4.输入 adb shell dmesg > c:\log-dmesg.txt  回车后自动保存到c盘 
5.输入 adb shell logcat > c:\logcat.txt  回车后过一会按ctrl+c退出并保存到c盘  
6.输入adb shell logcat -b radio > c:\logcat-radio.txt 回车后过一会按ctrl+c退出并保存到c盘  
注:如果adb命令无法识别,可以先配置下环境变量 

42、java.util.ConcurrentModificationException
List等Collection的实现并没有同步化,如果在多 线程应用程序中出现同时访问,而且出现修改操作的时候都要求外部操作同步化
需要再定义一个List,用来保存需要删除的对象:
List delList = new ArrayList();
最后只需要调用集合的removeAll(Collection con)方法就可以了。

43、Can't create handler inside thread that has not called Looper.prepare()
出现这个原因主要是因为在非UI主线程里面执行了UI主线程的活,比如一个asynctask里面的doInBackground执行了更改页面TextView或者EditText的内容,或者doInBackground里面又执行了一个asyncTask,因为这另外一个asyncTask里面onPostExecute是执行在非主线程的,所以也会出现这个错误

44、获取非系统应用
http://blog.csdn.net/qinjuning/article/details/6867806

45、设置文字颜色
tv.setTextColor(Color.rgb(255, 255, 255));
tv.setTextColor(getResources().getColor(R.color.tab_selected));

46、获取LayoutInflater的三种方式
1. LayoutInflater inflater = getLayoutInflater();//调用Activity的getLayoutInflater() 
2. LayoutInflater inflater = LayoutInflater.from(context);  
3. LayoutInflater inflater =  (LayoutInflater)context.getSystemService
                              (Context.LAYOUT_INFLATER_SERVICE);

47、org.apache.subversion.javahl.ClientException: Previous operation has not finished; run 'cleanup' if it was interrupted
参考http://blog.csdn.net/superch0054/article/details/38668017


sqlite3放在根目录  和.svn同一级
E:\projects\ime>  sqlite3 .svn/wc.db "delete from work_queue"

48、分享
        String shareName = getString(R.string.lbl_share_hint) + " " + AndroidUtil.getGooglePlayUrl(MainActivity.this);
                Intent intentItem = new Intent(Intent.ACTION_SEND); // 分享发送的数据类型
                intentItem.setType("text/plain"); // 分享发送的数据类型
//                intentItem.setType("image/*");
                intentItem.putExtra(Intent.EXTRA_SUBJECT, "subject"); // 分享的主题
                intentItem.putExtra(Intent.EXTRA_TEXT, shareName); // 分享的内容
                intentItem.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                MainActivity.this.startActivity(Intent.createChooser(intentItem, getString(R.string.lbl_share)));// 目标应用选择对话框的标题

49、Unable to add window -- token null is not valid
Popupwindow在show的时候,发生这个错误的原因是application还没有运行完,所以在activity的oncreate里面尽量不要创建,要创建的话最好使用handler postdelay,延迟一段时间后再展示出来

50、android switch语句case expressions must be constant expressions
http://blog.csdn.net/aaawqqq/article/details/20037407

51、Android Studio使用eclipse的快捷键
可以将Android studio快捷键风格设置为习惯的Eclipse快捷键风格。
具体设置方法如下:
1:点击File->Settings打开设置对话框
2:在设置对话框中搜索"Keymap"标签页
3:将Keymaps设置为“Eclipse”
4:点击“Apply”可以将Android studio风格设置为习惯的Eclipse风格。

52、android studio Suggestion: add 'tools:replace="android:theme"' to <application> element
网上查了查,发现有讲新版本改变了merge的方法,对于conflict可以加tools:replace来解决


xmlns:tools="http://schemas.android.com/tools"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxxx.xxxx"
    xmlns:tools="http://schemas.android.com/tools"
    android:versionCode="1"
    android:versionName="1.0" >


然后再冲突的地方
<application
        android:name="com.xxxx.xxxx.xxApplication"
        android:allowBackup="false"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Sherlock"
        tools:replace="name,icon,label,theme">


然后编译通过


从eclipse import了一个项目,编译报找不到依赖库,


Error:(13, 0) Project with path ':libs:ActionBarSherlock' could not be found in root project 'WooxMainActivity'.


查了查发现根目录没有settings.gradle文件,创建一个加入如下内容:


include 'libs:ActionBarSherlock', 'libs:vlc-android', 'libs:SlidingMenu', 'libs:WheelView'


从Eclipse导入项目,报找不到application ID以及minSdkVersion不对:


Error:Failed to get application id for debug


在build.gradle里面发现defaultConfig {}没有东西


加入


android {


defaultConfig {


        applicationId 'com.wooxcloud.wooxregistry'


        minSdkVersion 10


        targetSdkVersion 17


        versionCode 1


        versionName '1.0'


    }


问题解决。

.
53、Android Studio常用命令总结

Ctrl+SHIFT+F 查找文件
Ctrl+F 从当前文件查找关键字
Ctrl+H  从当前Project查询关键字
Alt+Enter 自动提示需要引入的package
Ctrl+O 查看该类里面的方法
Ctrl+SHIFT+F  格式化代码  KeyMap选择eclipse
Ctrl+L  跳转到某一行
Alt+Insert   生成代码
自动导入包
FileSettingsEditGeneralAuto Import  
Xml,Java前面那些勾都打上
查看引用
Ctrl+G 选中某个类或者函数,查看被引用的情况
Ctrl+Alt+T 快捷生成try catch  if else 等等

54、Radiobutton 选项框与文字之间的间距怎么调
radiobutton.setButtonDrawable(R.drawable.myradio);
radiobutton.setPadding(iconOffset, 0, 0, 0);
在代码里实现,一旦把Padding设置上,RadioButton的文字就浮到RadionButton图片的下方,从最左边开始。上面代码中,我的R.drawable.myradio是方形的图片,大小30px,iconOffset设置为40,这样文字和图片就有10dip的间距了。

55、隐藏标题栏
方法一:this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
方法二:
<application android:icon="@drawable/icon" 
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.NoTitleBar">
nexus手机不能隐藏标题栏,这么设置
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN);

56、Android性能优化
http://blog.csdn.net/hewence1/article/details/39004301
http://www.trinea.cn/android/performance/

57、Eclipse项目转换成AndroidStudio项目
http://www.cnblogs.com/vanezkw/p/4182917.html

58、android 使用lint + studio ,排查客户端无用资源,string,drawable,layout等
android 使用lint + studio ,排查客户端无用资源,string,drawable,layout等
idea下使用
快捷键Ctrl+shift+alt+i

eclipse下有lint的插件,而且网上相关介绍非常多,但是idea的相关文档就比较少。idea中已经支持android lint,如何使用呢?

在项目中点击右键,在出现的右键菜单中有“Analyze” --> “run inspaction by Name ...”。在弹出的搜索窗口中输入想执行的检查类型,如“Unused Resources”。不必全部输入就应该自动找到了,点击后会弹出“inspaction scope”选择窗口,选择检查的范围,一般选择整个项目或模块。“inspaction scope”窗口下面还可以设置文件过滤,选择好后点ok就开始检查了。然后就可以根据检查结果来去除重复的资源。

Hard coded strings 排查硬编码没有写入string.xml的string


59、EditText自定义背景
http://blog.csdn.net/jdsjlzx/article/details/25063169


60、EditText自定义光标
http://blog.csdn.net/jdsjlzx/article/details/45075865


61、adb命令查看包名和adb启动你的apk
1.如何用adb获得手机里面某个apk的应用信息、版本信息
adb shell dumpsys package com.examle.xx
adb shell dumpsys 列出所有


2 如何用adb启动apk
adb shell am start -n com.tencent.mm/com.tencent.mm.ui.LauncherUI

62、Adb Shell命令环境变量配置
http://jingyan.baidu.com/article/17bd8e52f514d985ab2bb800.html

63、文件夹创建
// 获取图片缓存路径  
    File cacheDir = getDiskCacheDir(context, "thumb");  
    if (!cacheDir.exists()) {  
          cacheDir.mkdirs();  
    }  
/** 
     * 根据传入的uniqueName获取硬盘缓存的路径地址。 
     */  
    public File getDiskCacheDir(Context context, String uniqueName) {  
        String cachePath;  
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())  
                || !Environment.isExternalStorageRemovable()) {  
            cachePath = context.getExternalCacheDir().getPath();  
        } else {  
            cachePath = context.getCacheDir().getPath();  
        }  
        return new File(cachePath + File.separator + uniqueName);  
}  


或者这么写


/**
 * 获得外部存储根目录
 *
 * @return
 */
public static File getExternalStroageDirectory() {
    File directory = null;
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        directory = new File(Environment.getExternalStorageDirectory(), "test");
    }else
    {
        directory = new File(Environment.getDataDirectory(), "test");
    }
    if (directory.exists()) {
        if (directory.isDirectory()) {
            return directory;
        } else if (directory.isFile()) {
            directory.delete();
        }
    }
    directory.mkdirs();
    return directory;
}


64、PopupWindow不响应返回键的问题
设置一个背景即可
setFocusable(true);
ColorDrawable dw = new ColorDrawable(0x00000000);
setBackgroundDrawable(dw);


65、Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
//listview滑动的时候禁止加载图片,滑动更顺畅
lv_more_skin.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true));


@Override
public View getView(final int position, View convertView, ViewGroup parent) {


            final ViewHolder holder;
            if (convertView == null) {
                convertView = LayoutInflater.from(mCtx).inflate(R.layout.adapter_recommend_skin, null);
                holder = new ViewHolder();
                holder.mSkinIcon = (ImageView) convertView.findViewById(R.id.skin_icon);
                holder.mSkinName = (TextView) convertView.findViewById(R.id.recommend_skin_name);
               
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            final SkinPackageRecord skinRecord = getItem(position);
            if (skinRecord != null) {
                holder.mSkinName.setText(skinRecord.getName());
                //避免图片重复显示、位置错乱,tag为null或者当前位置的imgurl和tag里面的不一致,则图片设为null
                if (holder.mSkinIcon.getTag() == null || !skinRecord.getDescImgUrl().equals(holder.mSkinIcon.getTag().toString())) {
                    holder.mSkinIcon.setImageDrawable(null);
                }
                ImageLoader.getInstance().displayImage(skinRecord.getDescImgUrl(), holder.mSkinIcon, new ImageLoadingListener() {


                    @Override
                    public void onLoadingStarted(String arg0, View arg1) {


                        holder.mImageProgress.setVisibility(View.VISIBLE);
                    }


                    @Override
                    public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {


                        holder.mImageProgress.setVisibility(View.GONE);
                    }


                    @Override
                    public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {


                        holder.mImageProgress.setVisibility(View.GONE);
                        holder.mSkinIcon.setTag(skinRecord.getDescImgUrl());
                    }


                    @Override
                    public void onLoadingCancelled(String arg0, View arg1) {


                        holder.mImageProgress.setVisibility(View.GONE);
                    }
                });
            }


         
            return convertView;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值