android开发步步为营之56:Android开发技术点总结(持续更新)

1、eclipse svn插件下载

http://subclipse.tigris.org/update_1.6.x
http://subclipse.tigris.org/update_1.8.x 64位机器

http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA


2、eclipse常用插件下载

http://blog.csdn.net/jackiehff/article/details/8181945


3、unicode与中文互转

http://blog.csdn.net/yangbobo1992/article/details/8556193


4、intent几种传值数组、对象、集合(Array,Object,List)

http://www.cnblogs.com/userbibi/archive/2012/03/29/2423202.html


5、Web view显示页面加载进度条
方法一:
public class ProgressTest extends Activity{  
  
final Activity context = this;  
  
@Override  
public void onCreate(Bundle b) {  
   super.onCreate(b);  
   requestWindowFeature(Window.FEATURE_PROGRESS);//让进度条显示在标题栏上  
   setContentView(R.layout.main);  
  
   WebView webview = (WebView)findViewById(R.id.webview);  
   webview.setWebChromeClient(new WebChromeClient() {  
              public void onProgressChanged(WebView view, int progress) {  
                //Activity和Webview根据加载程度决定进度条的进度大小  
               //当加载到100%的时候 进度条自动消失  
                context.setProgress(progress * 100);  
       }  
    });  
   webview.loadUrl(url);  
}  


方法二:
自定义控件

http://www.cnblogs.com/over140/archive/2013/03/07/2947721.html


6、ddmlib 您的主机中的软件中止了一个已建立的连接

打开windows任务管理器,将360mobilemanager关闭,或者将adb.exe关闭


7、webview使用总结

http://blog.csdn.net/caesardadi/article/details/8530477


8、Failed to find style ‘textViewStyle‘ in current theme
Missing styles. Is the correct theme chosen for this layout?
Use the Theme combo box above the layout to choose a different layout, or fix the theme style references.




Failed to find style ‘textViewStyle‘ in current theme
Failed to find style ‘editTextStyle‘ in current theme
Failed to find style ‘buttonStyle‘ in current theme


情况一:
AndroidManifest.xml的application或者activity未设置相关android:theme="@style/AppTheme",


情况二:
application中设定了android:theme="@style/AppTheme",又在activity中设定了android:theme="@style/LoginStyle" 。所以一个全局一个局部,两个相互冲突。
解决方案:删除一个 theme


9、android错误之android.content.res.Resources$NotFoundException:

http://blog.csdn.net/jason0539/article/details/11699647


10、android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 


11、AsyncHttpResponseHandler(12831): Current thread has not called Looper.prepare(). Forcing synchronous mode.

