1. 获取状态栏高度:
/**
     * 
     * @return 状态栏高度
     */
    public static int getStatusBarHeight() {
         return Resources.getSystem().getDimensionPixelSize(Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android"));
    }

2.px转dp

/**
     * px to dip
     * 
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

3.dp转px

/**
     * dip to px
     * 
     * @param context
     * @param dpValue
     * @return
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

4.获取sd卡路径

/**
     * 获取sd卡路径
     * @param mContext
     * @return
     */
    public static File getFileDir(Context mContext) {
        File cacheDir = null;

        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            cacheDir = mContext.getExternalFilesDir(null);
        } else {
            cacheDir = mContext.getFilesDir();

        }
        return cacheDir;
    }

5.获取文件夹路径(不存在则创建)

/**
     * 
     * @param mContext
     * @param filename
     * @param forlderName
     * @return 文件夹路径
     */
    public static String makeFilePath(Context mContext, String forlderName) {
        File cacheDir = new File(getFileDir(mContext), forlderName);
        if (!cacheDir.exists()) {
            cacheDir.mkdirs();
        }
        return cacheDir.getPath();
    }

6.读取文件中的文本内容

try {
    // 获取到了文件
    FileInputStream fileInputStream = new FileInputStream(getFilesDir().getAbsolutePath() + "/apps.txt");
    byte[] b = new byte[fileInputStream.available()];
    fileInputStream.read(b);
    String allInfos = new String(b);
    Toast.makeText(this, allInfos, 0).show();
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

}

7.得到屏幕宽度

/**
     * 
     * @return 屏幕宽度(单位:px)
     */
    public static int getScreenWidth(Activity mActivity) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        mActivity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        return displayMetrics.widthPixels;
    }

8.得到屏幕高度

/**
     * 
     * @return 屏幕高度(单位:px)
     */
    public static int getScreenHeight(Activity mActivity) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        mActivity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        return displayMetrics.heightPixels;
    }

9.将字符串存到文件

