注意事项

来源:互联网 发布:md5算法可逆吗 编辑:程序博客网 时间:2024/04/24 02:31

1.先做出总体框架*后再细分代码实现

2.     查看系统所有空间的样式:      E:\sdk1\adt-bundle-windows-x86-20131030\sdk\platforms\android-19\data\res\values---style   

         找到文件修改放在工程中,覆盖系统的;模仿系统代码使用

         继承父类:重写属性

         <style name="widget_text" parent="@android:style/Widget.ProgressBar.Horizontal">

3.      生成方法返回的值, findViewById(R.id.listview);----------------------ctrl+2+L

4.      颜色的十六进制

5.      静态代码块:

                 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目 启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.静态方法在类加载的时候就已经加载可以用类名直接调用

比如main方法就必须是静态的这是程序入口

两者的区别就是:静态代码块是自动执行的;

静态方法是被调用的时候才执行的.

6.      大一点的数据存储到本地,一般用序列化(XML)

7.       生成getset方法----右键?—Source—Generate Getters and Setters

         有参构造函数:Source—Generate Constructor using Fields

         无参构造函数:  Generate Constructors from Superclass

8.      增强for循环------------for(Person person:personList)

9.      int类型转换成string类型:如果在循环中或大量转换,不要用+"",会降低效率;应该用valueof();

10.    ctrl+点击:查看类的源码:-----------------------导入源码—Attach Source---Android-18

11.    ctrl+F   :搜索关键字

12.    Android not Responding(应用程序无响应)阻塞了主线程 ANR异常

13.    只有原始的线程(主线程, ui线程)才能修改view对象

14.    访问网络一般用子线程

15.    手机和模拟器默认为utf-8

16.    Toast.makeText(MainActivity.this, state, 0).show();-----------------context

17.    android导入jar包----------放进工作空间libs目录下------然后在工程中配路径-----BuildPath—Configure Build Path---Add External JARs

18.    下载时服务器一般返回的是206----------可以使用if(code/100==2)来判断

19.     动态清空Linearlayout中的布局,removeAllViews()

20.     进度条可以在子线程中修改,因为进度条已经封装了handler方法

21.     开启activity获得返回值

22.     配置Activity横屏,在配置文件中配置,android;screenOrientation

23.    onBackPressed()-----------------------捕获返回键

24.    四大组件:a.  activity   b.  content provider(内容提供者) c  broadcast receiver(广播接收者)d.  service(服务)

25.    找错误时,找我们代码所在的包名

26.    private类只暴露某个方法,新建一个接口

27.    图片可以修改----------------------------位图bitmap

28.    同步代码:方法是顺序执行                      异步代码:开新的线程执行代码

29.    计时器:Timer()---------------------39播放器的进度条

30.    把一个文件的Uri显示出来: Uri.fromFile(file)

31.    自定义旋转进度---------------------样式和主题模块中

32.    夜间模式: 定义两个主题

33.    版本控制各种安装文档-----见资料

34.    公司中版本控制一般写完一段提交一段

35.    创建工程时最好不要选择最大版本,防止以后新版本无法安装

36.    快速导包:ctrl+shift+o

37.    Search Everything:速度最快的文件搜索软件

39.    工具类:StreamTools.java  :把流转换成字符串

40.    工具包(拷贝到libs下):   afinal_0.5_bin.jar        :提供下载,断点下载

41.    查找:   Ctrl+O

42.    判断是否为空:TextUtils.isEmpty(string)

43.    跳转后使用finish(),不会保存到回退栈

44.    系统源码:D:\安卓\adt-bundle-windows-x86-20131030\sdk\platforms\android-19

45.    控件中加入控件或图片等--------------android:drawable.......

46.    查看控件样式D:\安\adt-bundle-windows-x86-20131030\sdk\platforms\android-19\data\res\values\styles.ml

47.    public void next(View view)

48.   其他控件实施点击事件,直接在属性中加android:clickable=”true”    android:onClick=”next”

49.   查看官网API文档: Develop-----API Guides(api 引导):-----------直接查看例子

50.    自定义组合控件整体设置点击事件

51.    不是四大组件的需要加上Context上下文

52.    音频资源:res目录下创建raw文件夹

53.    数据库放在工程assets目录下

54.    Intent i=new Intent(HomeActivity.this,AtoolsActivity.class);尽量使用这种方式

55.    把数据库拷贝到assets目录并创建包com.itheima.mobilesafe.db.dao包创建该类   file://android_aset/address.db这种无法访问

