android 编程 应用代码
2015-02-27 15:23
120 查看
1:获取前台正在运行的程序名称,可以将下面代码放在activity生命周期的函数中执行,看看回打印什么。
获取前台的程序需要权限 ,要在AndroidManifest.xml文件中添加
2: 打印函数堆栈,对阅读源码非常有用。在你代码任何函数里放入以下代码,看看会打印什么。
3:在 ListFragment 中的 ListView ,设置 setEmptyView 的问题。
setEmptyView 函数的使用网上教程 通常都是在ListActivity 或 Activity 中onCreate函数中用,在ListFragment中,要获取ListView要在onActivityCreated函数或者onStart函数中调用getListView()来获取ListView,如果在 onCreate中调用getListView(),会得到错误 Caused
by: java.lang.IllegalStateException: Content view not yet created。
4: 创建Activity子类的时候,要先创建一个BaseActivity 继承自Activity 。然后咱要创建的Activity子类
再继承自BaseActivity,以后在这个工程里所有的Activity子类都继承自BaseActivity。目的是为了统一管理,修改一处代码,可以作用到所有的Activity,比如下面的代码,如果所有的Activity子类都继承自BaseActivity,那不管哪个Activity被创建,都会在logcat中打印出该Activity的名字,这样就知道当前界面是哪个Activity。
5:启动Activity的最佳写法
假设在A界面点击按钮启动B,一般写法
最佳写法是在B类中实现一个函数BStart
好处就是可以是Activity启动变简单,如果别人要启动B,能很方便的知道B需要哪些参数。
6.Android中的CookieManager
在Android应用程序中加载一个WebView页,有时需要客户端向WebView传递Cookie。
需要应用程序先将Cookie注入进去,打开该网页时,WebView会将加载的url通过http请求传输到服务器。同时,在这次请求中,会将Cookie信息通过http header传递过去。
流程如下:
1、客户端通过以下代码设置cookie
3、打开网页,WebView从数据库中读取该cookie值,放到http请求的头部,传递到服务器
4、客户端可以在注销登录时清除该应用程序用到的所有cookies
7.判断系统中是否安装了某些app或者Activity
1.根据包名判断应用是否存在
2.判断Activity是否存在
8.图片压缩 比例计算
inSampleSize 值的计算方法在源码sdk 的 ThumbnailUtils 里有一个私有函数 ,注释里说是为了避免OOM异常进行的对应处理,看着貌似很高级。
minSideLength :调整后图片最小的宽或高的值
maxNumOfPixels:调整后图片最大的内存值
9.获取window中的最顶层view
10.eclipse
粘贴字符串自动添加转义符
在偏好设置里 Preferences/Java/Editor/Typing/ "Escape text when pasting into a string literal"
11.给view设置圆角背景
12,values values-mhdpi values-hdpi values-xhdpi values-xxhdpi 读取顺序。
如果手机屏幕适配 values-hdpi ,某个值没有定义,在其他文件夹里定义了,那么读取顺序就是 values-hdpi -> values-xhdpi -> values-xxhdpi->values-mhdpi->values
只要读取到,就用这个文件夹下的值。layout也是一样的
13. ActionBar的溢出菜单 三个点 亮色和暗色的控制属性
<item name="android:actionOverflowButtonStyle">@android:style/Widget.Holo.Light.ActionButton.Overflow</item>
ActionBar 弹出菜单的高度控制属性
<item name="android:listPreferredItemHeightSmall">36dp</item>
弹出菜单即包含文字又包含图片需在onCreateOptionsMenu函数中调用
最后其他控制属性实在是不知道是啥,就不用style方式了,自己创建PopupWindow显示。
14.使用 Strict 模式以确保我们没有在主线程做某些不该做的事情(如耗时任务,网络访问等……)
获取前台的程序需要权限 ,要在AndroidManifest.xml文件中添加
<uses-permission android:name="android.permission.GET_TASKS" />
ActivityManager mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> tasksInfo = mActivityManager.getRunningTasks(1); if (tasksInfo.size() > 0) { KLog.d(TAG, "videoActivity " +tasksInfo.get(0).topActivity.getClassName() +" "+ tasksInfo.get(0).topActivity.getPackageName()); }
2: 打印函数堆栈,对阅读源码非常有用。在你代码任何函数里放入以下代码,看看会打印什么。
Thread.dumpStack();
3:在 ListFragment 中的 ListView ,设置 setEmptyView 的问题。
setEmptyView 函数的使用网上教程 通常都是在ListActivity 或 Activity 中onCreate函数中用,在ListFragment中,要获取ListView要在onActivityCreated函数或者onStart函数中调用getListView()来获取ListView,如果在 onCreate中调用getListView(),会得到错误 Caused
by: java.lang.IllegalStateException: Content view not yet created。
private TextView newEmptyView(String text) { TextView emptyView = new TextView(getActivity()); emptyView.setText(text); //将 emptyView 添加到 view 列表层。这里是容易忽略的地方 ((ViewGroup) getListView().getParent()).addView(emptyView); return emptyView; } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); getListView().setEmptyView(newEmptyView("我是空得")); }
4: 创建Activity子类的时候,要先创建一个BaseActivity 继承自Activity 。然后咱要创建的Activity子类
再继承自BaseActivity,以后在这个工程里所有的Activity子类都继承自BaseActivity。目的是为了统一管理,修改一处代码,可以作用到所有的Activity,比如下面的代码,如果所有的Activity子类都继承自BaseActivity,那不管哪个Activity被创建,都会在logcat中打印出该Activity的名字,这样就知道当前界面是哪个Activity。
public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("BaseActivity", getClass().getSimpleName()); } }
5:启动Activity的最佳写法
假设在A界面点击按钮启动B,一般写法
@Override public void onClick(View arg0) { Intent intent = new Intent(A.this, B.class); intent.putExtra("param1", "data1"); intent.putExtra("param2", "data2"); startActivity(intent); }
最佳写法是在B类中实现一个函数BStart
public class B extends BaseActivity { public static void BStart(Context context, String data1, String data2) { Intent intent = new Intent(context, B.class); intent.putExtra("param1", data1); intent.putExtra("param2", data2); context.startActivity(intent); } }然后在A类的点击后调用该方法
@Override public void onClick(View arg0) { B.BStart(A.this, "data1", "data2"); }
好处就是可以是Activity启动变简单,如果别人要启动B,能很方便的知道B需要哪些参数。
6.Android中的CookieManager
在Android应用程序中加载一个WebView页,有时需要客户端向WebView传递Cookie。
需要应用程序先将Cookie注入进去,打开该网页时,WebView会将加载的url通过http请求传输到服务器。同时,在这次请求中,会将Cookie信息通过http header传递过去。
流程如下:
1、客户端通过以下代码设置cookie
public static void synCookies(Context context, String url) { CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setCookie(url, "uid=1243432"); CookieSyncManager.getInstance().sync(); }2、CookieManager会将这个Cookie存入该应用程序/data/data/databases/目录下的webviewCookiesChromium.db数据库的cookies表中
3、打开网页,WebView从数据库中读取该cookie值,放到http请求的头部,传递到服务器
4、客户端可以在注销登录时清除该应用程序用到的所有cookies
private void removeCookie(Context context) { CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); CookieSyncManager.getInstance().sync(); }
7.判断系统中是否安装了某些app或者Activity
1.根据包名判断应用是否存在
public boolean checkApplication(String packageName) { if (packageName == null || "".equals(packageName)) { return false; } try { ApplicationInfo info = getActivity().getPackageManager().getApplicationInfo( packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return true; } catch (NameNotFoundException e) { return false; } }
2.判断Activity是否存在
Intent intent = new Intent(); intent.setClassName("包名", "类名"); if (getActivity().getPackageManager().resolveActivity(intent, 0) == null) { // 说明系统中不存在这个activity }
Intent intent = new Intent(); intent.setClassName("包名", "类名"); if (intent.resolveActivity(getActivity().getPackageManager()) == null) { // 说明系统中不存在这个activity }
8.图片压缩 比例计算
final BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = ?
inSampleSize 值的计算方法在源码sdk 的 ThumbnailUtils 里有一个私有函数 ,注释里说是为了避免OOM异常进行的对应处理,看着貌似很高级。
private static int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels)
minSideLength :调整后图片最小的宽或高的值
maxNumOfPixels:调整后图片最大的内存值
9.获取window中的最顶层view
FrameLayout view = (FrameLayout)getWindow().getDecorView();
10.eclipse
粘贴字符串自动添加转义符
在偏好设置里 Preferences/Java/Editor/Typing/ "Escape text when pasting into a string literal"
11.给view设置圆角背景
public static Drawable createShapeDrawable(int color, int radius) { GradientDrawable drawable = new GradientDrawable(); drawable.setColor(color); drawable.setCornerRadius(radius); return drawable; } Drawable drawable = createShapeDrawable(Color.parseColor("#5a80b0"),6); view.setBackground(drawable);
12,values values-mhdpi values-hdpi values-xhdpi values-xxhdpi 读取顺序。
如果手机屏幕适配 values-hdpi ,某个值没有定义,在其他文件夹里定义了,那么读取顺序就是 values-hdpi -> values-xhdpi -> values-xxhdpi->values-mhdpi->values
只要读取到,就用这个文件夹下的值。layout也是一样的
13. ActionBar的溢出菜单 三个点 亮色和暗色的控制属性
<item name="android:actionOverflowButtonStyle">@android:style/Widget.Holo.Light.ActionButton.Overflow</item>
ActionBar 弹出菜单的高度控制属性
<item name="android:listPreferredItemHeightSmall">36dp</item>
弹出菜单即包含文字又包含图片需在onCreateOptionsMenu函数中调用
/** * 利用反射让隐藏在Overflow中的MenuItem显示Icon图标 * @param menu * onMenuOpened方法中调用 */ private void setOverflowIconVisible( Menu menu) { if (menu != null) { if (menu.getClass().getSimpleName().equals("MenuBuilder")) { try { Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (Exception e) { } } } }
最后其他控制属性实在是不知道是啥,就不用style方式了,自己创建PopupWindow显示。
14.使用 Strict 模式以确保我们没有在主线程做某些不该做的事情(如耗时任务,网络访问等……)
if (BuildConfig.DEBUG) { StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectAll() .penaltyLog() .build()); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .penaltyDeathOnNetwork() .build()); }
相关文章推荐
- Android 手机应用开发经验 之Txt文本读写类源代码
- Android网络开发详解具体应用代码
- c# winform 应用编程代码总结 15
- Android应用.三星i9000系列(2).工程代码,网络锁与锁三键
- Android网络编程之WebKit应用 推荐
- Android下的应用编程——用HTTP协议实现文件上传功能
- Android编程14个很有用的代码片段
- c# winform 应用编程代码总结 13
- c# winform 应用编程代码总结 12
- 1android应用编程学习
- android应用客户端自动升级代码
- c# winform 应用编程代码总结 5
- c# winform 应用编程代码总结 4
- c# winform 应用编程代码总结 14
- c# winform 应用编程代码总结 9
- Android系列之Andorid传感器应用编程
- c# winform 应用编程代码总结 3
- c# winform 应用编程代码总结 7
- Android中Exif的操作以及Camera应用中相关代码优化方案
- Android编程15个很有用的代码片段