/**
     * 将要备份的应用信息存放在文件里
     * @param info 要备份的应用信息
     */
    public static void saveAllInfos(Activity mActivity, String info) {
        if (info != null) {
            try {
                FileOutputStream outStream = mActivity.openFileOutput(Constant.NAME_BACKED_APPS, Context.MODE_PRIVATE);
                outStream.write(info.getBytes());
                outStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

10.日期相关

public class DateUtils {

    public static String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";

    public static String FORMAT_CHINESE_MM_DD="MM月dd日";

    public static String fORMAT_YYYY_MM_DD_HH_MM_SS="yyyy/MM/dd HH:mm:ss";

    public static String FORMAT_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";

    /**
     * 将日期字符串转换为日期
     * 
     * @param sourceDate
     *            :待转换的日期字符串
     * @param fomart
     *            :日期字符串的格式
     * @return
     */
    public static Date convertToDate(String sourceDate, String fomart) {
        Date targetDate;
        try {
            targetDate = (new SimpleDateFormat(fomart)).parse(sourceDate);
        } catch (ParseException e) {
            targetDate = new Date();
        }
        return targetDate;
    }

    /**
     * 将日期转换为指定格式字符串
     * 
     * @param sourceDate
     *            :待转换的日期
     * @param fomart
     *            :日期字符串的格式
     * @return
     */
    public static String toString(Date sourceDate, String fomart){
        return (new SimpleDateFormat(fomart)).format(sourceDate);
    }

    /**
     * 将日期字符串转换为指定格式字符串
     * 
     * @param sourceDate
     *            :待转换的日期
     * @param sourceFomart
     *            :待转换日期的格式        
     * @param fomart
     *            :转换后日期字符串的格式
     * @return
     */
    public static String toString(String sourceDate,String sourceFomart, String fomart){
        Date tempDate=DateUtils.convertToDate(sourceDate, sourceFomart);
        return (new SimpleDateFormat(fomart)).format(tempDate);
    }

    public static String getCurrentTime(String format) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
        String currentTime = sdf.format(date);
        return currentTime;
    }

    /**
     * 
     * @return 当前时间
     */
    public static String getCurrentTime() {
        return getCurrentTime(DateUtils.fORMAT_YYYY_MM_DD_HH_MM_SS);
    }
}

11.获取手机IMEI

String imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId();

12.获取剩余容量和总容量:

/**
     * @return SD卡剩余容量
     */
    public static long getAvailableSDSize(){
        //取得SD卡文件路径
        File path = Environment.getExternalStorageDirectory(); 
        StatFs sf = new StatFs(path.getPath()); 
        //获取单个数据块的大小(Byte)
        long blockSize = sf.getBlockSize(); 
        //空闲的数据块的数量
        long freeBlocks = sf.getAvailableBlocks();
        //返回SD卡空闲大小(MB)
        return (freeBlocks * blockSize) >> 20;
    }

    /**
     * 获取SD卡总容量
     * @return
     */
    public static long getSDSize(){
        File path = Environment.getExternalStorageDirectory(); 
        StatFs stat = new StatFs(path.getPath()); 
        long blockSize = stat.getBlockSize(); 
        long availableBlocks = stat.getBlockCount();
        return availableBlocks * blockSize; 
    }

    /**
     * 获取剩余磁盘空间(单位:MB)
     * @return
     */
    public static long getAvailableDiskSize() {
        File root = Environment.getRootDirectory();  
        StatFs sf = new StatFs(root.getPath());  
        long blockSize = sf.getBlockSize();  
        long availCount = sf.getAvailableBlocks();  
        return (availCount * blockSize) >> 20;
    }

13.ScrollView嵌套ListView获取ListView总高度:

comments.addAll(JsonHelper.convertList(JsonHelper.tojson(response.getResult()), PostComment.class));
adapter.setComments(comments);
int listViewHeight = 0;
if(listView.getLayoutParams() != null) {
    for (int i = 0, count = adapter.getCount(); i < count; i++) {
        View listItem = adapter.getView(i, null, listView);
        listItem.measure(0, 0);
        listViewHeight += listItem.getMeasuredHeight();
    }
    listView.getLayoutParams().height = listViewHeight;
    listView.setLayoutParams(listView.getLayoutParams());
    listView.requestLayout();
}

14.判断ListView的内容向上飞还是向下飞

listView.getRefreshableView().setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        final ListView lw = listView.getRefreshableView();
        if(scrollState == 0) {
            final int currentFirstVisibleItem = lw.getFirstVisiblePosition();
            if (currentFirstVisibleItem > mLastFirstVisibleItem) {
                Log.i("a", "文字向上飞");
                ObjectAnimator.ofFloat(ll_article_detail_bottom, "translationY", toolBarBotom, toolBarBotom + toolBarHeight).setDuration(1000).start();
            } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
                Log.i("a", "文字向下飞");
                ObjectAnimator.ofFloat(ll_article_detail_bottom, "translationY", toolBarBotom + toolBarHeight, toolBarBotom).setDuration(1000).start();
            }
            mLastFirstVisibleItem = currentFirstVisibleItem;
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

    }
});

15.ScrollView要嵌套ListView: 推荐在一个listview里面做。把握好addHeaderView(view, null, false)跟addFooterView,足以应对了。

16.WebView在xml设置android:scrollbars=”none”不显示滚动条。

17.先发送登录api,后存jsession

18.Fragment的setUserVisibleHint方法类似于Activity的onResume

19.http的请求方式 get post put delete 分别对应 查 改 増 和 删。

20.继承了Application的类要在清单文件的application节点配好类名才会被调用。但是继承Application的类在清单文件配置的时候在一些集成开发环境ide要省略前面的点。

21.替换Fragment

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(android.R.id.content, PlaceHolderFragment.newInstance()).commit();

22.缓存也是存数据库

23.Fragment往子Fragment传参,子Fragment的私有变量提供set方法。

24.spinner使用:

adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, years); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

25.按钮边框:

<stroke
    android:width="1dp"
    android:color="@color/glh_grey_line"
    android:dashWidth="0dp"
    android:dashGap="2dp" />

26.AutoCompleteTextVIew

27.如果arraylist是null,则不能调用clear方法

