Android常用跳转工具集合汇总
这里包含了一些基本的并且常用的跳转工具。
这是需要的对应的权限。
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
代码:
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import java.io.File;
import frame.zmit.cn.publicutils.R;
/**
* Created by joy on 2016/7/21.
* 工具集合
*/
public class MainActivity extends AppCompatActivity {
private String mImagePath;//返回的图片路径
private final static int REQUEST_CODE_GALLERY = 0x11;
private final static int REQUEST_CODE_CAMERA = 0x12;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 打开微信
*/
findViewById(R.id.btn_open_weixin).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = getPackageManager().getLaunchIntentForPackage("com.tencent.mm");
startActivity(intent);
}
});
/**
* 跳转到QQ聊天界面
*/
findViewById(R.id.btn_open_qq).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String mQqNumber = "98*****08";
String url11 = "mqqwpa://im/chat?chat_type=wpa&uin=" + mQqNumber + "&version=10";
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url11)));
}
});
/**
* 跳转到联系人界面
*/
findViewById(R.id.btn_people_interface).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClassName("com.android.contacts", "com.android.contacts.activities.PeopleActivity");
startActivity(intent);
}
});
/**
* 跳转到拨号界面
*/
findViewById(R.id.btn_telephone_interface).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phone = "157*****737";
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phone));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
/**
* 直接拨打电话
*/
findViewById(R.id.btn_telephone).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phone = "157*****737";
Intent intentPhone = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone));
startActivity(intentPhone);
}
});
/**
* 跳转到短信界面
*/
findViewById(R.id.btn_message_interface).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);
}
});
/**
* 跳转到短信界面
* 指定号码和短信内容
*/
findViewById(R.id.btn_message).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phone = "157*****737";
String message = "这是一个自定义的内容";
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + phone));
intent.putExtra("sms_body", message);
startActivity(intent);
}
});
/**
* 跳转到设置界面
*/
findViewById(R.id.btn_setting_interface).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Settings.ACTION_SETTINGS);
startActivity(intent);
}
});
/**
* 跳转到蓝牙界面
*/
findViewById(R.id.btn_bluetooth_interface).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
startActivity(intent);
}
});
/**
* 调用浏览器
*/
findViewById(R.id.btn_browser).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse("http://www.baidu.com");
intent.setData(content_url);
startActivity(intent);
}
});
/**
* 打开照相机
*/
findViewById(R.id.btn_camera).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mImagePath = chooseImageFromCamera(MainActivity.this, REQUEST_CODE_CAMERA, "cameraImage");
}
});
/**
* 打开相册并获取图片地址
*/
findViewById(R.id.btn_gallery).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, REQUEST_CODE_GALLERY);
}
});
}
public String chooseImageFromCamera(Activity activity, int requestCode, String imageName) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory() + "/Images");
if (!file.exists()) {
file.mkdirs();
}
String savePath = Environment.getExternalStorageDirectory() + "/Images/" + imageName + String.valueOf(System.currentTimeMillis()) + ".jpg";
Uri mUri = Uri.fromFile(
new File(savePath));
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mUri);
cameraIntent.putExtra("return-data", true);
activity.startActivityForResult(cameraIntent, requestCode);
return savePath;
}
public String onActivityResultForChooseImageFromGallery(
Context context, int requestCode, int resultCode, Intent data) {
String imagePath = null;
if (data != null) {
if ("file".equals(data.getData().getScheme())) {
/** 有些低版本机型返回的Uri模式为file*/
imagePath = data.getData().getPath();
} else {
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imagePath = cursor.getString(columnIndex);
cursor.close();
}
return imagePath;
} else {
return null;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_CODE_GALLERY:
mImagePath = onActivityResultForChooseImageFromGallery(MainActivity.this,
requestCode, resultCode, data);
if (mImagePath != null && mImagePath.length() > 0) {
Toast.makeText(MainActivity.this, mImagePath, Toast.LENGTH_SHORT).show();
}
break;
case REQUEST_CODE_CAMERA:
if (mImagePath != null && mImagePath.length() > 0) {
Toast.makeText(MainActivity.this, mImagePath, Toast.LENGTH_SHORT).show();
}
break;
}
}
}
我们在输入银行卡号时希望能按格式显示,而不是单纯显示一堆数字,下面一段代码可实现银行卡号格式化输入。
//银行卡号码的格式
public void bankCardNumAddSpace(final EditText mEditText) {
mEditText.addTextChangedListener(new TextWatcher() {
int beforeTextLength = 0;
int onTextLength = 0;
boolean isChanged = false;
int location = 0;// 记录光标的位置
private char[] tempChar;
private StringBuffer buffer = new StringBuffer();
int konggeNumberB = 0;
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
beforeTextLength = s.length();
if (buffer.length() > 0) {
buffer.delete(0, buffer.length());
}
konggeNumberB = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
konggeNumberB++;
}
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
onTextLength = s.length();
buffer.append(s.toString());
if (onTextLength == beforeTextLength || onTextLength <= 3
|| isChanged) {
isChanged = false;
return;
}
isChanged = true;
}
@Override
public void afterTextChanged(Editable s) {
if (isChanged) {
location = mEditText.getSelectionEnd();
int index = 0;
while (index < buffer.length()) {
if (buffer.charAt(index) == ' ') {
buffer.deleteCharAt(index);
} else {
index++;
}
}
index = 0;
int konggeNumberC = 0;
while (index < buffer.length()) {
if ((index == 4 || index == 9 || index == 14 || index == 19)) {
buffer.insert(index, ' ');
konggeNumberC++;
}
index++;
}
if (konggeNumberC > konggeNumberB) {
location += (konggeNumberC - konggeNumberB);
}
tempChar = new char[buffer.length()];
buffer.getChars(0, buffer.length(), tempChar, 0);
String str = buffer.toString();
if (location > str.length()) {
location = str.length();
} else if (location < 0) {
location = 0;
}
mEditText.setText(str);
Editable etable = mEditText.getText();
Selection.setSelection(etable, location);
isChanged = false;
}
}
});
}
自定义View经常会画文字,那么就可能需要获取文字的高度,这里介绍一种好用的方法:
public double getTxtHeight(Paint mPaint) {
Paint.FontMetrics fm = mPaint.getFontMetrics();
return Math.ceil(fm.descent - fm.ascent);
}
参数为Paint,就是你画文字的画笔,效果如下
canvas.drawText("测试文字", 300, 300, mPaint);
canvas.drawText("文字的高度为:" + getTxtHeight(mPaint) + "px", 300, 400, mPaint);
为了使文章中的代码看起来简洁一点,便于理解一点,我就不把Paint的实例化代码贴出来了,另外提示:本文所有变量都是我定死的,各位可以根据需求来自己设置getset方法.
参数:
private Paint mPaint;//画文字和XY轴的画笔
private Paint mPaintColumn;//画圆柱的画笔
private final float START_X = 200;//Y轴左上角X坐标
private final float START_Y = 200;//Y轴左上角Y坐标
private boolean canLoad = true;//是否开始画图
private float XSpace = 150;//Y轴每个数字间距
private float XWidth = 900;//X轴总长度
private String[] XNames = {"测试1", "测试2", "测试3", "测试4", "测试5"};
private int YCount = 10;//Y轴数值的个数(包括0)
private float YSpace = 100;//Y轴每个数字间距
private float YHeight = 1000;//Y轴总长度
private float ColumsWidth = 50;//长方形宽(圆柱)
YHeight = (float) (YHeight + getTxtHeight(mPaint));//这个代码的意思是:将Y轴的值和文字高度加起来,因为文字有高度,如果
不算文字高度,最后一个Y轴的值就会比计划高一点
//获取文字的高
public double getTxtHeight(Paint mPaint) {
Paint.FontMetrics fm = mPaint.getFontMetrics();
return Math.ceil(fm.descent - fm.ascent);
}
关键代码draw:
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
if (canLoad) {
canvas.drawLine(START_X, START_Y, START_X, YHeight + START_Y, mPaint);//Y轴
canvas.drawLine(START_X, YHeight + START_Y, START_X + XWidth, YHeight + START_Y, mPaint);//X轴
float MaxTextWidth = mPaint.measureText("1000");//这里我知道最长的字为1000,所以这么写,根据不同情况改
float TxtHeight = (float) getTxtHeight(mPaint);//mPaint所画文字的高度
//Y轴上的数值
for (int i = 0; i <= YCount; i++) {
String count = 100 * i + "";
canvas.drawText(count, START_X - MaxTextWidth, YHeight + START_Y - YSpace * i, mPaint);
}
//X轴上的数值
for (int i = 0; i < XNames.length; i++) {
String name = XNames[i];
canvas.drawText(name, START_X + XSpace * (i + 1), YHeight + START_Y + TxtHeight, mPaint);
}
//圆柱和圆柱上面的具体数值
for (int i = 0; i < XNames.length; i++) {
String count = (i + 1) * 100 + "";
canvas.drawRect(START_X + XSpace * (i + 1) - ColumsWidth / 2, START_Y + YHeight - (i + 1) * YSpace, START_X + XSpace * (i + 1) + ColumsWidth / 2, YHeight + START_Y, mPaintColumn);
canvas.drawText(count, ColumsWidth/2+START_X + XSpace * (i + 1) - ColumsWidth / 2, START_Y + YHeight - (i + 1) * YSpace-10, mPaint);
}
}
}
同学们现在或以后自定义View画文字的时候,肯定会需要将文字换行,大家都知道\n,那么我们来画试一下:
canvas.drawText("这里是测试换行符\n第二行",300,300,mPaint);
如何解决呢?使用TextPaint:
private TextPaint mPaint;
实例化方式与Paint一致(本来就是Paint的儿子)
接下来:
StaticLayout layout = new StaticLayout("这里是测试换行符\n第二行", mPaint,
(int) mPaint.measureText("这里是测试换行符\n第二行"), Layout.Alignment.ALIGN_NORMAL, 1.0F, 0.0F, true);
canvas.translate(300,300);
layout.draw(canvas);
效果:
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- 这篇文章主要介绍了C# 10个常用特性,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-09
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
- 下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
- 这篇文章主要介绍了Java8 使用流抽取List<T>集合中T的某个属性操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
用Intel HAXM给Android模拟器Emulator加速
Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20C#读取数据库返回泛型集合详解(DataSetToList)
本篇文章主要是对C#读取数据库返回泛型集合(DataSetToList)进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25- 在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20