自学android 碰到的知识点总结 (第二版)

获取当前系统版本等级

Buidl.VERSION.SDK_INT

获取当前系统内存容量

File path = Enviroment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());

blockSize = stat.getBlockSizeLong();
totalBlocks = stat.getBlockCountLong();
availableBlocks = stat.getAvailablesBocksLong();

//在Manifest.xml 中配置测试框架

 <instrumentation 
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.itheima.day03_sqlite"
        ></instrumentation>
<uses-library android:name="android.test.runner"/>


## 常用快捷键 ##

- ctrl + shift + o 导包
- ctrl + shift + t 快速查找某个类
- 先按ctrl + 2 ,再点L, 创建变量并命名
- ctrl + o , 在当前类中,快速查找某个方法
- ctrl + k, 向下查找某个字符串
- ctrl + shift + k, 向上查找某个字符串
- alt + 左方向键 跳转上一个页面
-ctrl+shift+f, 代码格式化

禁用点击事件三连发:

android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false" <span style="line-height:1.5"><span style="font-family:Microsoft YaHei; font-size:12px"><br style="line-height:1.5" /></span></span>


android.text.TextUtils的类,主要的功能如下:

是否为空字符 boolean android.text.TextUtils.isEmpty(CharSequence str) 

拼接字符串 String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)

拆分字符串 String[] android.text.TextUtils.split(String text, String expression)

拆分字符串使用正则 String[] android.text.TextUtils.split(String text, Pattern pattern)

确定大小写是否有效在当前位置的文本 int android.text.TextUtils.getCapsMode(CharSequence cs, int off, int reqModes)

使用HTML编码这个字符串 String android.text.TextUtils.htmlEncode(String s)

另外,String[] android.text.TextUtils.split(String text, String expression)中的expression较特殊,如果采用TextUtils来分割someString的话返回的将是错误结果,正确的用法应该是TextUtilssplit


adapter.notifyDataSetChanged() //刷新页面
类似 (int flags) 对int flags 的 api描述是Additional option flags. 所有类似描述 我们都可以直接在android中传0就可以了


子线程不能刷新UI, 如果我们只是想弹出一个toast,可以通过一下来实现
public static void showToast(final Activity context, final String msg){		
if("main".equals(Thread.currentThread().getName())){
	Toast.makeText(context, msg, Toast.LENGTH_LONG).show();		
}else{			
context.runOnUiThread(new Runnable() {							
public void run() {Toast.makeText(context, msg, 1).show();				
	}});	}}}

 
活动管理器 (任务管理器)   
 
所有进程数据可以通过activitymanager 获取
<pre name="code" class="java">AcitivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);

 
包管理器 : 
 
<pre name="code" class="java">PackageManager packageManager = getPackageManager();

 
获取listview 点击的当前item对象 
 