28.wv_home_content.loadUrl(file:///android_asset/loading.html);

android 农历 转换 安卓农历小工具_安卓开发框架

29.从服务器传过来的json数据中,value如果是以数字开头的话,用jsonnode直接get会得到用双引号括起来的value,例如”1eabcd”,所以要想得到原来的值,应该调用substring函数将value前后的双引号去掉。

30.viewpager如果用同一个adapter图片无论如何都无法更新,就用另一个viewpager。

31.安卓版本比较android.os.Build.VERSION.SDK_INT >= 18

32.在子线程里setText不生效可能是子线程不能刷新界面,要刷新主界面。现在才知道是不能在子线程中操控控件。正确的做法应该是在子线程中发送消息给窗口。让界面线程自己管理界面。

33.写ActivityManager的目的是用于那些有“退出”按钮的应用,如果没有退出按钮,说明用户默许我们一步一步退出应用。

34.编译的时候没有错,运行的时候却报找不到类的错误,很可能是版本不支持。

35.获取WebView当前处理的url

public boolean shouldOverrideUrlLoading(WebView view, String url) {
     view.loadUrl(url);
     // 记住当前的URL
     currentLeftUrl = url;
     // 由当前的WebView处理跳转
     return true;
 }

36.设置全屏、没有标题:

super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  WindowManager.LayoutParams.FLAG_FULLSCREEN);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_loading);

37.拨打电话的时候报activitynotfoundexception,记得要把”tel:”加上:

Intent intent=new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + logisticsTelephone));
startActivity(intent);

38.ImageView展示本地图片:

ImageView imageView = new ImageView(mActivity);
// 展示本地图片
imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.logistics_default));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
images.add(imageView);
adapter.notifyDataSetChanged();

39.对话框

new AlertDialog.Builder(ReceivedGiftDetailActivity.this).setTitle(R.string.label_reject_gift).setMessage(R.string.msg_gift_rejected_confirm)
 .setPositiveButton(R.string.msg_more_version_yes, new DialogInterface.OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
 new DealGiftTask(REJECT_GIFT).execute();
 }
 }).setNegativeButton(R.string.msg_more_version_no, null).show();

40.本地图片Drawable转Bitmap

res= getResources();//activity的方法
BitmapFactory.decodeResource(res, id);//id = R.drawable.x

41.相对布局toRightOf 的时候No resource found 找不到id,是因为要将用到的id写在前面,或者无论何时都带@+

42.明明在xml中配置了activity,一切也正常,为什么还是报找不到activity的空指针异常?很有可能是清单文件的application的theme限定死了,而某些activity用到了getActionBar方法,结果为空,就找不到了。也有可能是activity.xml文件中context限定了。

43.三种方法得到实例化的layout的方法:

LayoutInflater inflater = getLayoutInflater();
LayoutInflater inflater = (LayoutInflater) layout
mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog,null);
LayoutInflater.from(mContext).inflate(R.layout.item_message_list, null);

44.TextView增加如下属性实现走马灯:

android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"

45.要想RadioButton在RadioGroup文字图片都居中,除了button为null之外,background也要null

android 农历 转换 安卓农历小工具_安卓开发框架_02

46.ImageButton加上android:background=”@null”可以去除边框

47.获取状态栏高度

public static int getStatusBarHeight() {
 return Resources.getSystem().getDimensionPixelSize(
 Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android"));
}

48.按钮setTag, Button可以set一个tag,然后在onClick事件里面v.getTag就可以得到相应的对象或字符串。

holder.checkGiftButton.setTag(myGift);
// 点击查看礼物
holder.checkGiftButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (v.getTag() instanceof MyGift) {
            MyGift myGift = (MyGift) v.getTag();
            Intent mIntent = new Intent();
            mIntent.putExtra("gift_id", myGift.getGift_id());
            mIntent.setClass(context,
            ReceivedGiftDetailActivity.class);
            context.startActivity(mIntent);
        }
    }
});

49.字符串插入变量值
tv_expired_time.setText(String.format(getString(R.string.label_expired_time), DateUtils.getCurrentTime()));

50.滑动开关

<com.woyoli.views.WiperSwitch
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="10dp" />

51.view也可以直接setTag

Holder holder = new Holder();
view.setTag(holder);
private static class ViewHolder {
    ImageView giftImage;
    TextView giftTitle;
    TextView giftNumber;
    Button checkGiftButton;
    Button shareButton;
    CircularImage userIcon;
    int position;
}

52.保证旋屏不会重走生命周期:

<activity
    android:name=".activity.ReceivedGiftDetailActivity"
    android:configChanges="screenSize|orientation|keyboardHidden|navigation"
    android:label="@string/app_name"
    android:screenOrientation="portrait" />

