private Long getStartTime(){
Calendar todayStart = Calendar.getInstance();
todayStart.set(Calendar.HOUR, 0);
todayStart.set(Calendar.MINUTE, 0);
todayStart.set(Calendar.SECOND, 0);
todayStart.set(Calendar.MILLISECOND, 0);
return todayStart.getTime().getTime();
}
private Long getEndTime(){
Calendar todayEnd = Calendar.getInstance();
todayEnd.set(Calendar.HOUR, 23);
todayEnd.set(Calendar.MINUTE, 59);
todayEnd.set(Calendar.SECOND, 59);
todayEnd.set(Calendar.MILLISECOND, 999);
return todayEnd.getTime().getTime();
}
之前看到一篇博客用于记录一些有用的代码片段,我觉得挺不错,刚好自己在开发过程中有很多有用的代码片段想找个地方积累起来方便以后使用(包括博客看到的,自己总结的),也希望大家一起分享。
private Long getStartTime(){
Calendar todayStart = Calendar.getInstance();
todayStart.set(Calendar.HOUR, 0);
todayStart.set(Calendar.MINUTE, 0);
todayStart.set(Calendar.SECOND, 0);
todayStart.set(Calendar.MILLISECOND, 0);
return todayStart.getTime().getTime();
}
private Long getEndTime(){
Calendar todayEnd = Calendar.getInstance();
todayEnd.set(Calendar.HOUR, 23);
todayEnd.set(Calendar.MINUTE, 59);
todayEnd.set(Calendar.SECOND, 59);
todayEnd.set(Calendar.MILLISECOND, 999);
return todayEnd.getTime().getTime();
}
1.判断是否联网
ConnectivityManager cManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cwjManager.getActiveNetworkInfo();
if (info != null && info.isAvailable()){
//do something
//能联网
return true;
}else{
//do something
//不能联网
return false;
}
同时要在manifest里面加个权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
2.动态获取ListView的高度
这个挺有用,在很多地方可以用的,之前项目用的很多,虽然是网上代码但是还是贴出来。
public static void setListViewHeight( ListView listView) {
ListAdapter listAdapter = listView .getAdapter ();
if ( listAdapter == null ) {
return;
}
int totalHeight = 0;
for ( int i = 0; i < listAdapter.getCount (); i ++) {
View listItem = listAdapter.getView (i , null, listView);
// listItem.measure(0, 0);
listItem. measure(
MeasureSpec.makeMeasureSpec (0 , MeasureSpec.UNSPECIFIED ),
MeasureSpec.makeMeasureSpec (0 , MeasureSpec.UNSPECIFIED ));
totalHeight += listItem .getMeasuredHeight ();
}
LayoutParams params = listView .getLayoutParams ();
params. height = totalHeight
+ ( listView. getDividerHeight() * (listAdapter.getCount () - 1 ));
listView. setLayoutParams(params );
}
3.键盘的弹出、隐藏、延时弹出
①弹出键盘
public static void showSoftInput( EditText edit) {
edit. setFocusable(true );
edit. setFocusableInTouchMode(true );
edit. requestFocus();
InputMethodManager imm = (InputMethodManager ) edit.getContext ()
. getSystemService(Context .INPUT_METHOD_SERVICE );
imm. showSoftInput(edit , InputMethodManager .RESULT_SHOWN );
}
②隐藏键盘
public static void hideSoftinput( EditText edit) {
InputMethodManager manager = (InputMethodManager ) edit.getContext ()
. getSystemService(Service .INPUT_METHOD_SERVICE );
if ( manager. isActive()) {
manager. hideSoftInputFromWindow(edit .getWindowToken (), 0);
}
}
③延时弹出键盘
public static void showSoftInput( final EditText edit , int time) {
edit. setFocusable(true );
edit. setFocusableInTouchMode(true );
edit. requestFocus();
Timer timer = new Timer();
timer. schedule( new TimerTask() {
public void run() {
InputMethodManager imm = (InputMethodManager ) edit.getContext ()
. getSystemService(Context .INPUT_METHOD_SERVICE );
imm. showSoftInput(edit , InputMethodManager.RESULT_SHOWN );
}
}, 998);
}
4.屏幕截图并保存到指定路径
private void getScreenHot()
{
try
{
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
int w = display.getWidth();//w=480
int h = display.getHeight();//h=800
Bitmap imageBitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);
View decorview = this.getWindow().getDecorView();//decor意思是装饰布置
decorview.setDrawingCacheEnabled(true);
imageBitmap = decorview.getDrawingCache();
String SaveImageFilePath = getSDCardPath() + "/gameCounter";
try
{
File path = new File(SaveImageFilePath);
String imagepath = SaveImageFilePath + "/Screen_" + ".png";//保存图片的路径
File file = new File(imagepath);
if (!path.exists()) {
path.mkdirs();
}
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = null;
fos = new FileOutputStream(file);
if (null != fos) {
//imageBitmap.compress(format, quality, stream);
//把位图的压缩信息写入到一个指定的输出流中
//第一个参数format为压缩的格式
//第二个参数quality为图像压缩比的值,0-100.0 意味着小尺寸压缩,100意味着高质量压缩
//第三个参数stream为输出流
imageBitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.flush();
fos.close();
Toast.makeText(this,"图片已经已保存至"+SaveImageFilePath,Toast.LENGTH_LONG).show();
}
}
catch (FileNotFoundException e)
{
throw new InvalidParameterException();
}
}
catch (Exception e)
{
Log.i("截屏", "内存不足!");
e.printStackTrace();
}
}
private String getSDCardPath() {
String SDCardPath = null;
// 判断SDCard是否存在
boolean IsSDcardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
if (IsSDcardExist) {
SDCardPath = Environment.getExternalStorageDirectory().toString();//SD卡的路径为: /mnt/sdcard
}
return SDCardPath;
}
5.截取屏幕,去头部状态栏(魅族、华为等有底部SmartBar的都可以去掉)
<pre name="code" class="java"><pre name="code" class="java">View windowView = (View) getWindow().getDecorView();
windowView.setDrawingCacheEnabled(true);
windowView.buildDrawingCache();
Bitmap bitmap=windowView.getDrawingCache();
Rect frame = new Rect();
ShareActivity.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
int cha=height-bitmap.getHeight();
Bitmap bmp = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width, height-statusBarHeight-cha);
windowView.destroyDrawingCache();//这个bmp就是结果了。
6.Android中dp和px转化
在Android的布局文件中,往往使用dp作为控件的宽度和高度尺寸,但是在Java代码中,调用getWidth()方法获得的尺寸单位
却是像素px,这两个单位有明显的区别:dp和屏幕的密度有关,而px与屏幕密度无关,所以使用时经常会涉及到两
者之间的互相转化,代码示例如下:
public int Dp2Px(Context context, float dp) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
public int Px2Dp(Context context, float px) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
}
7.Android得到控件在屏幕中的坐标,挺有用的。在别的地方看到的,收集起来以后用得着。
getLocationInWindow
getLeft
如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些。
package xiaosi.location;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class LocationActivity extends Activity {
/** Called when the activity is first created. */
private ImageView t = null;
private Button button = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
t = (ImageView)findViewById(R.id.l);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new buttonListener());
}
public class buttonListener implements OnClickListener{
public void onClick(View v)
{
int[] location = new int[2];
t.getLocationOnScreen(location);
int x = location[0];
int y = location[1];
System.out.println("x:"+x+"y:"+y);
System.out.println("图片各个角Left:"+t.getLeft()+"Right:"+t.getRight()+"Top:"+t.getTop()+"Bottom:"+t.getBottom());
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="button"/>
<ImageView
android:id="@+id/l"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/a" />
</LinearLayout>
8.记录下几个动画参数所表示的坐标含义,刚开始时一直弄混,搞得很郁闷。
(1)AlphaAnimation透明度渐变动画
Animation alphaA=new AlphaAnimation(float fromAlpha,float toAlpha)
第一个参数:动画开始时的透明度
第二个参数:动画结束时的透明度
两个参数的取值范围为[0,1]从完全透明到完全不透明。
(2)ScaleAnimation渐变尺寸缩放动画
Animation ScaleA=new ScaleAnimation(float fromX,float toX,float fromY,float toy,
int pivotXType,float pivotXValue,int pivotYType,float pivotYValue)
第一个参数:动画开始X坐标上的伸缩比例
第二个参数:动画结束时x坐标上的伸缩比例
第三个参数:动画起始时Y坐标上的伸缩比例
第四个参数:动画结束、时Y坐标上的伸缩比例
第五个参数;动画在x轴上相对于物体的位置类型
第六个参数:动画相对于物体坐标X的位置
第七个参数:动画在Y轴上相对于物体的位置类型
第八个参数;动画在相对于物体坐标Y的位置
其中位置的类型分为三种;
Animation.ABSOLUTE:相对位置是屏幕的左上角,绝对位置
Animation.RELATIVE_TO_SELF:相对位置是自身View,取值为0时表示相对
自身左上角,取值为1时是相对于自身的右下角;
Animation.RELATIVE_TO_PARENT:相对父类View的位置
(3)TranslateAnimation移动动画
Animation translateA =new TranslateAnimation(float fromXDela,float toXDelta,
float fromXDelta ,float toYDelta);
第一个参数;动画起始时X轴上的位置
第二个参数:动画结束时x轴上的位置
第三个参数;动画起始时Y轴上的位置
第四个参数;动画结束时Y轴上的位置
RotateAnimation rotateA=new RotateAnimation(float fromDegrees,float toDegrees,
int pivotXType ,float pivotXValue,int pivotYType,float pivotYValue )
第一个参数;动画开始时的转动角度
第二个参数:动画旋转道德角度
第三个参数:动画在X轴相对于物件的位置类型
第四个参数:动画相对于物件X坐标的开始位置
第五个参数;动画在Y轴相对于物件位置的类型
第六个参数:动画相对于物件Y坐标的开始位置
Animation中的四种动画创建都是new出来的,虽然创建很简单,但是根据参数的不同可以构造出前边万化的动画效果
不管事哪一种动画,都有一些通用的方法,比如:
restart();
重新播放动画
setDuration(int time)
设置动画播放的时间单位是毫秒。
动画创建完成后,接下来就是如何启动动画
其实在View视图中
启动动画也是非常简单的
只要调用View类中的startAnimation (Animation animation)
函数就行了
9.动态添加控件,指定位置。
RelativeLayout insertLayout = (RelativeLayout)view1.findViewById(R.id.screen);//screen是一个RelativeLayout 布局的id ImageView imgApple2 = new ImageView(MainActivity.this); imgApple2.setBackgroundColor(Color.parseColor("#ffb6b4")); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(100, 100); layoutParams.topMargin=8; layoutParams.leftMargin=8; layoutParams.rightMargin=8; layoutParams.bottomMargin=8; insertLayout.addView(imgApple2,layoutParams);
s.addRule(RelativeLayout.CENTER_IN_PARENT, -1); //添加位置信息 -1表示相对于父控件的位置 ,如果要相对某个平级控件则参数是该控件的ID
10.ListView去除点击效果和中间线
一、去除点击效果
android:listSelector="@android:color/transparent"
二、去除中间线
1》
设置android:divider="@null"
2》
android:divider="#00000000"
#00000000后面两个零表示透明
3》
.setDividerHeight(0)
高度设为0
11.最近在做一个引导页面,页面上面有很多动画,背景图片都是高清的,那么问题来了,在我的MX上面运行没事,但是到三星和中兴手机上就报OOM,所以必须得对图片做点什么。
public static Drawable ControlBitMap(Context context,int id) throws IOException{
BitmapFactory.Options opt =new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config. RGB_565 ;
opt.inPurgeable = true;
opt.inInputShareable = true;
InputStream is = context.getResources().openRawResource(id);
Bitmap bitmap = BitmapFactory.decodeStream(is,null, opt);
is.close();
return new BitmapDrawable(context.getResources(),bitmap);
}
用了这个方法后效果很明显,性能至少提高了一半多,但是有个问题是图片上出现了许多彩虹一样的圆晕,很是纠结最后没办法只能把
BitmapFactory.Options opt =new BitmapFactory.Options();
去掉,但这个方法挺有用的。项目里面还有很多优化需要解决,慢慢总结吧。
11.将EditText的光标移动到文本的游标
Editable ea=nickName.getText();
nickName.setSelection(ea.length());
12.android 根据短信地址匹配联系人姓名
public static String getContactNameByAddr(Context context,
String phoneNumber) {
Uri personUri = Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(phoneNumber));
Cursor cur = context.getContentResolver().query(personUri,
new String[] { PhoneLookup.DISPLAY_NAME }, null, null, null);
if (cur.moveToFirst()) {
int nameIdx = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String name = cur.getString(nameIdx);
cur.close();
return name;
}
return phoneNumber;
}
解释:该函数仅需要2个参数:context 和 手机号码
13.获取今天当天起始时间和结束时间的毫秒数
<span style="font-size:14px;">private Long getStartTime(){
Calendar todayStart = Calendar.getInstance();
todayStart.set(Calendar.HOUR, 0);
todayStart.set(Calendar.MINUTE, 0);
todayStart.set(Calendar.SECOND, 0);
todayStart.set(Calendar.MILLISECOND, 0);
return todayStart.getTime().getTime();
}
private Long getEndTime(){
Calendar todayEnd = Calendar.getInstance();
todayEnd.set(Calendar.HOUR, 23);
todayEnd.set(Calendar.MINUTE, 59);
todayEnd.set(Calendar.SECOND, 59);
todayEnd.set(Calendar.MILLISECOND, 999);
return todayEnd.getTime().getTime();
} </span>
14.
在XML数据中,一些特殊字符必须用转义符号来代替,而回车换行字符就是属于特殊符号。报表XML数据中如果要求文字强制换行,就需要插入回车换行字符。
空格 ( )
Tab (	)
回车 (
)
换行 (
)
单撇号 (')还要加上双引号才能生效“'”
<Box1>第一行文字
第二行文字</Box>“第二行文字”之前就包含了回车换行符号
<Box2>I don“'”t like you</Box2>
15 Android Intent 跳转各个设置界面
Intent跳转各个设置界面:1.GPS功能开启的设置
Intent intent=new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent,21);
2.拨号界面:
Intent intent =new Intent();
intent.setAction("android.intent.action.CALL_BUTTON");
startActivity(intent);
3.带入号码的拨号界面:
- Uri uri = Uri.parse("tel:1333332324");
- Intent intent = new Intent(Intent.ACTION_DIAL, uri);
- startActivity(intent);
4.通话记录界面:
- Intent intent=new Intent();
- intent.setAction(Intent.ACTION_CALL_BUTTON);
- startActivity(intent);
5.联系人界面:
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_VIEW);
- intent.setData(Contacts.People.CONTENT_URI);
- startActivity(intent);
6短信界面:
- Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("vnd.android-dir/mms-sms"); - // intent.setData(Uri.parse("content://mms-sms/conversations/"));//此为号码
- startActivity(intent);
- Uri uri = Uri.parse("http://www.google.com");
- Intent it = new Intent(Intent.ACTION_VIEW,uri);
- startActivity(it);
8.显示地图:
- Uri uri = Uri.parse("geo:38.899533,-77.036476");
- Intent it = new Intent(Intent.Action_VIEW,uri);
- startActivity(it);
-
- uri = Uri.parse("smsto:"+要发送短信的对方的number);
- intent = new Intent(Intent.ACTION_SENDTO,uri);
- startActivity(intent);
- 10. 打开录音机:
- Intent mi = new Intent(Media.RECORD_SOUND_ACTION);
- startActivity(mi);
11.系统拍照并保存照片:
sdcardDir = Environment.getExternalStorageDirectory().toString();
Date now = new Date();
SimpleDateFormat d1=new SimpleDateFormat("yyyy-MM-dd HHmmss");
phototime = d1.format(now);
File myCaptureFile = new File(sdcardDir + "/DCIM/Camera/"+phototime+".jpg");
Uri imageuri = Uri.fromFile(myCaptureFile);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageuri);
startActivityForResult(intent, 110);
总结:
比如,我要跳转系统”辅助功能“设置页面,则用一下代码即可:
Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, REQUESTCODE);