<pre name="code" class="java">list_view.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//得到当前点击listview的对象
Object object = list_view.getItemAtPosition(position);
 if(object != null&& object instanceof TaskInfo){
TaskInfo taskInfo = (TaskInfo) object;
} } });


 
// 判断当前展示的item是否是自己的程序。如果是。就把程序给隐藏 
<pre name="code" class="java">if (taskInfo.getPackageName().equals(getPackageName())) {
// 隐藏 holder.tv_app_status.setVisibility(View.INVISIBLE); }
 else { // 显示 holder.tv_app_status.setVisibility(View.VISIBLE); }

 
//获取系统可用内存和总内存
availMem = SystemInfoUtils.getAvailMem(this); 
 totalMem = SystemInfoUtils.getTotalMem(this);
 
广播的生命周期只有10s, 所以不能执行耗时操作
*对于service 中要使用参数为context时, 可以用getApplicationContext()
*对于需要几张图片来叠加起来形成的效果, 可以只用FrameLayout, 注意先添加的图片在页面显示时候在下面, 后添加的在上面
<pre name="code" class="java">//service不能直接跳转到activity, 如果需要这种操作, 如要加
flag Intent intent = new Intent(WatchDogService.this,EnterPwdActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);

 
*在相对布局RelativeLayout 中居中使用 center_horizont="true" 在LinearLayout中居中使用 layout_gravity="center_horizontal" 
 
*PopupWindow等需要点击事件的时候, 发现点击没有用, 说明需要设置获取焦点:
//要让其中的view获取焦点, 必须设置为true,还必须设置一个背景图片 

<pre name="code" class="java">popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
//设置点击外部即消失 popupWindow.setOutsideTouchable(true);

 
 
 
关联jar包的源代码:1.先点击Android Dependencies,将它从BuildPath remove掉, 再右键点击jar包,将jar add to BuildPath; 然后就出现Attatch Source按钮了2.在libs目录下新建一个文件,文件名是jar包全名(包括后缀.jar),然后 该文件名以.properties结尾,新建一行键值对如: src=jar源代码绝对路径,(不要忘了将单斜线变成双斜线) ViewPager预加载机制:最多保存3个page,超过的将需要被销毁掉异常:类明明存在,却报class not found异常解决方法 右键工程,打开bulid path面板,选择Order And Export, 将对应jar打钩
下拉选择:     1.假如listview的item中有Button,ImageButton,CheckBox等会强制获取焦点的view  此时,listview的item无法获取焦点,从而无法被点击  解决方法:给item的根布局增加以下属性  android:descendantFocusability="blocksDescendants"  设置之后,Button获取焦点,item中其他控件也可以获取焦点   


滑动开关--------自定义控件步骤:测量:onMeasure  
设置自己显示在屏幕上的宽高布局:onLayout   
设置自己显示在屏幕上的位置(只有在自定义ViewGroup中才用到)绘制: onDraw     
控制显示在屏幕上的样子(自定义viewgroup时不需要这个) 
 View和ViewGroup的区别1.他们都需要进行测量操作2.ViewGroup主要是控制子view如何摆放,所以必须实现onLayout  View没有子view,所以不需要onLayout方法,但是必须实现onDraw
*requestWindowFeature(Window.FEATURE_NO_TITLE); //设置没有title

*menuView.getLayoutParams().width

*有时候需要获取到一些view的宽高之类的数据. 这时候可能view还没有成功测量, , 这时候需要我们设置一个listener来处理:
//获取视图树
llPointGroup.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
llPointGroup.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//获得小圆点之间的距离
int width = llPointGroup.getChildAt(1).getLeft()-llPointGroup.getChildAt(0).getLeft();
System.out.println("width: "+width);
}
});


*listview 滑动时候背景变成黑色, 想要设置这个颜色,在layout里面设置
android:cacheColorHint="#fff"

****设置listview一直focus在最下面, 
lvList.setSelection(mChatList.size() - 1); 

***如果ViewPager已经和ViewPagerIndicator绑定之后, 设置onpagechangelistener 这个滑动监听时候不能设置给viewpager, 必须设置给indicator

布局中处理标题之类的, 不想把所有问题都展示出来可以使用singleline或者maxLine, 同时使用ellipsize来用...省略没有展示的文字
<span style="font-family:Microsoft YaHei;font-size:12px;">android:maxLines="2"
android:ellipsize="end"</span>

设置下拉刷新, setpadding之前获取headerview高度
mHeaderView.measure(0,0);
int mHeaderViewHeight = mHeaderView.getMeasuredHeight();

把viewpager设置给viewpager Indicator以后, 为了给indicator设置title
		/**
		 * 重写此方法,返回页面标题,用于viewpagerIndicator的页签显示
		 */
		@Override
		public CharSequence getPageTitle(int position) {
			return mNewsTabData.get(position).title;
		}

android: layout_gravity控制该控件在其父类中的位置, android:gravity控制子控件在自身中的位置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值