53.width或height要设为0dp权重才会忽略margin的space

54.由drawable的id得到drawable

allGiftButton.setBackground(getResources().getDrawable(R.drawable.button_my_gift_all_pressed));

55.要第二次进去头像才是圆的,这是因为有时候网络比较差,无法瞬间加载所有的图片,这时候就要在display的回调函数(callback)里面设置图片,以保证图片是已经缓冲好了。

56.LinearLayout是从上到下分配空间的,比如vertical的话,假如下部的控件的宽高都是match_parent,但是实际效果是除开上部分之外的其余空间。

57.只有文字用ArrayAdapter,有本地图片SimpleAdapter,有网络图片用BaseAdapter。

58.点击popupwindow之外其他地方隐藏popwindow:

neighborhoodWindow.setOutsideTouchable(true);
neighborhoodWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), Bitmap.createBitmap(dm.widthPixels, dm.heightPixels, Bitmap.Config.ALPHA_8)));

59.popupwindow在代码里加上popupwindow.setBackgroundDrawable(null);就可以去除边框,并且还保留原来的背景。

60.自定义Adapter在监听onItemClickListener的时候,总是被子控件拦截,干脆就用子控件来实现监听,而且子控件要match_parent。

61.FrameLayout解决layout点击事件被屏蔽:节点加上

android:descendantFocusability="blocksDescendants"

62.illness_TV.setTextColor(R.color.gray); 这个错了你这样用变成 颜色指是 R.color.gray指示的ID值了 应该是

illness_TV.setTextColor(this.getResources().getColor(R.color.gray));

63.左侧导航菜单,底部菜单,底部悬浮菜单,滑动菜单。

64.Android底部导航栏怎么做?ViewPager+RadioGroup+RadioButton+frament

65.有人说,不要用viewpager了,你可以用actionbar+Fragment实现。

66.Selector示例

<?xml version="1.0" encoding="utf-8"?> xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/checkbox_checked" android:state_checked="true"></item>
    <item android:drawable="@drawable/checkbox_checked" android:state_selected="true"></item>
    <item android:drawable="@drawable/checkbox_checked" android:state_pressed="true"></item>
    <item android:drawable="@drawable/checkbox_unchecked"></item>
</selector> selector>

67.CheckBox示例:

<CheckBox
    CheckBoxandroid:id="@+id/cb_agreeRegister"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:button="@null"
    android:checked="true"
    android:drawablePadding="5dp"
    android:drawableLeft="@drawable/selector_customed_checkbox" />

68.RelativeLayout中Button靠底部对齐,然后清单文件中设置activity为android:windowSoftInputMode=”adjustPan”就可以实现按钮总在软键盘上方

69.友盟既有统计又有推送:
先master后secret

<meta-datameta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="ivufpvhp8bh51tsntazsgjyotwhg5ppn" >
</meta-data>
<meta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="9fe0a415186f4e813d694970ffa04fc4" >
</meta-data>

70.Fragment嵌套问题在fragment里还有fragment的话,里面要用getChildFragmentManager()来获取fragmentManager

71.去掉EditText的下划线:

android:background="@null"

72.查看安卓系统是否支持ble

PackageManager pm = getPackageManager();
boolean isBT = pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
boolean isBLE = pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);

73.如果Activity继承了BaseActivity,只让父类接管onBackPressed,那么iv_back.setOnClickListener(new OnClickListener…),不能是this

74.出现onItemClickListener不能响应,原因可能有多种,本人总结了有两种情况,一种是isEnable中返回值为false导致不能点击和选择,一种是因为item中有了checkable或者button类(子类)控件导致了item的焦点失去,从不能响应。

75.将listview的分隔线去掉:

listview.setDividerHeight(0);

76.intentFeedback.putExtra(Constant.LOAD_URL_KEY, moreInfo.getFollow());

77.listview的adapter往下滚再往上滚UI会刷新(变化),可能因为switch没有处理好所有的情况,要处理所有情况并在default做一些默认的操作。

78.透明颜色:#000000
帧布局、PopupWindow(是一个widget,也可以理解为一个ViewGroup,可以放各种布局、控件)、ListPopupWindow

79.不同的xml文件可以有相同的id

80.最小和最大高度一样就是准确的高度了。

81.
ViewStub
FragmentTabs