  TimerTask里面不能使用AsyncHttpResponseHandler,因为has not called Looper.prepare(),需要改用handler来调用AsyncHttpResponseHandler,或者Timetask里面调用同步的方法


12、eclipse 一直停在DDMS post-create init...  
1。删除eclipse workspace目录\.metadata\.lock这个文件
http://stackoverflow.com/questions/8677679/eclipse-hangs-in-ddms-post-create-init
2.在搭建android环境时,出现不报错,模拟器出不来,一直停留在DDMS POST-CREAT 
INIT时,首先删除workspace中的.meadata文件夹。然后重启eclipse.这时你会发现原来的工程都没有了。因为你删除了.meadata文件夹。然后eclipse会正常出现。要是运行项目,出现ADB server didn‘t ACK问题,首先检查adb.exe的路径是否正确,然后通过任务管理器查看是否有多个adb.exe在运行。一般安装了豌豆夹的需要特别注意,这里往往会是因为豌豆夹作祟。关闭所有的豌豆夹进程和adb.exe进程,重新启动即可。如果不知道豌豆夹有哪些进行,直接把豌豆夹卸载了,重启电脑应该就没问题了。呵呵呵。。。祝大家开发顺利!!


原文地址:http://blog.csdn.net/yangxuanlun/article/details/7875573


3.断网。。就好了。
13、Only the original thread that created a view hierarchy can touch its views

子线程不能操作主线程的ui,必须使用handler来进行线程间的通信


14、解决Android中Fragment调用startactivityforresult不能返回结果的问题 


如果fragment直接startActivityForResult()那么宿主和fragment的onActivityResult()都会执行如果,fragment里面getActivity().startActivityForResult()那么只有宿主onActivityResult()可以接收到返回数据


另外跳转过去的目标activity       <activity
            android:name="com.avazu.lockscreen.ui.activity.FacebookUserStatusActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar" />


android:launchMode="singleTask" 必须去掉,才能触发
public void onActivityResult(int requestCode, int resultCode, Intent data)


Ps:fragment之间相互跳跃,那么在目标fragment的onCreateView()方法里面可以接收传递的数据和重绘页面


15、 Android导入错误 Invalid project description
导致此错误的很有可能的原因之一为:此项目在eclipse的工作目录之下。所以,将项目拷贝到另一个目录下,然后再尝试导入,大部分情况下是可以解决此问题的。


16、设置Activity页面透明度
        主题设置成透明的
        <activity
            android:name="com.avazu.lockscreen.ui.activity.NotificationDialogActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" >
        </activity>
       页面背景设置成透明的
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/llNotification"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#70000000"
    android:gravity="center"
    android:orientation="vertical" >


给一个控件设置背景颜色setBackGroundColor()时设置argb,a即alpha-透明度(十六进制00-ff,0则为全透明,ff则不透明),rgb为red、green、blue.
有图有真相:
 layout.setBackgroundColor(Color.parseColor("#66000099"));
 layout.setBackgroundColor(Color.parseColor("#ee000099"));
 layout.setBackgroundColor(Color.parseColor("#33000099"));


17、如何弹出透明遮罩层
可使用的技术:
(1)Popupwindow
(2)Dialog
(3)如果是打开其他界面,需要在该界面弹出一个遮罩层,那么startActivity之后,然后启动遮罩层Activity,利用新的Activity总是在最上层的效果




18、按钮图片过小,点击按钮灵敏度不够,如何放大图片可点击区域?
可通过增加padding来提高可点击区域
<ImageView
            android:id="@+id/btn_prev"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginRight="16dip"
            android:layout_toLeftOf="@+id/btn_next"
            android:contentDescription="@string/previous"
            android:paddingBottom="6dip"
            android:paddingLeft="7dip"
            android:paddingRight="7dip"
            android:paddingTop="7dip"
            android:src="@drawable/btn_prev_normal" />
19、eclipse如何自动提示?
打开 Eclipse  -> Window -> Perferences -> Java -> Editor -> Content Assist,在右边最下面一栏找到 auto-Activation ,下面有三个选项,找到第二个“Auto activation triggers for Java:”选项 在其后的文本框中会看到一个“.”存在。这表示:只有输入“.”之后才会有代码提示和自动补全,我们要修改的地方就是这里。把该文本框中的“.”换掉,换成“abcdefghijklmnopqrstuvwxyz.”,这样,你在Eclipse里面写Java代码就可以做到按“abcdefghijklmnopqrstuvwxyz.”中的任意一个字符都会有代码提示。




Eclipse for android 设置代码提示功能


1、设置 java 文件的代码提示功能


打开 Eclipse 依次选择 Window > Preferences > Java > Editor - Content Assist > Auto activation triggers for Java ,设置框中默认是一个点,


现在将它改为:.abcdefghijklmnopqrstuvwxyz(,


2、设置 xml 文件的代码提示功能


打开 Eclipse 依次选择 Window > Preferences > Xml > Editor > Content Assist > Auto activation > Prompt when these characters are inserted ,设置框中默认是 <=: ,


现在将它改为: <=:.abcdefghijklmnopqrstuvwxyz(,


另外xml文件需要open with -->Android common xml editor不要使用xml editor打开,不然不会自动提示


20、开源项目学习
https://github.com/lancelothuxi/android-open-project github开源项目100个


https://github.com/greenrobot/EventBus


https://github.com/mcxiaoke/android-volley


https://github.com/greenrobot/greenDAO
http://greendao-orm.com/


https://github.com/sqlcipher/android-database-sqlcipher
https://www.zetetic.net/sqlcipher/sqlcipher-for-android


https://developers.google.com/protocol-buffers/
https://github.com/android/platform_external_protobuf

https://github.com/allegro/php-protobuf


21、android listview去掉分割线 
1》设置android:divider="@null" 
2》android:divider="#00000000"
#00000000后面两个零表示透明
3》.setDividerHeight(0)

高度设为0


22、android.os.NetworkOnMainThreadException


这个异常大概意思是在主线程访问网络时出的异常。 Android在4.0之前的版本 支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主线程中了。


 那么如何做才能正常运行呢?
[java] view plaincopyprint?
01.new Thread(){  
02.            @Override  
03.            public void run() {  
04.                // TODO Auto-generated method stub  
05.                super.run();  
06.                url = AuthUtil.getAuthorizationURL();  
07.                if (url == null) {  
08.                    Toast.makeText(WebViewActivity.this, R.string.auth_url_empty, 3000).show();  
09.                }  
10.                handler.sendEmptyMessage(0);  
11.            }  
12.        }.start();  




在handler中接受到消息 作出相应的处理。
[java] view plaincopyprint?
01.private Handler handler = new Handler() {  
02.  
03.        public void handleMessage(Message msg) {  
04.            switch (msg.what) {  
05.                case 0:  
06.                dosomething... 
07.                    break;  
08.            }  
09.        };  
10.    };  


23、Failed to install *.apk on device ‘emulator-5554‘: timeout 
http://www.cnblogs.com/luoyanli/archive/2013/07/01/3164597.html


24、创建快捷方式

 //创建快捷方式
    private void addShortcut(){
            Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");//保持默认
            //快捷方式的名称   
            shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); //保持默认
            shortcut.putExtra("duplicate", false); //不允许重复创建   
            Intent intent = new Intent(this,HomeActivity.class);//后面的logo.class是我的程序第一次加载的activity的名字,大家要注意
            intent.setAction("com.figo.activity.home");//这个也是logo的具体路径
            shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
            //显示的图标
            Parcelable icon = Intent.ShortcutIconResource.fromContext(this,R.drawable.ic_launcher);
            shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
            sendBroadcast(shortcut);//广播
        }


//删除快捷方式
    private void delShortcut(){   
            Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
            //快捷方式的名称   
            shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));   
            
