首页 文章 精选 留言 我的

精选列表

搜索[大语言模型应用开发框架],共10000篇文章
优秀的个人博客,低调大师

【Android进阶学习】Popupwindow的应用

PopupWindow 是一种阻塞式的弹出窗口,这就意味着在我们退出这个弹出框之前,程序会一直等待。它可以浮动在当前Activity的任何的位置上。 需要注意的是,PopupWindow必须触发某个焦点或者某个事件才会显示出来,不然总会会出现错误。 下面是使用PopupWindow 弹出自定义菜单的例子 当我们点击Menu键的时候,会在当前的Activity最下方弹出一个菜单。 效果图如下: PopupMenuDemo.java packagecom.lingdududu.popupWindow; importandroid.app.Activity; importandroid.content.Context; importandroid.graphics.drawable.BitmapDrawable; importandroid.os.Bundle; importandroid.view.Gravity; importandroid.view.KeyEvent; importandroid.view.LayoutInflater; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.BaseAdapter; importandroid.widget.GridView; importandroid.widget.ImageView; importandroid.widget.LinearLayout; importandroid.widget.PopupWindow; importandroid.widget.TextView; importandroid.widget.LinearLayout.LayoutParams; publicclassPopupMenuDemoextendsActivity{ privateint[]resArray=newint[]{ R.drawable.icon_menu_addto,R.drawable.icon_menu_audioinfo, R.drawable.icon_menu_findlrc,R.drawable.icon_menu_scan }; privateString[]title=newString[]{ "添加","信息","搜索","查看" }; privatePopupWindowpw=null; /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ menu.add(""); returnsuper.onCreateOptionsMenu(menu); } /** *在此方法中实现自定义菜单栏 */ publicbooleanonMenuOpened(intfeatureId,Menumenu){ if(pw!=null){ if(pw.isShowing()){ //就关闭弹出窗口 pw.dismiss(); } else{ //在指定位置弹出窗口 pw.showAtLocation(findViewById(R.id.tv),Gravity.CENTER,0,300); } } else{ LayoutInflaterinflater=(LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); Viewview=inflater.inflate(R.layout.menu,null); GridViewgrid1=(GridView)view.findViewById(R.id.menuGridChange); grid1.setAdapter(newImageAdapter(this)); //生成PopupWindow对象 pw=newPopupWindow(view,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); //在指定位置弹出窗口 pw.showAtLocation(findViewById(R.id.tv),Gravity.CENTER,0,300); } //此处返回false,系统不会执行onCreateOptionsMenu中添加的菜单 returnfalse; } publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_BACK){ pw.dismiss(); returnfalse; } returnsuper.onKeyDown(keyCode,event); } @Override publicbooleanonOptionsItemSelected(MenuItemitem){ returnsuper.onOptionsItemSelected(item); } publicclassImageAdapterextendsBaseAdapter{ privateContextcontext; publicImageAdapter(Contextcontext){ this.context=context; } @Override publicintgetCount(){ returnresArray.length; } @Override publicObjectgetItem(intarg0){ returnresArray[arg0]; } @Override publiclonggetItemId(intarg0){ returnarg0; } @Override publicViewgetView(intarg0,Viewarg1,ViewGrouparg2){ LinearLayoutlinear=newLinearLayout(context); LinearLayout.LayoutParamsparams=newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); linear.setOrientation(LinearLayout.VERTICAL); ImageViewiv=newImageView(context); iv.setImageBitmap(((BitmapDrawable)context.getResources().getDrawable(resArray[arg0])).getBitmap()); LinearLayout.LayoutParamsparams2=newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); params2.gravity=Gravity.CENTER; linear.addView(iv,params2); TextViewtv=newTextView(context); tv.setText(title[arg0]); LinearLayout.LayoutParamsparams3=newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); params3.gravity=Gravity.CENTER; linear.addView(tv,params3); returnlinear; } } } main.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> menu.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> menu_bg_frame.xml 这个文件是菜单背景的样式文件,在drawable-hdpi文件下面 <?xmlversion="1.0"encoding="UTF-8"?> <shapeandroid:shape="rectangle"xmlns:android="http://schemas.android.com/apk/res/android"> <solidandroid:color="#b4000000"/> <strokeandroid:width="2.0dip"android:color="#b4ffffff"android:dashWidth="3.0dip"android:dashGap="0.0dip"/> <paddingandroid:left="7.0dip"android:top="7.0dip"android:right="7.0dip"android:bottom="7.0dip"/> <cornersandroid:radius="8.0dip"/> </shape> 本文转自 lingdududu 51CTO博客,原文链接: http://blog.51cto.com/liangruijun/739459

优秀的个人博客,低调大师

android调节音量——AudioManager的应用

Android中可以通过程序获取系统手机的铃声和音量。同样,也可以设置铃声和音量。Android中给出了AudioManager类来实现音量获取、音量控制。 本篇基于 Android API 中的 AudioManager 作讲述,最后给出实例。 下面是本篇大纲: 1、认识 AudioManager 2、AudioManager 主要方法介绍 3、参数解释 1、认识 AudioManager AudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作。 2、AudioManager 主要方法介绍 邮于 AudioManager 该类方法过多,这里只讲述几个比较常用到的方法: 方法:adjustStreamVolume(int streamType, int direction, int flags)streamType为铃声类型,例如:AudioManager.STREAM_VOICE_CALL、AudioManager.STREAM_SYSTEM等,direction当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。flags为标志位。 方法:getMode() 解释:返回当前音频模式。例如:MODE_NORMAL,MODE_RINGTONE,MODE_IN_CALLorMODE_IN_COMMUNICATION 方法:getRingerMode() 解释:返回当前的铃声模式。例如RINGER_MODE_NORMAL,RINGER_MODE_SILENT, orRINGER_MODE_VIBRATE. 方法:getStreamVolume(int streamType) 解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。 方法:setStreamVolume(int streamType, int index, int flags) 解释:改变铃声音量,解释同1,index为声音大小。 方法:setMode(int mode) 解释:改变音频模式。见get方法 方法:setRingerMode(int ringerMode) 解释:改变铃声模式。见get方法 3、参数解释 streamType常用: STREAM_ALARM警报 STREAM_MUSIC音乐回放即媒体音量 STREAM_NOTIFICATION窗口顶部状态栏Notification, STREAM_RING铃声 STREAM_SYSTEM系统 STREAM_VOICE_CALL通话 STREAM_DTMF双音多频,拨号键的声音 direction,是调整的方向,增加或减少,可以是: ADJUST_LOWER降低音量 ADJUST_RAISE升高音量 ADJUST_SAME保持不变,这个主要用于向用户展示当前的音量 flags,是附加参数: FLAG_PLAY_SOUND调整音量时播放声音 FLAG_SHOW_UI调整时显示音量条,就是按音量键出现的界面 FLAG_REMOVE_SOUND_AND_VIBRATE无振动无声音 FLAG_ALLOW_RINGER_MODESWhether to include ringer modes as possible options when changing volume. FLAG_VIBRATEWhether to vibrate if going into the vibrate ringer mode *********************************************************************** *转载务必在明显处注明:http://blog.csdn.net/xyz_lmn * * 作者:张兴业 * * 邮箱:xy-zhang@163.com * *********************************************************************** 参考: http://developer.android.com/reference/android/media/AudioManager.html 实例: http://code.google.com/p/app-soundmanager http://mobile.51cto.com/android-309353.htm 本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/1230783 ,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册