56.    WebView还可以加载图片String str =file:///android_asset/icon.png;    //把address.db拷贝到我们的/data/data/包名/files/address.db

57.    打开已有数据库和sql语句操作

String path="data/data/com.example.mobilesafe/files/address.db";SQLiteDatabase database=SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);Cursor cursor = database.rawQuery("select location from data2 where id = (select outkey from data1 where id = ?)",new String[] { number.substring(0, 7) });

 

58.    文本改变的监听  addTextChangedListener(new TextWatcher(){})

59.    输入框抖动和震动效果

60.    导入工程后改变不同api,右键-----Properties for XXX

61.    搜索代码:Ctrl+H

62.    可以在服务中嵌套广播接收者

63.    广播接收者不光可以在清单文件中注册,还可以在代码中注册------------接收去电广播

64.    动态添加布局View   view =   View.inflate(this, R.layout.address_show, null);
65.    外部数据库放在asset目录下,再操作

66.    新建数据库放在db包中,操作数据库放在db.dao包中

67.    Android测试类,放在一个独立的包中.test            

         (1)新建一个测试类,继承AndroidTestCase

         (2)在配置文件中配置相关

68.    新建一个测试工程

69.    业务bean:放在一个独立的包下,.domain------------------------------类似人物类等

70.    findViewById() -----遍历查找id------listview优化

71.    实时更新listview中的内容 ------手机卫士05

72.    使数据倒着显示,即新添加的数据在上面,倒着查数据库:select number,mode from blacknumber order by _id desc

73.    状态选择器: 按下改变状态

74.    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {});  对话框

75.    listview数据改变实时,     adapter.notifyDataSetChanged();    通知适配器数据改变了

76.    广播接收者如果在清单文件中配置,程序一旦加载就无法关闭。用代码注册则可以关闭(在服务中注册广播接收者)

77.    xml是跨平台的,其他语言也可以解析