          //这里的intent要和创建时的intent设置一致
            Intent intent = new Intent(this,HomeActivity.class);
            intent.setAction("com.figo.activity.home");
               shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); 
            sendBroadcast(shortcut); 
        } 
配置文件添加上
   <activity
            android:name="com.figo.activity.HomeActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.NoTitleBar"
            android:windowSoftInputMode="adjustPan" >
             <intent-filter>
                <action android:name="com.figo.activity.HomeActivity" />
            </intent-filter>
        </activity>




25、定时任务

http://blog.csdn.net/fancsxx/article/details/8811565


26、如何从google play下载应用apk安装包
1、首先在google play找需要的软件
2、然后打开这个网站http://apps.evozi.com/apk-downloader/
3、把google play的软件地址直接复制到第二个网站的对话框
4、这样就直接能下载软件安装包了,所有软件都行的


27、查找strings.xml中未使用的资源
点击run android lint
或者
另外,鼠标右击项目,在android tools 中也可以找到它,点击Run Lint:check for common Errors即可




28、重新启动APP
    public static void restartApplication(Context context) {
        MainApplication.instance().finishAllActivity();
        Intent intent=new Intent(context,AppHomeActivity.class);
        context.startActivity(intent);
        
//        final Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
//        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//        context.startActivity(intent);
}
//mainApplication里面将各个activity加到数组中去
 private List<Activity> mActivities = new ArrayList<Activity>();
 public void finishAllActivity() {
        Iterator<Activity> it = mActivities.iterator();
        while (it.hasNext()) {
            Activity a = it.next();
            a.finish();
        }
    }