82.在其他地方开发的Android项目,不自动编译,在清单文件更改了安卓最高版本,更改了编码格式为UTF-8,还是不行,这时候右键project,properties,Java build path,order and export,把本机的android sdk版本勾选上即可。有时候还要更改java jdk版本号。

83.当前变量获得焦点,其他地方没有变暗,默认的java视图下,在工具栏上应该会有一个Toggle Mark Occurency的按钮,选中就可以了。

84.string.xml中:
UI的:label_开头
消息的:msg_开头

85.android:id=”@+id/btn”,表示在R.java文件里面新增一个id为btn的控件索引,最常用的一种声明控件id的方式。android:id=”@android:id/tabhost”,表示引用的是系统已有的ID,在对应的sdk目录下的ids.xml里面。一般外部不去调用,是组件内部调用的时候使用。.android:id=”@id/btn” ,表示引用一个已经存在的ID,在R.java里面的,比如我们自己建了一个ids.xml,里面声明了一组id,其中一个是btn,那么你就可以这样引用了。

86.T 后面要用的话 必须都是 T? 后面要用 就不会有限制但是对于泛型本身而言。没有啥本质区别。

87.你在Xx类里定义了一个带参数的构造方法,那么这个Xx类就没有无参数的构造方法了。 子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了。 你如果在父类中写个不带参数的构造方法,就可以不用实现父类的带参构造方法了。
如果父类的构造函数无参,子类的构造函数可以有参也可以无参,但是子类有参的时候要调用父类的构造函数;如果父类的构造函数有参,那么子类的构造函数一定要有参。

88.一个类里面有另外一个类的对象,叫做聚合。

89.全屏:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

90.四张在线图片:
http://url.cn/XhlEfM
http://url.cn/UZz9Hy
http://url.cn/dPqnyF
http://url.cn/Z0Er2u

91.想在ViewPager切换的时候不刷新WebView,就设置缓存页数为Tab的总页数就行了。试试viewPager.setOffscreenPageLimit(3); 这个是设置viewPager的缓存页数

92.webview不能直接设高度
把你这个webview放到一个layout中,如LinearLayout (在你xml中定义)。 LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(w, l); ll.setLayoutParams(lp); ll.addView(webview); 就可以了

93.测量组件高度

RadioGroup mRadioGroup = (RadioGroup) mActivity.findViewById(R.id.rg_bottom);
mRadioGroup.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
bottomTabHeight = mRadioGroup.getMeasuredHeight();

94.要想TextView有按下效果,必须设置

android:clickable="true"

95.要想把包裹内容的栏放在底部,其余为一个整体在上面除了用帧布局的话,相对布局可能就要计算高度然后为内容设定高度了。

96.其实,在res文件夹下添加资源会在R文件中添加该资源的引用,如果该资源没有被使用到,也一样会把该资源打包进安装程序中。

97.最有效的:先导入附加的library,再导入目标项目,然后右击项目,property,安卓版本要对应,最主要的是add library里把附加的library添加进来。可能要在AndroidManifest.xml中修改最低版本号

98.PS:右击图层,转换为智能对象,编辑对象,就可以保存图片。

99.每次打开一个Activity都要add一下,虽然在点击后退的时候finish掉了,但是退出整个程序的时候还是要遍历fininsh掉。

100.有退出按钮:
1.记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
2.发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
3.递归退出:在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。为了编程方便,最好定义一个Activity基类,处理这些共通问题,也就是第一种。

101.获取控件高度:

toolBarHeight = getApplicationContext().getResources().getDimensionPixelSize(R.dimen.button_height);

102.安卓获取SD卡路径

String path = android.os.Environment.getExternalStorageDirectory().getPath().toString() + "/IMNG";

103.调用浏览器下载

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlStr));

104.xutils下载文件

