1、textview设置compoundDrawable的时候需要对设置的drawable资源设置bounds,否则不显示;
mDrawableLeft = getActivity().getResources().getDrawable(R.drawable.ic_classify_icon);
mDrawableLeft.setBounds(0, 0, mDrawableLeft.getMinimumWidth(), mDrawableLeft.getMinimumHeight());
tvClassfiy1.setCompoundDrawables(mDrawableLeft, null, mDrawableRigtup, null);
2、FragmentTabHost使用的时候,当realcontent在host下面的时候,tabhost的高度不能设定为固定值,否则realcontent显示不出来。
3、webview注入js
webView.loadUrl("http://www.m********ial");
webView.loadUrl("javascript:" + "var UID="+user.getId() +" ;");
webView.loadUrl("javascript:" + "alert( UID);");
4、webView修改跳转链接
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String mUrl =url+"?uid="+user.getId();
view.loadUrl(mUrl);
return true;
}
});
5、Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
dispatchTouchEvent是处理触摸事件分发,事件(多数情况)是从Activity的dispatchTouchEvent开始的。执行
super.dispatchTouchEvent(ev),事件向下分发。
onInterceptTouchEvent是ViewGroup提供的方法,默认返回false,返回true表示拦截。
onTouchEvent是View中提供的方法,ViewGroup也有这个方法,view中不提供onInterceptTouchEvent。view中默认返回true,表示消费了这个事件。
View里的onTouchEvent默认返回值是true,当我们手指点击屏幕时候,先调用ACTION_DOWN事件,当onTouchEvent里返回值是true的时候,onTouch会继续调用ACTION_UP事件,
如果onTouchEvent里返回值是false,那么onTouchEvent只会调用ACTION_DOWN而不调用ACTION_UP。
6、异常context启动activiity报错:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
解决办法:
Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是,加一个flag。
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
7.如果Activity的launchMode为singleTask、singleInstance,那么startActivityForResult将接收不到返回值,不走onActivityResult方法。
8、FragmentTabHost获取fragment实例,当前详细的fragment就是它自己,不用实例化;如:查找fragment的view直接findviewbyid
switch(mTabHost.getCurrentTab()){
case 0:{ //
TextView tv = (TextView)findViewById(R.id.tvLeftUpValue);
tv.setText(ds.getDataItemS("x00020001"));
}
}
9、sqlite数据库存储操作比较耗时,利用事务可以大大提高存储效率;
public static void insertAll(List<StructureEntity> items){
App.getDbHelper().getDb().beginTransaction();
for (StructureEntity structureEntity : items) {
insert(structureEntity);
}
App.getDbHelper().getDb().setTransactionSuccessful();
App.getDbHelper().getDb().endTransaction();
}
10.ScrollView和HorizentalScrollView滚动到顶部、底部、最左、最右;
private void scrollToRight(){
/**
* 需要注意的是,该方法不能直接被调用因为Android很多函数都是基于消息队列来同步,所以需要一部操作,
* addView完之后,不等于马上就会显示,而是在队列中等待处理,虽然很快,但是如果立即调用fullScroll,
* view可能还没有显示出来,所以会失败应该通过handler在新线程中更新
*/
Handler handler = new Handler();
handler.post(new Runnable() {
public void run() {
hScrollView.fullScroll(ScrollView.FOCUS_RIGHT);//最右
hScrollView.fullScroll(ScrollView.FOCUS_LEFT);//最左
hScrollView.fullScroll(ScrollView.FOCUS_DOWN);//底部
hScrollView.fullScroll(ScrollView.FOCUS_UP);//顶部
}
});
}
11、java实现selector
StateListDrawable stateListDrawable = new StateListDrawable();
//color转drawable
ColorDrawable drawable = new ColorDrawable(App.getColorID());
stateListDrawable.addState(new int[]{android.R.attr.state_checked},drawable);
stateListDrawable.addState(new int[]{0}, getResources().getDrawable(R.drawable.swich_right));
12、集合排序
- Collections.sort(mLeDevices, new Comparator<iBeacon>() {
- @Override
- public int compare(iBeacon h1, iBeacon h2) {
- return h2.rssi - h1.rssi; //h1-h2,升序,h2-h1降序
- }
- });
13、android,java代码只能字体大小
setTextSize(int unit, int size)
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
14、获取WebView当前页面的标题,可能通过对WebChromeClient.onReceivedTitle()方法的重写来实现
WebChromeClient wvcc = new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
Log.d("ANDROID_LAB", "TITLE=" + title);
txtTitle.setText("ReceivedTitle:" +title);
}
};
15、
调用android内置安装的浏览器来打开网页.
Uri uri = Uri.parse("http://google.com");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
16、view的touchListener中的event的getRawX()和getRawY()是以屏幕的最左上角开始算的值;
17、IO异常“ read failed: EBADF (Bad file descriptor)”,是因为process在直行脚本的过程中没有执行完成,被destroy()的导致的。
18、当运行一个命令的时候出现rm failed for CoeeRoat.apk, Read-only file system
解决办法:挂载设备 adb shell mount -o remount rw /system
19.RecyclerView子View宽度不能全屏的问题,在Adapter的onCreateViewHolder创建子view的时候要把parent传进去;
正确写法
LayoutInflater.from(context).inflate(R.layout.item_view,parent,false);
错误写法
LayoutInflater.from(context).inflate(R.layout.item_view,null);
20、EditText中imeOptions属性使用及设置无效解决
1 将singleLine设置为true
或者
2 将inputType设置为text
21、查看安装包的包名、启动activity信息等 用aapt工具。
22、webview如果height用wrap_content的话,html的div用的position的话高度为0,会看不到内容。
23、获取手机的物理尺寸
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); double x = Math.pow(dm.widthPixels/dm.xdpi,2); double y = Math.pow(dm.heightPixels/dm.ydpi,2); double screenInches = Math.sqrt(x+y);
24、