29、小米4打开开发者模式
    设置-->关于手机-->miui版本(6.0以上版本)  连续点击,以下版本连续点击android版本,另外有时候,eclipse里面Devices选项没有看到需要调试的应用,关闭360手机助手的进程或者其他手机助手进程即可


30、ADB环境变量的配置

http://jingyan.baidu.com/article/17bd8e52f514d985ab2bb800.html


31、Listview OnItemClick事件无法触发解决

 里面有webview或者button什么,需要设置
 android:clickable="false"
 android:focusable="false"
 android:focusableInTouchMode="false" 

32、TextView跑马灯效果
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:maxWidth="230dp"
android:singleLine="true"


viewHolder.tv_good_title = (TextView) convertView.findViewById(R.id.tv_good_title);
viewHolder.tv_good_title.setSelected(true);


33、两个注意点
1、设置为快捷方式的activity必须加上action,否则会找不到应用程序
  <action android:name="com.dotc.lockscreen.money.activity.MainActivity" />
2、在finish之前跳转activity,页面是从右向左移动的,之后跳转页面是从左往右移动的,推荐在finish之后,ondestroy那里跳转到其他页面。


34、 手势滑动Activity,Acitity中有listview,手势无法实现问题解决
listview.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {


        //你定义的手势
         mGestureDetector.onTouchEvent(event);
               return false;
            }
});
不过这样有个问题listview上下拉动,以及onitemclick事件不好触发了


35、按键监听

返回、菜单键Activity中可以监听
 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            PrefMgr.setBoolean("CHECK_WHETHER_FINISHED", true);
        } else if (keyCode == KeyEvent.KEYCODE_MENU) {
        } else if (keyCode == KeyEvent.KEYCODE_HOME) {


            PrefMgr.setBoolean("CHECK_WHETHER_FINISHED", true);
        }
        return super.onKeyDown(keyCode, event);
    }


Home键需要监听广播
 public class HomeWatcherReceiver extends BroadcastReceiver {
    private static final String LOG_TAG = "HomeReceiver";
    private static final String SYSTEM_DIALOG_REASON_KEY = "reason";
    private static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
    private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
    private static final String SYSTEM_DIALOG_REASON_LOCK = "lock";
    private static final String SYSTEM_DIALOG_REASON_ASSIST = "assist";


    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.i(LOG_TAG, "onReceive: action: " + action);
        if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
            // android.intent.action.CLOSE_SYSTEM_DIALOGS
            String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
            Log.i(LOG_TAG, "reason: " + reason);


            if (SYSTEM_DIALOG_REASON_HOME_KEY.equals(reason)) {
                // 短按Home键
                Log.i(LOG_TAG, "homekey");


            }
            else if (SYSTEM_DIALOG_REASON_RECENT_APPS.equals(reason)) {
                // 长按Home键 或者 activity切换键
                Log.i(LOG_TAG, "long press home key or activity switch");


            }
            else if (SYSTEM_DIALOG_REASON_LOCK.equals(reason)) {
                // 锁屏
                Log.i(LOG_TAG, "lock");
            }
            else if (SYSTEM_DIALOG_REASON_ASSIST.equals(reason)) {
                // samsung 长按Home键
                Log.i(LOG_TAG, "assist");
            }


        }
    }


}

36、LRUCache用法

http://blog.csdn.net/xiaanming/article/details/9825113

http://blog.csdn.net/guolin_blog/article/details/9526203


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。