最近基于项目需要,在自学安卓,学习和项目实践过程中遇到的了一些问题,解决问题后作下记录。
监听抽屉的打开关闭事件
(1)mDrawLayout.setDrawerListener(DrawerLayout.DrawerListener)
(2)ActionBarDrawerToggle是DrawerLayout.DrawerListener的具体实现类改变android.R.id.home图标(构造方法) Drawer拉出、隐藏,带有android.R.id.home动画效果(syncState()) 监听Drawer拉出、隐藏事件
(3)覆写ActionBarDrawerToggle的onDrawerOpen()和onDrawerClose()以监听抽屉拉出或隐藏事件
(4)覆写Activity的onPostCreate()和onConfigurationChanged()方法startScroll (int startX, int startY, int dx, int dy)以提供的起始点和将要滑动的距离开始滚动。滚动会使用缺省值250ms作为持续时间。
startX 表示起点在水平方向到原点的距离(可以理解为X轴坐标,但与X轴相反),正值表示在原点左边,负值表示在原点右边。
dx 表示滑动的距离,正值向左滑,负值向右滑。dy类似,与现实所想相反(奇葩呀),需要注意。隐藏标题栏:Activity的onCreate()中,于setContentView()之前执行。
1234567requestWindowFeature(Window.FEATURE_NO_TITLE);```4. 隐式Intent 可以指定一些协议,如:http,显示地理位置的geo,拨打电话的tel.其setData 方法指定操作数据,如打开拔号界面:```javaIntent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("tel:10086"));onSaveInstanceState(Bundle bundle) 方法保存临时数据.
对于返回数据给上一个活动,上一个活动中通过startActivityForResult(intent)跳转到当前活动,并在上一个活动中的onActivityResult(int requestCode, int resultCode, Intent data)
方法中处理返回数据。当前活动可通过一个事件触发返回数据,也可在onBackPressed()方法中通过返回键返回数据。执行代码如下:1234Intent intent = new Intent();......setResult(RESULT_OK,intent);finish();启动模式
standard:每个启动都会创建该活动的一个实例。
singleTop:在启动活动时,如果发现返回栈(Back Stack)的栈顶已经是该活动,则直接使用此活动,不再创建其实例。
singleTask:每次启动该活动时,首先检查返回栈中是否存在该活动的实例,如果存在,则直接使用该实例,并把此活动之上的所有活动出栈, 如果没有才创建一个新的实例。
singleInstance: 启动一个新的返回栈。对于从一个活动到另一个活动传参问题。在另一活动最好定义一静态方法,名字如actionStart(),写明参数,使用时根据代码提示传入上下文和参数。
PreferenceActivity(Android 3.0以后应使用PreferenceFragment)中有三种常用的控件分别为:checkboxPreference、listPreference和edittextPreference。
TextUtils.isEmpty()方法可以判断字符串是否为空或空字符串。
SQLite新旧数据更替时,最好使用事务,确保没有数据丢失。
123456789db.beginTransaction();//开始一个事务try {...db.setTransactionSuccessful();//事务已经执行成功} catch (Exception e) {e.printStackTrace();} finally {db.endTransaction();//结束事务}keytool -v -list -keystore d:\tools\android\mykey.jks 通过签名文件获取SHA1值。
在线程里通过 runOnUiThread() 方法可回到主线程。
请求父控件及祖宗控件不要拦截事件
12345public boolean dispatchTouchEvent(MotionEvent ev) {getParent().requestDisallowInterceptTouchEvent(true);return super.dispatchTouchEvent(ev);}WebView 的一些设置
1234WebSettings = settings = mWebView.getSettings();settings.setJavaScriptEnabled(true);// 支持JS,默认是关闭JS功能的settings.setBuiltInZoomControls(true);//显示放大缩小按钮settings.setUseWideViewPort(true); //支持双击缩放使用LruCache可避免内存溢出的情况,(lru即最Least recently use),其会将内存控制在一定的大小之内,这个临界值由开发者自己定。
使用xUtils3的网络模块可下载文件
1234...params.setSaveFilePath(filePath); //传入文件路径x.http().get(params, new Callback.ProgressCallback<File>() //泛型一定为File时才能下载文件打开系统下载安装APK文件
1234Intent i = new Intent(Intent.ACTION_VIEW);i.addCategory(Intent.CATEGORY_DEFAULT);i.setDataAndType(Uri.fromFile(result),"application/vnd.android.package-archive");startActivityForResult(i, 0); //根据返回结果可作进一步操作禁止Checkbox的点击事件,设置父控件拦截的两种方法
布局设置属性如下,不知为何不管用
123android:clickable="false"android:focusable="false"android:focusableInTouchMode="false获取其实例后,设置如下
12cbStatus = (CheckBox) findViewById(R.id.cb_status);cbStatus.setClickable(false);
adb devices 可罗列出本地所有的设备
adb shell 进入真机或模拟器,shell前可加参数
-d Direct an adb command to the only attached USB device.
-e Direct an adb command to the only running emulator instance.设置界面之间跳转的动画
123456public void next(View view) {startActivity(new Intent(this, Setup2Activity.class));finish();//两者界面切换动画的设置overridePendingTransition(R.anim.next_in, R.anim.next_out); //进入和退出的动画}onClick多击事件的实现
1234567long[] mHits = new long[2]; //数组长度为点击的次数,长度2则为双击private void onDoubleHit( ) {System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);mHits[mHits.length-1] = SystemClock.uptimeMillis();if (mHits[0] >= SystemClock.uptimeMillis()-500) {...}Android 5.x中可用Palette提取颜色,从而让主题动态地适应当前页面的颜色,使用时需要添加依赖。
Imageview设置selector时,pressed的item要放在上面,默认的item要置于下面才会有点击的效果,否则看不到任何效果。