78.    在子线程中更新简单的ui,像吐司,可以用runOnUiThread(new Runnable(){public void run(){}}

79.    睡眠:直接用try{Thread.sleep(5000);}catch{}

80.   消耗时间的------放在子线程中

81.   可以直接在子线程中运行UI的特例

runOnUiThread(new Runnable(){public void run(){}}


82.   listview的滚动事件

83.   listview数据太多时使用分批显示,如果更多就使用分页显示

84.   在代码中设置的宽高值都是像素px,不能适配各种手机

85.   带checkbox的item点击事件,checkbox会抢走焦点,见博客

86.   adapter.notifyDataSetChanged();-------------通知适配器数据改变了

87.   当集合在迭代的时候。不能修改集合的大小

88.   尽量使用9.path格式的图片,可以拉伸

89.  

            timer = new Timer();//初始化一个定时任务timerTask = new TimerTask() {@Overridepublic void run() {


90.   如果是在服务里面往activity界面跳的话。需要设置flag

91.   暴露接口给对方

A.

    private OnToggleStateChangeListner listner;public void setOnToggleStateChangeListener(OnToggleStateChangeListner listner){this.listner = listner;}//暴露数据给用户public interface OnToggleStateChangeListner{void onToggleStateChange(ToggleState state);}   //暴露state


B.

      toggleButton.setOnToggleStateChangeListener(new OnToggleStateChangeListner() {@Overridepublic void onToggleStateChange(ToggleState state) {Toast.makeText(MainActivity.this, state==ToggleState.Open?"开启":"关闭", 0).show();}});


92.   state==ToggleState.Open?"开启":"关闭"

93.   布局覆盖Res…Layout

94.  

 /** * 获取当前系统时间,并格式化 * @return */private String getCurrentTime(){SimpleDateFormat format = new SimpleDateFormat("yy-MM-dd HH:mm:ss");return format.format(new Date());}


95.   setSelection(position);将对应位置的item放置到屏幕顶端

96.   展示性图片没必要用一个ImageView来封装

         <TextView             style="@style/MenuTabText"            android:background="#33aa9900"            android:drawableLeft="@drawable/tab_news"android:drawpadding="15dp"            android:text="新闻"/>


97.   抽取样式

<style name="MenuTabText">        <item name="android:layout_width">match_parent</item>        <item name="android:layout_height">wrap_content</item>        <item name="android:textColor">#ffffff</item>        <item name="android:gravity">center_vertical</item>        <item name="android:drawablePadding">15dp</item>        <item name="android:padding">15dp</item>        <item name="android:textSize">22sp</item>            </style>


98.   单个Activity去掉标题栏   requestWindowFeature(Window.FEATURE_NO_TITLE);

99.   无标题样式      android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

100.    setBackgroundResource的参数为资源ID,比如说R.drawable.icon

101.  

    // 表示事件是否拦截, 返回false表示不拦截@Overridepublic boolean onInterceptTouchEvent(MotionEvent arg0) {return false;}/** * 重写onTouchEvent事件,什么都不用做 */@Overridepublic boolean onTouchEvent(MotionEvent arg0) {return false;}


102.   可以滑动的页面一般为ViewPager

103.   使用开源框架的代码是效果不一样   可能activity的样式不同,改变样式,如果背景为黑色,可以手动改变activity的背景

104.   查看系统样式,改变系统属性

105.   android:drawable="@android:color/transparent"      透明颜色

106.   button控件不要背景,设为透明

107.  

    // ViewPager跳转下一个页面@OnClick(R.id.btn_next)public void nextPage(View view) {int currentItem = mViewPager.getCurrentItem();mViewPager.setCurrentItem(++currentItem);}


108.   ViewPager中请求父控件和祖宗控件不要拦截触摸事件

//事件分发,请求父控件及祖宗控件不要拦截事件public boolean dispatchTouchEvent(MotionEvent ev){   getParent().requestDisallowInterceptTouchEvent(true);   return super.dispatchTouchEvent(ev);}

 

109.  

<span style="font-size:14px;">ImageView image = new ImageView(mActivity); image.setScaleType(ScaleType.FIT_XY);// 基于控件大小填充图片</span>


110.   ImageView: 使图片撑大成imageview的大小

          Imageview写死大小

          android:scaleType="fitXY"

111.   android:cacheColorHint="#fff"    缓存时listview的颜色

112.   一个ListView可以加多个HeadView,最先添加的在最上面

113.   下拉刷新头部用LinearLayout,其他的可能会出问题

114.   改变进度条的背景图案

<ProgressBar            android:id="@+id/pb_progress"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:indeterminateDrawable="@drawable/custom_progress"            android:visibility="invisible" />


115.   android:cacheColorHint="#fff"     //点击item时的颜色

          android:divider="@null"           //去掉listview分割线

116.   Android 文档镜像   http://wear.techbrood.com

117.   <!-- 凡是以layout开头的属性 其实都是经过父容器批准才能生效  因为在listView 中 layout_height 无论写什么熟悉 都是包裹 内 容 -->

118.   ListView  

          //            setSelector 点击显示的颜色

         //            setCacheColorHint 拖拽的颜色

        //            setDivider  每个条目的间隔       的分割线

119.    background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。src是图片内容(前         景),bg是背景,可以同时使用

120.   动手之前,分析界面,抽取共性    -------------先分析

121.  

android:layout_height="0dp" android:layout_weight="1"


122.   用FramLayout填充,然后动态添加布局

123.   记得实例化:       list=newArrayList<BasePager>();

124.    ListView item点击效果android:listSelector="@android:color/transparent"

125.    ListView去掉分割线:android:divider="@android:color/transparent"

126.    使按钮不能点击:android:enabled="false"

127.    initView()  &   initData()   尽量分离,加载数据时会消耗资源,应在适当的位置调用

128.    android:background="@android:color/transparent"

129.    ViewPager事件分发

    /** * 事件分发, 请求父控件及祖宗控件是否拦截事件 */@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (getCurrentItem() != 0) {getParent().requestDisallowInterceptTouchEvent(true);// 用getParent去请求,// 不拦截} else {// 如果是第一个页面,需要显示侧边栏, 请求父控件拦截getParent().requestDisallowInterceptTouchEvent(false);// 拦截}return super.dispatchTouchEvent(ev);}


130.   listView滑动时出现黑色:android:cacheColorHint="#fff"

131.   睡一会SystemClock.sleep(2000);    //不能在主线程中用

132.   请求服务器 在子线程中执行,但改变界面需要在主线程中执行,所以使用

runOnUiThreadnew Thread() {public void run() {SystemClock.sleep(2000);final LoadResult result = load();if (getActivity() != null) {getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {if (result != null) {state = result.getValue();showPage(); // 状态改变了,重新判断当前应该显示哪个界面}}});}};}.start();


133.    在子线程中改变界面

new Thread() {public void run() {SystemClock.sleep(2000);final LoadResult result = load();if (getActivity() != null) {getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {if (result != null) {state = result.getValue();showPage(); // 状态改变了,重新判断当前应该显示哪个界面}}});}};}.start();


134.   代码习惯,封装成方法

135.   布局老是在改变,用FramLayout代替,后期动态添加view

136.   点击listview某个item时,保持不变,状态选择器

<span style="font-size:14px;"><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_enabled="true" android:color="#f00"/>    <item android:color="@android:color/white"/></selector></span>


137.   定义第一个fragment时获取getActivity----对应的activity对象

     并标记对应的fragment

transaction.replace(R.id.fl_left_menu, new LeftMenuFragment(),FRAGMENT_LEFT_MENU);// 用fragment替换framelayouttransaction.replace(R.id.fl_content, new ContentFragment(),FRAGMENT_CONTENT); //通过activity对象的传递,可以在不同fragment中传递数据,中枢纽带为该Activity //通过标记获得对应fragment // 获取主页面fragmentpublic ContentFragment getContentFragment() {FragmentManager fm = getSupportFragmentManager();ContentFragment fragment = (ContentFragment) fm.findFragmentByTag(FRAGMENT_CONTENT);return fragment;}


138.  

 /*** 获取当前系统时间,并格式化*@return*/private String getCurrentTime(){SimpleDateFormat format = newSimpleDateFormat("yy-MM-dd HH:mm:ss");return format.format(new Date());}


139.  枚举

/** 枚举*/public enum ToggleState{Open,Close} private ToggleState toggleState = ToggleState.Open;//开关的状态


140.   假如listview的item中有Button,ImageButton,CheckBox等会强制获取焦点的view
          此时,listview的item无法获取焦点,从而无法被点击
          解决方法:给item的根布局增加以下属性
          android:descendantFocusability="blocksDescendants"
         设置之后,Button获取焦点,item中其他控件也可以获取焦点

141.   权重为一

android:layout_width="0dp"android:layout_weight="1"


142.   动态创建一个Listview或其他,不用布局,常用于简单的使用

listView = new ListView(this);


143.   代码习惯

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initView();initListener();

144.   手机本地地址:http://127.0.0.1

145.   解决工程部分类乱码方法,编码不一致  谷歌应用市场

146.   判断json文件是否过期
  (1)MD5比对  加密后的文件与服务器发来的文件加密后对比
  (2)在json文件第一行写一个过期时间,对比

147.   上下文context

public static Context getContext(){return BaseApplication.getApplication();}


148.   查看系统控件的样式    D:\安卓\adt-bundle-windows-x86-20131030\sdk\platforms\android-      19\data\res\values

149.   ListView ----透明图片
 //               setSelector  点击显示的颜色
//  setCacheColorHint  拖拽的颜色
//  setDivider  每个条目的间隔 的分割线

150.   Drawable drawable =getResources().getDrawable(R.drawable.ic_launcher);

160.   UiUtils

161.   不能在子线程中改变UI

                                     public void run() {UserProtocol protocol=new UserProtocol();final UserInfo load = protocol.load(0);Uiutils.runOnUiThread(new Runnable() {@Overridepublic void run() {setData(load); // 当调用该方法的时候  就会调用refreshView}});}


162.   在代码中设置字体大小为dp,指定单位

textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);//设置字体大小14dp

163.   mListView.setOverScrollMode(View.OVER_SCROLL_NEVER);//去掉拉倒最顶时的蓝边

164.   mImage.getLayoutParams().height = newHeight;//改变控件的宽高
165.   UiUtils获得单例的吐司--------------*****

public static Toast mToast;public static void showToast(Context mContext, String msg) {if (mToast == null) {mToast = Toast.makeText(mContext, "", Toast.LENGTH_SHORT);}mToast.setText(msg);mToast.show();}


166.   与jar包代码关联--------侧拉删除

 

 

 

1.提升自己

1. 有很好的`开源意识`,`开放平台`思想
2. Libraries for developersV3.39`:众多开源效果集合-->国外-->只是提供了地址
3. android开源项目汇总`:众多开源效果集合-->国人-->只是提供了地址
4. baseAnimation`:众多开源效果-->针对动画效果-->国人-->开源的.需要效果的时候.要自行去找对应的代码
5. http://www.23code.com/`-->开源项目集合网站
6. http://a.code4app.com/`-->开源项目集合网站
7. 一些demo的集合-->5000
8. 深度理解`,`广度知道`

2.快速开发型框架

1.6个值得推荐的Android开源框架简介:http://www.open-open.com/lib/view/open1404894803482.html

 

 

 167.环境变量的配置:http://blog.sina.com.cn/s/blog_9d52aeaf01013npe.html

0 0
原创粉丝点击