安卓基础之悬浮按钮和状态栏通知
1.打开网页
Uri uri = Uri.parse("http://www.php.cn"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it);
2.获取网页内容
public String posturl(String url){ InputStream is = null; String result = ""; try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ return "Fail to establish http connection!"+e.toString(); } try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8")); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); }catch(Exception e){ return "Fail to convert net stream!"; } return result; }
3.添加超链接
textView1.setText(Html.fromHtml("<a href='http://www.php.cn'>php中文网 </a>")); textView1.setMovementMethod(LinkMovementMethod.getInstance());
4。允许访问网络
<uses-permission android:name="android.permission.INTERNET" />
5。简单的消息框
new AlertDialog.Builder(this) .setTitle("标题") .setMessage("简单消息框") .setPositiveButton("确定", null) .show();
6。确定与取消对话框
new AlertDialog.Builder(this) .setTitle("确认") .setMessage("确定吗?") .setPositiveButton("是", null) .setNegativeButton("否", null) .show();
7。带输入框的对话框
new AlertDialog.Builder(this) .setTitle("请输入") .setIcon(android.R.drawable.ic_dialog_info) .setView(new EditText(this)) .setPositiveButton("确定", null) .setNegativeButton("取消", null) .show();
8。带单选框的对话框
new AlertDialog.Builder(this) .setTitle("请选择") .setIcon(android.R.drawable.ic_dialog_info) .setSingleChoiceItems(new String[] {"选项1","选项2","选项3","选项4"}, 0, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } } ) .setNegativeButton("取消", null) .show();
9。带多选框的对话框
new AlertDialog.Builder(this) .setTitle("多选框") .setMultiChoiceItems(new String[] {"选项1","选项2","选项3","选项4"}, null, null) .setPositiveButton("确定", null) .setNegativeButton("取消", null) .show();
10。带列表框的对话框
new AlertDialog.Builder(this) .setTitle("列表框") .setItems(new String[] {"列表项1","列表项2","列表项3"}, null) .setNegativeButton("确定", null) .show();
11。图片框
ImageView img = new ImageView(this); img.setImageResource(R.drawable.ic_launcher); new AlertDialog.Builder(this) .setTitle("图片框") .setView(img) .setPositiveButton("确定", null) .show();
12。弹出短暂提示框
public void alert(String txt){ Toast.makeText(MainActivity.this,txt, 1).show(); }
13。网址转码
public String urlencode(String str) throws UnsupportedEncodingException{ return java.net.URLEncoder.encode(str, "utf-8"); }
14。网址解码
public String urldecode(String str) throws UnsupportedEncodingException{ return java.net.URLDecoder.decode(str, "utf-8"); }
15。获取网页源码
//得到二进制数据 public String getDatas(String path) throws Exception{ // 类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。 URL url = new URL(path); // 每个 HttpURLConnection 实例都可用于生成单个请求, //但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置 URL 请求的方法 conn.setRequestMethod("GET"); //设置一个指定的超时值(以毫秒为单位), //该值将在打开到此 URLConnection 引用的资源的通信链接时使用。 conn.setConnectTimeout(5 * 1000); // conn.getInputStream()返回从此打开的连接读取的输入流 InputStream inStream = conn.getInputStream();// 通过输入流获取html数据 byte[] data = readInputStream(inStream);// 得到html的二进制数据 String html = new String(data); return html; } //读取输入流中的数据,返回字节数组byte[] public byte[] readInputStream(InputStream inStream) throws Exception{ //此类实现了一个输出流,其中的数据被写入一个 byte 数组 ByteArrayOutputStream outStream = new ByteArrayOutputStream(); // 字节数组 byte[] buffer = new byte[1024]; int len = 0; //从输入流中读取一定数量的字节,并将其存储在缓冲区数组buffer 中 while ((len = inStream.read(buffer)) != -1) { // 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流 outStream.write(buffer, 0, len); } inStream.close(); //toByteArray()创建一个新分配的 byte 数组。 return outStream.toByteArray(); }
16。显示网络图片
public Bitmap returnBitMap(String url) { URL myFileUrl = null; Bitmap bitmap = null; try { myFileUrl = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); } try { HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (IOException e) { e.printStackTrace(); } return bitmap; } ImageView imView = (ImageView) findViewById(R.id.pic1); imView.setImageBitmap(returnBitMap("https://img.php.cn/upload/course/000/001/120/595af5fa9f34f845.png"));
17。按钮点击事件
//登录检测 Button button=(Button)findViewById(R.id.button1); button.setOnClickListener(new OnClickListener(){ public void onClick(View v){ } }); //登录检测
18。对话框监听事件
new AlertDialog.Builder(this) .setTitle("亲,是否退出?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub alert("你点了确定"); }}) .setNegativeButton("取消",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub alert("你已经取消了"); }}) .show(); public void alert(String txt){ Toast.makeText(this,txt, 1).show(); }
19。安卓退出程序
private void showTips() { AlertDialog alertDialog = new AlertDialog.Builder(this) .setTitle("退出程序").setMessage("是否退出程序") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { return; } }).create(); // 创建对话框 alertDialog.show(); // 显示对话框 } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { showTips(); return false; } return super.onKeyDown(keyCode, event); }
20。安卓WebView组件
WebView mWebView = new WebView(this); mWebView.setWebViewClient(new webViewClient());//调用自身打开 mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("http://www.php.cn/member/1.html"); setContentView(mWebView); class webViewClient extends WebViewClient{ //重写shouldOverrideUrlLoading方法,使点击链接后不使用其他的浏览器打开。 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); //如果不需要其他对点击链接事件的处理返回true,否则返回false return true; } }
21。无参数Activity跳转
Intent it = new Intent(Activity.Main.this, Activity2.class); startActivity(it);
22。向下一个Activity传递数据(使用Bundle和Intent.putExtras)
Intent it = new Intent(Activity.Main.this, Activity2.class); Bundle bundle=new Bundle(); bundle.putString("name", "This is from MainActivity!"); it.putExtras(bundle); // it.putExtra(“test”, "shuju”); startActivity(it); // startActivityForResult(it,REQUEST_CODE);
对于数据的获取可以采用:
Bundle bundle=getIntent().getExtras(); String name=bundle.getString("name");
23。向上一个Activity返回结果(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的Activity)
Intent intent=getIntent(); Bundle bundle2=new Bundle(); bundle2.putString("name", "This is from ShowMsg!"); intent.putExtras(bundle2); setResult(RESULT_OK, intent);
24。回调上一个Activity的结果处理函数(onActivityResult)
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode==REQUEST_CODE){ if(resultCode==RESULT_CANCELED) setTitle("cancle"); else if (resultCode==RESULT_OK) { String temp=null; Bundle bundle=data.getExtras(); if(bundle!=null) temp=bundle.getString("name"); setTitle(temp); } } }
25。安卓定时器
Timer timer = new Timer(); timer.schedule(task,10000,2000); TimerTask task = new TimerTask(){ public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; Handler handler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case 1: alert("hear me?"); break; } super.handleMessage(msg); } };
26。安卓插入背景音乐
MediaPlayer mediaPlayer = new MediaPlayer(); Uri uri = Uri .parse("http://www.php.cn/asset/1.mp3"); try { mediaPlayer.setDataSource(Sound.this, uri); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { mediaPlayer.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mediaPlayer.start();
27。int与string互转
1 如何将字串 String 转换成整数 int?
A. 有两个方法:
1). int i = Integer.parseInt([String]); 或
i = Integer.parseInt([String],[int radix]);
2). int i = Integer.valueOf(my_str).intValue();
注: 字串转成 Double, Float, Long 的方法大同小异.
2 如何将整数 int 转换成字串 String ?
A. 有叁种方法:
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i);
3.) String s = "" + i;
注: Double, Float, Long 转成字串的方法大同小异.
28。获取屏幕宽高
DisplayMetrics dm = getResources().getDisplayMetrics(); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels - 50;
29。图片拖动
private int screenWidth; private int screenHeight; private ImageView img1; private ImageView img2; img1 = (ImageView) findViewById(R.id.imageView1); img2 = (ImageView) findViewById(R.id.imageView2); DisplayMetrics dm = getResources().getDisplayMetrics(); screenWidth = dm.widthPixels; screenHeight = dm.heightPixels - 50; img1.setOnTouchListener(movingEventListener); img2.setOnTouchListener(movingEventListener); private OnTouchListener movingEventListener = new OnTouchListener() { int lastX, lastY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int left = v.getLeft() + dx; int top = v.getTop() + dy; int right = v.getRight() + dx; int bottom = v.getBottom() + dy; // 设置不能出界 if (left < 0) { left = 0; right = left + v.getWidth(); } if (right > screenWidth) { right = screenWidth; left = right - v.getWidth(); } if (top < 0) { top = 0; bottom = top + v.getHeight(); } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - v.getHeight(); } v.layout(left, top, right, bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: break; } return true; } };
30。状态栏通知消息提示代码
private void addNotificaction(int id) { NotificationManager manager = (NotificationManager) this .getSystemService(Context.NOTIFICATION_SERVICE); // 创建一个Notification Notification notification = new Notification(); // 设置显示在手机最上边的状态栏的图标 notification.icon = R.drawable.ic_launcher; // 当当前的notification被放到状态栏上的时候,提示内容 notification.tickerText = "注意了,我被扔到状态栏了"; // 添加声音提示 notification.defaults=Notification.DEFAULT_SOUND; // audioStreamType的值必须AudioManager中的值,代表着响铃的模式 notification.audioStreamType= android.media.AudioManager.ADJUST_LOWER; //下边的两个方式可以添加音乐 //notification.sound = Uri.parse("http://www.php.cn/asset/1.mp3"); //notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6"); Intent intent = new Intent(this, functions.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); // 点击状态栏的图标出现的提示信息设置 notification.setLatestEventInfo(this, "内容提示:", "我就是一个测试文件", pendingIntent); manager.notify(id, notification); }
31。安卓弹出层【弹窗】代码
private void showPopUp(View v) { LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.GRAY); TextView tv = new TextView(this); tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); tv.setText("I'm a pop -----------------------------!"); tv.setTextColor(Color.WHITE); layout.addView(tv); PopupWindow popupWindow = new PopupWindow(layout,120,120); popupWindow.setFocusable(true); popupWindow.setOutsideTouchable(true); popupWindow.setBackgroundDrawable(new BitmapDrawable()); int[] location = new int[2]; v.getLocationOnScreen(location); popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]-popupWindow.getHeight()); } showPopUp(LayoutInflater.from(getBaseContext()).inflate(R.layout.popview, null));
32。 安卓通过新的xml布局文件获取view对象
LayoutInflater.from(getBaseContext()).inflate(R.layout.popview, null);
33。悬浮功能所需要的权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
34。添加悬浮按钮
权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> WindowManager wm=(WindowManager)getApplicationContext().getSystemService("window"); WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams(); wmParams.type=2002; //type是关键,这里的2002表示系统级窗口,你也可以试试2003。 wmParams.format=1; wmParams.flags=40; wmParams.width=40; wmParams.height=40; wm.addView(LayoutInflater.from(getBaseContext()).inflate(R.layout.popview, null), wmParams);//创建View
本文由php中文网用户“Ty80”提供,原文地址:http://www.php.cn/java-article-374028.html
请勿转载~~~
学习php就上php中文网.
Atas ialah kandungan terperinci 安卓基础之悬浮按钮和状态栏通知. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Artikel ini menganalisis empat kerangka JavaScript teratas (React, Angular, Vue, Svelte) pada tahun 2025, membandingkan prestasi, skalabilitas, dan prospek masa depan mereka. Walaupun semuanya kekal dominan kerana komuniti dan ekosistem yang kuat, popul mereka yang relatif

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Artikel ini menangani kelemahan CVE-2022-1471 dalam Snakeyaml, kecacatan kritikal yang membolehkan pelaksanaan kod jauh. Ia memperincikan bagaimana peningkatan aplikasi boot musim bunga ke snakeyaml 1.33 atau lebih lama mengurangkan risiko ini, menekankan bahawa kemas kini ketergantungan

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Node.js 20 dengan ketara meningkatkan prestasi melalui penambahbaikan enjin V8, terutamanya pengumpulan sampah yang lebih cepat dan I/O. Ciri -ciri baru termasuk sokongan webassembly yang lebih baik dan alat penyahpepijatan halus, meningkatkan produktiviti pemaju dan kelajuan aplikasi.

Iceberg, format meja terbuka untuk dataset analitik yang besar, meningkatkan prestasi data dan skalabiliti. Ia menangani batasan parket/orc melalui pengurusan metadata dalaman, membolehkan evolusi skema yang cekap, perjalanan masa, serentak w

Artikel ini meneroka kaedah untuk berkongsi data antara langkah -langkah timun, membandingkan konteks senario, pembolehubah global, lulus argumen, dan struktur data. Ia menekankan amalan terbaik untuk mengekalkan, termasuk penggunaan konteks ringkas, deskriptif

Artikel ini meneroka mengintegrasikan pengaturcaraan berfungsi ke dalam Java menggunakan ekspresi Lambda, API Streams, rujukan kaedah, dan pilihan. Ia menyoroti faedah seperti kebolehbacaan dan kebolehkerjaan kod yang lebih baik melalui kesimpulan dan kebolehubahan