public void downloadPDF(){
        String url ="http://url.cn/XhlEfM";
        HttpUtils http = new HttpUtils();
        http.download(url, PDFPath, true, true, new RequestCallBack<File>() {

        @Override
            public void onStart() {

            }

             @Override
            public void onLoading(long total, long current, boolean isUploading) {

            }

             @Override
             public void onFailure(HttpException error, String msg) {
                   //tvInfo.setText(msg);
                 Toast.makeText(TopicArticleDetailActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
              }

            @Override
            public void onSuccess(ResponseInfo<File> responseInfo) {
                // TODO Auto-generated method stub
                //responseInfo.result.getPath());
                responseInfo.result.getAbsoluteFile();
                Toast.makeText(TopicArticleDetailActivity.this, "下载完成", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent("android.intent.action.VIEW"); 
                intent.addCategory("android.intent.category.DEFAULT"); 
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                Uri uri = Uri.fromFile(responseInfo.result.getAbsoluteFile()); 
                // 测试的是图片,到时候用intent.setDataAndType(uri, "application/pdf");代替
                intent.setDataAndType(uri, "image/*"); 
                TopicArticleDetailActivity.this.startActivity(intent);
            }
        });
    }

105.已合并

106.打开WiFi设置:

Intent mIntent = new Intent("/");
ComponentName comp = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");
mIntent.setComponent(comp);
mIntent.setAction("android.intent.action.VIEW");
startActivity(mIntent);

107.查看有无网络以及网络类型:

package com.ics.aop.tool;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class HttpTool {

    /**
     * 判断是否有网络
     * @param context
     * @return
     */
    public static boolean isNetworkConnected(Context context) {  
        if (context != null) {  
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context  
                    .getSystemService(Context.CONNECTIVITY_SERVICE);  
            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();  
            if (mNetworkInfo != null) {
                return mNetworkInfo.isAvailable();  
            }  
        }  
        return false;  
    }

    /**
     * 判断网络是否WiFi
     * @param context
     * @return
     */
    public static boolean isWiFiConnected(Context context) {  
        if (context != null) {  
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context  
                    .getSystemService(Context.CONNECTIVITY_SERVICE);  
            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();  
            if (mNetworkInfo != null) {
                return (mNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI);  
            }  
        }  
        return false;  
    }

    /**
     * 判断网络是否移动网络
     * @param context
     * @return
     */
    public static boolean isMobileConnected(Context context) {  
        if (context != null) {  
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context  
                    .getSystemService(Context.CONNECTIVITY_SERVICE);  
            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();  
            if (mNetworkInfo != null) {
                return (mNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE);  
            }  
        }  
        return false;  
    }
}

108.要想在Android Studio使用HttpClient,需要在app的gradle文件中添加

android { 
 useLibrary ‘org.apache.http.legacy’ 
 }


其实推荐使用HttpURLConnection

109.直接在布局里使用android:background=”白色”和android:background=”normal为白色的selector”效果不一样,使用selector的很白,而直接使用白色的,却有灰度,这应该是手机的bug。
110.// 得到当前view的ViewGroup,可以在已经setContentView了的view的ViewGroup里添加剩余部分

ViewGroup mContent = (ViewGroup) findViewById(BaseView.getResId(mApplication, BaseView.ID, "base_content"));
        mContent.addView(mView);

111.获取每一个文字的宽度(像素)

String ss = "请将一维码或二维码放入框内,即可自动扫描";
        float[] array = new float[ss.length()];
        new Paint().getTextWidths(ss, array);
        //array里面装的就是每一个文字的宽度了

112.APP相关

/**
     * 根据包名启动apk
     *
     * @param packagename
     */
    public static void openAppByPackageName(Context context, String packagename) {
        PackageInfo packageinfo = null;
        try {
            packageinfo = context.getPackageManager().getPackageInfo(packagename, 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if (packageinfo == null) {
            return;
        }
        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        resolveIntent.setPackage(packageinfo.packageName);
        List<ResolveInfo> resolveinfoList = context.getPackageManager()
                .queryIntentActivities(resolveIntent, 0);

        ResolveInfo resolveinfo = resolveinfoList.iterator().next();
        if (resolveinfo != null) {
            String packageName = resolveinfo.activityInfo.packageName;
            String className = resolveinfo.activityInfo.name;
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            ComponentName cn = new ComponentName(packageName, className);
            intent.setComponent(cn);
            // 把数据传递到SDK
            Bundle bundle = new Bundle();
            bundle.putString("uid", ConstantUtil.UID);
            bundle.putString("nickname", ConstantUtil.INFOENTITY.getNickname());
            bundle.putString("head", ConstantUtil.INFOENTITY.getIcon());
            bundle.putString("token", ConstantUtil.TOKEN);
            intent.putExtras(bundle);
            context.startActivity(intent);
        }
    }