android给下拉框设置默认选中值,定义static final Map
- 格式:doc
- 大小:34.50 KB
- 文档页数:3
大家好,我们这一节讲一下Android下的下拉菜单Spinner,就像是Swing的Combobox,html 的<select>,由于手机画面有限,要在有限的范围选择项目,下拉菜单是比较好的选择. Android提供的Spinner Widget的下拉菜单已经非常好用了,样式也还适用.但我们本节的Demo的重点在于自定义下拉菜单里的样式,其关键在于调用setDropDownViewResource方法,以XML的方式定义下拉菜单要显示的模样.Step 1: 创建一个新的Android 工程, 我们命名为SpinnerDemo .Step 2 :打开layout 文件夹,找到main.xml 将其内容改为:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:padding="10dip"android:layout_width="fill_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10dip"android:text="Please select a planet:"/><Spinnerandroid:id="@+id/spinner"android:layout_width="fill_parent"android:layout_height="wrap_content"android:drawSelectorOnTop="true"android:prompt="@string/planet_prompt"/></LinearLayout>注意:the Spinner's android:promptis a string resource. In this case, Android does not allow it to be a string, it must be a reference to a resource. So...Step 3:找到在res/values/string.xml,在里面加入如下(黑体)一行:<?xml version="1.0" encoding="utf-8"?><resources><string name="hello">Hello World, SpinnerDemo!</string> <string name="app_name">SpinnerDemo</string><string name="planet_prompt">Choose a planet</string> </resources>Step 4:在res/values/文件夹下创建一个xml文件,命名为arrays.xml:<resources><string-array name="planets"><item>Mercury</item><item>Venus</item><item>Earth</item><item>Mars</item><item>Jupiter</item><item>Saturn</item><item>Uranus</item><item>Neptune</item></string-array></resources>这是用户可以从Spinner Widget选择list 的选择项.Step5:打开SpinnerDemo.java,编辑内容如下:package com.android.test;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.Spinner;public class SpinnerDemoextends Activity{public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);Spinner s = (Spinner) findViewById(R.id.spinner);ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.planets, yout.simple_spinner_item)adapter.setDropDownViewResource(yout.simple_spinner_dropdown_it em);s.setAdapter(adapter);}}step 6:最后run it(运行之)效果如下:搞定,让大家久等了,终于把日语搞定了..Android,英语,我来了!!!!。
自定义下拉菜单模式范例说明Spinner就是下拉菜单,也等于swing的combo box、html的<select>,由于手机画面有限,要在有限的范围选择项目,下拉菜单是唯一、也是较好的选择。
Android提供的Spinner Widget的下拉菜单已经非常好用了,样式也还适用。
但本范例的示范重点在于自定义下拉菜单里的样式,其关键在于调用setDropDownViewResource方法,以XML的方式定义下拉菜单要显示的模样。
本范例除了自定义下拉菜单,还用程序设计了一段动画,当User以触控的方式单击这个自定义的Spinner时,会以一段动画提示User。
在new ArrayAdapter中,我们将会使用ArrayAdapter(Context context, int textViewResourceId, T[] objects)这个Constructor,textViewResourceId使用Android提供的ResourceID,objects为必须传递的字符串数组(String Array)。
范例程序Adapter的setDropDownViewResource可以设置下拉菜单的显示方式,将该xml定义在res/layout目录下面,可针对下拉菜单中的TextView进行设置,如同本程序里的yout.myspinner_ dropdown即为自定义的下拉菜单TextView样式。
除了改变下拉菜单样式外,也对Spinner做了一点动态效果,单击Spinner时,晃动Spinner再出现下拉菜单(myAnimation)。
/* import程序略 */public class EX04_08 extends Activity{private static final String[] countriesStr ={ "北京市", "上海市", "天津市", "重庆市" };private TextView myTextView;private Spinner mySpinner;private ArrayAdapter<String> adapter;Animation myAnimation;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);/*加载main.xml Layout */setContentView(yout.main);/* 以findViewById()取得对象 */myTextView = (TextView) findViewById(R.id.myTextView);mySpinner = (Spinner) findViewById(R.id.mySpinner);adapter = new ArrayAdapter<String>(this,yout.simple_spinner_item, countriesStr);/* myspinner_dropdown为自定义下拉菜单样式定义在res/layout目录下*/adapter.setDropDownViewResource(yout.myspinner_dropdown);/* 将ArrayAdapter添加Spinner对象中 */mySpinner.setAdapter(adapter);/* 将mySpinner添加OnItemSelectedListener */mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3)/* 将所选mySpinner的值带入myTextView中 */myTextView.setText("选择的是" + countriesStr[arg2]);/* 将mySpinner显示 */arg0.setVisibility(View.VISIBLE);}@Overridepublic void onNothingSelected(AdapterView<?> arg0){// TODO Auto-generated method stub}});/* 取得Animation定义在res/anim目录下 */myAnimation = AnimationUtils.loadAnimation(this, R.anim.my_anim);/* 将mySpinner添加OnTouchListener */mySpinner.setOnTouchListener(new Spinner.OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event){/* 将mySpinner运行Animation */v.startAnimation(myAnimation);/* 将mySpinner隐藏 */v.setVisibility(View.INVISIBLE);return false;});mySpinner.setOnFocusChangeListener(newSpinner.OnFocusChangeListener(){@Overridepublic void onFocusChange(View v, boolean hasFocus){// TODO Auto-generated method stub}});}}res/layout/myspinner_dropdown.xml改变下拉菜单样子的XML,里面所使用的组件为TextView。
Android可以输⼊的下拉框将AutoCompleteTextView与⼀个button组合起来,做成⼀个可以输⼊,也可以选择的下拉框。
下⾯是定义的xml⽂件,auto_spinner.xml:1 <?xml version="1.0" encoding="utf-8"?>2 <LinearLayout xmlns:android="/apk/res/android"3 xmlns:tools="/tools"4 android:layout_width="fill_parent"5 android:layout_height="50dip"6 android:background="@android:drawable/edit_text"7 android:paddingRight="10dip"8 android:weightSum="4">910 <AutoCompleteTextView11 android:id="@+id/repeateMode"12 android:layout_width="0dip"13 android:layout_height="fill_parent"14 android:layout_weight="3"15 android:background="@null"16 android:cacheColorHint="#00000000"17 android:completionThreshold="1"18 android:dropDownHorizontalOffset="20dp"19 android:ems="10"20 android:gravity="center_vertical" >2122 <requestFocus />23 </AutoCompleteTextView>2425 <ImageButton26 android:id="@+id/repeateModeBtn"27 android:layout_width="0dp"28 android:layout_height="fill_parent"29 android:layout_weight="1.0"30 android:src="@android:drawable/btn_dropdown"31 />3233 </LinearLayout>这是部分代码:……private void init(Context context) {// this.context = context;LayoutInflater.from(context).inflate(yout.auto_spinner, this);adapter = new ArrayAdapter<String>(context,yout.simple_dropdown_item_1line, list);text = (AutoCompleteTextView) this.findViewById(R.id.repeateMode);text.setAdapter(adapter);button = (ImageButton) this.findViewById(R.id.repeateModeBtn);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 显⽰下拉框text.showDropDown();}});}这样基本⼏可以了。
【Android开发API】⽤户界⾯-下拉列表-Spinners负责?:sumakira 分任务原⽂链接?:/doc/93aabe2baf45b307e87197c8.html /guide/topics/ui/controls/spinner.htmlSpinners 提供?条快速的⽅式来从?系列的选项中选取某值。
默认的状态下,?个Spinner 只显⽰当前被选择的值。
通过触屏点击Spinner 可以显⽰?个dropdown 的下拉列表菜单并且显⽰出来了所有可选的值,从这个列表中,⽤户可以选取?个新的值。
⽂件:Spinner.png你可以添加?个spinner 对象到布局⽂件中。
这通常都是通过在XML 的布局⽂件中的元素中进⾏设置来实现的。
例如:要加?选项列表到spinner 的话,你要先在你的Activity 或者是Fragment 的代码⾥指定?个SpinnerAdapter 。
添加⽤户选项给Spinner提供给Spinner 的选项可以是源⾃任何地⽅,但是必须要通过SpinnerAdapter 来提供。
⽐如说如果选项可以放在?个array ⾥,那就通过ArrayAdapter 来提供数据,在⽐如说如果选项是来⾃数据库,那就可以选⽤CursorAdapter 来提供。
举例,如果提供给Spinner 的可选项已经是事先决定好的,那可以通过在string resource file 字符串资源⽂件中定义组string array 字符串数组Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune通过使⽤这样?个数组,在加上把下边这段代码应⽤到Activity 或者Fragment ⾥来提供给spinner ?个实例化的ArrayAdapter 数组适配器Spinner spinner = (Spinner) findViewById(R.id.spinner); // Create an ArrayAdapter using the string array and adefault spinner layout ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.planets_array,/doc/93aabe2baf45b307e87197c8.html yout.simple_spinner_item); // Specify the layout to use when the list of choices appearsadapter.setDropDownViewResource(/doc/93aabe2baf45b307e87197c8.htmlyout.simple_spinner_dropdown_item); // Apply the adapter tothe spinner spinner.setAdapter(adapter);可以⽤[int, int)createFromResource()](/doc/93aabe2baf45b307e87197c8.html/reference/android/widget/ArrayAdapter.html#createFromResource(android.content.Context,)函数从字符串数组中来创建ArrayAdapter 数组适配器。
Android动态获取系统权限+调⽤外部应⽤读取本地⽂件(TBS+⾃定义)⼀、获取动态权限1.创建Android应⽤,在配置⽂件中添加临时访问⽂件权限<!-- android 7.0临时赋予访问权限 android:name="android.support.v4.content.FileProvider" --><providerandroid:name="androidx.core.content.FileProvider"android:authorities="com.example.build_input"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths"/></provider>新建xml⽂件,配置name和path路径<?xml version="1.0" encoding="utf-8"?><paths><!-- name随便起--><external-pathname="camera_photos"path="/"/></paths>2.配置系统需要⽤到的系统权限<!-- 向SD卡写⼊数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.WRITE_SETTINGS"tools:ignore="ProtectedPermissions"/>3.编写申请动态权限⽅法,在onCreate()⽅法中调⽤//申请权限private boolean getPermission(Activity activity){boolean rs=false;// 声明⼀个集合,在后⾯的代码中⽤来存储⽤户拒绝授权的权List<String> permissionList = new ArrayList<>();String[] permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,//读取内存卡Manifest.permission.WRITE_EXTERNAL_STORAGE,//写⼊内存卡// Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,//允许挂载和反挂载⽂件系统可移动存储// Manifest.permission.READ_PHONE_STATE,//读取⼿机状态和⾝份/* Manifest.permission.ACCESS_WIFI_STATE,//获取使⽤Wi-Fi等WLAN⽆线⽹络Manifest.permission.CHANGE_WIFI_STATE,//允许程序改变Wi-Fi连接状态Manifest.permission.ACCESS_NETWORK_STATE,//允许程序访问有关GSM⽹络信息Manifest.permission.CHANGE_NETWORK_STATE,//允许程序改变⽹络连接状态Manifest.permission.INTERNET,//访问⽹络连接,可能产⽣GPRS流量Manifest.permission.BLUETOOTH,//允许程序连接到已配对的蓝⽛设备Manifest.permission.CAMERA,//相机Manifest.permission.WRITE_SETTINGS,//允许程序读取或写⼊系统设置*/};permissionList.clear();for (int i = 0; i < permissions.length; i++) {if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED) {Log.e(TAG,"权限未允许:"+permissions[i]+"....");permissionList.add(permissions[i]);}}if (permissionList.isEmpty()) {//未授予的权限为空,表⽰都授予了Log.e(TAG,"已经获取到了所有权限");return true;} else {//请求权限⽅法String[] spermissions = permissionList.toArray(new String[permissionList.size()]);//将List转为数组ActivityCompat.requestPermissions(activity, spermissions, 1);}return rs;}4.处理授权回调@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if(requestCode==1){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {boolean request_rs=true;for(int i=0;i<grantResults.length;i++){if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {request_rs=false;}}if(request_rs){Log.e("软件获取权限结果:","获取软件权限成功");init();}else{Toast.makeText(this, "您拒绝了软件应⽤权限,因此⽆法使⽤该软件!", Toast.LENGTH_LONG).show(); showDialogTipUserGoToAppSettting();}}}}若未获取的权限,则提醒⽤户⼿动开启权限/*** 提⽰⽤户去应⽤设置界⾯⼿动开启权限*/private void showDialogTipUserGoToAppSettting() {new AlertDialog.Builder(this).setTitle("存储权限不可⽤").setMessage("请在-应⽤设置-权限-中,允许应⽤使⽤存储权限来保存⽤户数据").setPositiveButton("⽴即开启", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 跳转到应⽤设置界⾯goToAppSetting();android.os.Process.killProcess(android.os.Process.myPid());}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {android.os.Process.killProcess(android.os.Process.myPid());}}).setCancelable(false).show();}/*** 跳转到当前应⽤的设置界⾯*/private void goToAppSetting() {Intent intent = new Intent();intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", getPackageName(), null);intent.setData(uri);startActivityForResult(intent, 123);}⼆、调⽤应⽤打开本地⽂件第⼀种,根据⽂件类型⾃动选取应⽤打开⽂件1.创建⽂件类型数组/*** -- MIME 列表 --*/public static final String[][] MIME_MapTable = {// --{后缀名, MIME类型} --{".3gp", "video/3gpp"},{".3gpp", "video/3gpp"},{".aac", "audio/x-mpeg"},{".amr", "audio/x-mpeg"},{".apk", "application/vnd.android.package-archive"},{".avi", "video/x-msvideo"},{".aab", "application/x-authoware-bin"},{".aam", "application/x-authoware-map"},{".aas", "application/x-authoware-seg"},{".ai", "application/postscript"},{".aif", "audio/x-aiff"},{".aifc", "audio/x-aiff"},{".aiff", "audio/x-aiff"},{".als", "audio/x-alpha5"},{".amc", "application/x-mpeg"},{".ani", "application/octet-stream"},{".asc", "text/plain"},{".asd", "application/astound"},{".asf", "video/x-ms-asf"},{".asn", "application/astound"},{".asp", "application/x-asap"},{".asx", " video/x-ms-asf"},{".avb", "application/octet-stream"},{".awb", "audio/amr-wb"},{".bcpio", "application/x-bcpio"},{".bld", "application/bld"},{".bld2", "application/bld2"},{".bpk", "application/octet-stream"},{".bz2", "application/x-bzip2"},{".bin", "application/octet-stream"},{".bmp", "image/bmp"},{".c", "text/plain"},{".class", "application/octet-stream"},{".conf", "text/plain"},{".cpp", "text/plain"},{".cal", "image/x-cals"},{".ccn", "application/x-cnc"},{".cco", "application/x-cocoa"},{".cdf", "application/x-netcdf"},{".cgi", "magnus-internal/cgi"},{".chat", "application/x-chat"},{".clp", "application/x-msclip"},{".cmx", "application/x-cmx"},{".co", "application/x-cult3d-object"},{".cod", "image/cis-cod"},{".cpio", "application/x-cpio"},{".cpt", "application/mac-compactpro"},{".crd", "application/x-mscardfile"},{".csh", "application/x-csh"},{".csm", "chemical/x-csml"},{".csml", "chemical/x-csml"},{".css", "text/css"},{".cur", "application/octet-stream"},{".doc", "application/msword"},{".dcm", "x-lml/x-evm"},{".dcr", "application/x-director"},{".dcx", "image/x-dcx"},{".dhtml", "text/html"},{".dir", "application/x-director"},{".dll", "application/octet-stream"},{".dmg", "application/octet-stream"},{".dms", "application/octet-stream"},{".dot", "application/x-dot"},{".dvi", "application/x-dvi"},{".dwf", "drawing/x-dwf"},{".dwg", "application/x-autocad"},{".dxf", "application/x-autocad"},{".dxr", "application/x-director"},{".ebk", "application/x-expandedbook"}, {".emb", "chemical/x-embl-dl-nucleotide"}, {".embl", "chemical/x-embl-dl-nucleotide"}, {".eps", "application/postscript"},{".epub", "application/epub+zip"},{".eri", "image/x-eri"},{".es", "audio/echospeech"},{".esl", "audio/echospeech"},{".etc", "application/x-earthtime"},{".etx", "text/x-setext"},{".evm", "x-lml/x-evm"},{".evy", "application/x-envoy"},{".exe", "application/octet-stream"},{".fh4", "image/x-freehand"},{".fh5", "image/x-freehand"},{".fhc", "image/x-freehand"},{".fif", "image/fif"},{".fm", "application/x-maker"},{".fpx", "image/x-fpx"},{".fvi", "video/isivideo"},{".flv", "video/x-msvideo"},{".gau", "chemical/x-gaussian-input"},{".gca", "application/x-gca-compressed"}, {".gdb", "x-lml/x-gdb"},{".gif", "image/gif"},{".gps", "application/x-gps"},{".gtar", "application/x-gtar"},{".gz", "application/x-gzip"},{".gif", "image/gif"},{".gtar", "application/x-gtar"},{".gz", "application/x-gzip"},{".h", "text/plain"},{".hdf", "application/x-hdf"},{".hdm", "text/x-hdml"},{".hdml", "text/x-hdml"},{".htm", "text/html"},{".html", "text/html"},{".hlp", "application/winhlp"},{".hqx", "application/mac-binhex40"},{".hts", "text/html"},{".ice", "x-conference/x-cooltalk"},{".ico", "application/octet-stream"},{".ifm", "image/gif"},{".ifs", "image/ifs"},{".imy", "audio/melody"},{".ins", "application/x-net-install"},{".ips", "application/x-ipscript"},{".ipx", "application/x-ipix"},{".it", "audio/x-mod"},{".itz", "audio/x-mod"},{".ivr", "i-world/i-vrml"},{".j2k", "image/j2k"},{".jad", "text/vnd.sun.j2me.app-descriptor"},{".jam", "application/x-jam"},{".jnlp", "application/x-java-jnlp-file"},{".jpe", "image/jpeg"},{".jpz", "image/jpeg"},{".jwc", "application/jwc"},{".jar", "application/java-archive"},{".java", "text/plain"},{".jpeg", "image/jpeg"},{".jpg", "image/jpeg"},{".js", "application/x-javascript"},{".kjx", "application/x-kjx"},{".lak", "x-lml/x-lak"},{".latex", "application/x-latex"},{".lcc", "application/fastman"},{".lcl", "application/x-digitalloca"},{".lcr", "application/x-digitalloca"},{".lgh", "application/lgh"},{".lha", "application/octet-stream"},{".lml", "x-lml/x-lml"},{".lmlpack", "x-lml/x-lmlpack"},{".log", "text/plain"},{".lsf", "video/x-ms-asf"},{".lsx", "video/x-ms-asf"},{".lzh", "application/x-lzh "},{".m13", "application/x-msmediaview"},{".m14", "application/x-msmediaview"},{".m15", "audio/x-mod"},{".m3u", "audio/x-mpegurl"},{".m3url", "audio/x-mpegurl"},{".ma1", "audio/ma1"},{".ma2", "audio/ma2"},{".ma3", "audio/ma3"},{".ma5", "audio/ma5"},{".man", "application/x-troff-man"},{".map", "magnus-internal/imagemap"},{".mbd", "application/mbedlet"},{".mct", "application/x-mascot"},{".mdb", "application/x-msaccess"},{".mdz", "audio/x-mod"},{".me", "application/x-troff-me"},{".mel", "text/x-vmel"},{".mi", "application/x-mif"},{".mid", "audio/midi"},{".midi", "audio/midi"},{".m4a", "audio/mp4a-latm"},{".m4b", "audio/mp4a-latm"},{".m4p", "audio/mp4a-latm"},{".m4u", "video/vnd.mpegurl"},{".m4v", "video/x-m4v"},{".mov", "video/quicktime"},{".mp2", "audio/x-mpeg"},{".mp3", "audio/x-mpeg"},{".mp4", "video/mp4"},{".mpc", "application/vnd.mpohun.certificate"}, {".mpe", "video/mpeg"},{".mpeg", "video/mpeg"},{".mpg", "video/mpeg"},{".mpg4", "video/mp4"},{".mpga", "audio/mpeg"},{".msg", "application/vnd.ms-outlook"},{".mif", "application/x-mif"},{".mil", "image/x-cals"},{".mio", "audio/x-mio"},{".mmf", "application/x-skt-lbs"},{".mng", "video/x-mng"},{".mny", "application/x-msmoney"},{".moc", "application/x-mocha"},{".mocha", "application/x-mocha"},{".mod", "audio/x-mod"},{".mof", "application/x-yumekara"},{".mol", "chemical/x-mdl-molfile"},{".mop", "chemical/x-mopac-input"},{".movie", "video/x-sgi-movie"},{".mpn", "application/vnd.mophun.application"}, {".mpp", "application/vnd.ms-project"},{".mps", "application/x-mapserver"},{".mrl", "text/x-mrml"},{".mrm", "application/x-mrm"},{".ms", "application/x-troff-ms"},{".mts", "application/metastream"},{".mtx", "application/metastream"},{".mtz", "application/metastream"},{".mzv", "application/metastream"},{".nar", "application/zip"},{".nbmp", "image/nbmp"},{".nc", "application/x-netcdf"},{".ndb", "x-lml/x-ndb"},{".ndwn", "application/ndwn"},{".nif", "application/x-nif"},{".nmz", "application/x-scream"},{".nokia-op-logo", "image/vnd.nok-oplogo-color"}, {".npx", "application/x-netfpx"},{".nsnd", "audio/nsnd"},{".nva", "application/x-neva1"},{".oda", "application/oda"},{".oom", "application/x-atlasMate-plugin"},{".ogg", "audio/ogg"},{".pac", "audio/x-pac"},{".pae", "audio/x-epac"},{".pan", "application/x-pan"},{".pbm", "image/x-portable-bitmap"},{".pcx", "image/x-pcx"},{".pda", "image/x-pda"},{".pdb", "chemical/x-pdb"},{".pdf", "application/pdf"},{".pfr", "application/font-tdpfr"},{".pgm", "image/x-portable-graymap"},{".pict", "image/x-pict"},{".pm", "application/x-perl"},{".pmd", "application/x-pmd"},{".png", "image/png"},{".pnm", "image/x-portable-anymap"},{".pnz", "image/png"},{".pot", "application/vnd.ms-powerpoint"},{".ppm", "image/x-portable-pixmap"},{".pps", "application/vnd.ms-powerpoint"},{".ppt", "application/vnd.ms-powerpoint"},{".pqf", "application/x-cprplayer"},{".pqi", "application/cprplayer"},{".prc", "application/x-prc"},{".proxy", "application/x-ns-proxy-autoconfig"},{".prop", "text/plain"},{".ps", "application/postscript"},{".ptlk", "application/listenup"},{".pub", "application/x-mspublisher"},{".pvx", "video/x-pv-pvx"},{".qcp", "audio/vnd.qcelp"},{".qt", "video/quicktime"},{".qti", "image/x-quicktime"},{".qtif", "image/x-quicktime"},{".r3t", "text/vnd.rn-realtext3d"},{".ra", "audio/x-pn-realaudio"},{".ram", "audio/x-pn-realaudio"},{".ras", "image/x-cmu-raster"},{".rdf", "application/rdf+xml"},{".rf", "image/vnd.rn-realflash"},{".rgb", "image/x-rgb"},{".rlf", "application/x-richlink"},{".rm", "audio/x-pn-realaudio"},{".rmf", "audio/x-rmf"},{".rmm", "audio/x-pn-realaudio"},{".rnx", "application/vnd.rn-realplayer"},{".roff", "application/x-troff"},{".rp", "image/vnd.rn-realpix"},{".rpm", "audio/x-pn-realaudio-plugin"},{".rt", "text/vnd.rn-realtext"},{".rte", "x-lml/x-gps"},{".rtf", "application/rtf"},{".rtg", "application/metastream"},{".rtx", "text/richtext"},{".rv", "video/vnd.rn-realvideo"},{".rwc", "application/x-rogerwilco"},{".rar", "application/x-rar-compressed"},{".rc", "text/plain"},{".rmvb", "audio/x-pn-realaudio"},{".s3m", "audio/x-mod"},{".s3z", "audio/x-mod"},{".sca", "application/x-supercard"},{".scd", "application/x-msschedule"},{".sdf", "application/e-score"},{".sea", "application/x-stuffit"},{".sgm", "text/x-sgml"},{".sgml", "text/x-sgml"},{".shar", "application/x-shar"},{".shtml", "magnus-internal/parsed-html"},{".shw", "application/presentations"},{".si6", "image/si6"},{".si7", "image/vnd.stiwap.sis"},{".si9", "image/vnd.lgtwap.sis"},{".sis", "application/vnd.symbian.install"},{".sit", "application/x-stuffit"},{".skd", "application/x-koan"},{".skm", "application/x-koan"},{".skp", "application/x-koan"},{".skt", "application/x-koan"},{".slc", "application/x-salsa"},{".smd", "audio/x-smd"},{".smi", "application/smil"},{".smil", "application/smil"},{".smp", "application/studiom"},{".smz", "audio/x-smd"},{".sh", "application/x-sh"},{".snd", "audio/basic"},{".spc", "text/x-speech"},{".spl", "application/futuresplash"},{".spr", "application/x-sprite"},{".sprite", "application/x-sprite"},{".sdp", "application/sdp"},{".spt", "application/x-spt"},{".src", "application/x-wais-source"},{".stk", "application/hyperstudio"},{".stm", "audio/x-mod"},{".sv4cpio", "application/x-sv4cpio"},{".sv4crc", "application/x-sv4crc"},{".svf", "image/vnd"},{".svg", "image/svg-xml"},{".svh", "image/svh"},{".svr", "x-world/x-svr"},{".swf", "application/x-shockwave-flash"},{".swfl", "application/x-shockwave-flash"}, {".t", "application/x-troff"},{".tad", "application/octet-stream"},{".talk", "text/x-speech"},{".tar", "application/x-tar"},{".taz", "application/x-tar"},{".tbp", "application/x-timbuktu"},{".tbt", "application/x-timbuktu"},{".tcl", "application/x-tcl"},{".tex", "application/x-tex"},{".texi", "application/x-texinfo"},{".texinfo", "application/x-texinfo"},{".tgz", "application/x-tar"},{".thm", "application/vnd.eri.thm"},{".tif", "image/tiff"},{".tiff", "image/tiff"},{".tki", "application/x-tkined"},{".tkined", "application/x-tkined"},{".toc", "application/toc"},{".toy", "image/toy"},{".tr", "application/x-troff"},{".trk", "x-lml/x-gps"},{".trm", "application/x-msterminal"},{".tsi", "audio/tsplayer"},{".tsp", "application/dsptype"},{".tsv", "text/tab-separated-values"},{".ttf", "application/octet-stream"},{".ttz", "application/t-time"},{".txt", "text/plain"},{".ult", "audio/x-mod"},{".ustar", "application/x-ustar"},{".uu", "application/x-uuencode"},{".uue", "application/x-uuencode"},{".vcd", "application/x-cdlink"},{".vcf", "text/x-vcard"},{".vdo", "video/vdo"},{".vib", "audio/vib"},{".viv", "video/vivo"},{".vivo", "video/vivo"},{".vmd", "application/vocaltec-media-desc"}, {".vmf", "application/vocaltec-media-file"}, {".vmi", "application/x-dreamcast-vms-info"}, {".vms", "application/x-dreamcast-vms"},{".vox", "audio/voxware"},{".vqe", "audio/x-twinvq-plugin"},{".vqf", "audio/x-twinvq"},{".vql", "audio/x-twinvq"},{".vre", "x-world/x-vream"},{".vrml", "x-world/x-vrml"},{".vrt", "x-world/x-vrt"},{".vrw", "x-world/x-vream"},{".vts", "workbook/formulaone"},{".wax", "audio/x-ms-wax"},{".wbmp", "image/vnd.wap.wbmp"},{".web", "application/vnd.xara"},{".wav", "audio/x-wav"},{".wma", "audio/x-ms-wma"},{".wmv", "audio/x-ms-wmv"},{".wi", "image/wavelet"},{".wis", "application/x-InstallShield"},{".wm", "video/x-ms-wm"},{".wmd", "application/x-ms-wmd"},{".wmf", "application/x-msmetafile"},{".wml", "text/vnd.wap.wml"},{".wmlc", "application/vnd.wap.wmlc"},{".wmls", "text/vnd.wap.wmlscript"},{".wmlsc", "application/vnd.wap.wmlscriptc"},{".wmlscript", "text/vnd.wap.wmlscript"},{".wmv", "video/x-ms-wmv"},{".wmx", "video/x-ms-wmx"},{".wmz", "application/x-ms-wmz"},{".wpng", "image/x-up-wpng"},{".wps", "application/vnd.ms-works"},{".wpt", "x-lml/x-gps"},{".wri", "application/x-mswrite"},{".wrl", "x-world/x-vrml"},{".wrz", "x-world/x-vrml"},{".ws", "text/vnd.wap.wmlscript"},{".wsc", "application/vnd.wap.wmlscriptc"},{".wv", "video/wavelet"},{".wvx", "video/x-ms-wvx"},{".wxl", "application/x-wxl"},{".x-gzip", "application/x-gzip"},{".xar", "application/vnd.xara"},{".xbm", "image/x-xbitmap"},{".xdm", "application/x-xdma"},{".xdma", "application/x-xdma"},{".xdw", "application/vnd.fujixerox.docuworks"},{".xht", "application/xhtml+xml"},{".xhtm", "application/xhtml+xml"},{".xhtml", "application/xhtml+xml"},{".xla", "application/vnd.ms-excel"},{".xlc", "application/vnd.ms-excel"},{".xll", "application/x-excel"},{".xlm", "application/vnd.ms-excel"},{".xls", "application/vnd.ms-excel"},{".xlsx", "application/vnd.ms-excel"},// {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, 07{".xlt", "application/vnd.ms-excel"},{".xlw", "application/vnd.ms-excel"},{".xm", "audio/x-mod"},{".xml", "text/xml"},{".xmz", "audio/x-mod"},{".xpi", "application/x-xpinstall"},{".xpm", "image/x-xpixmap"},{".xsit", "text/xml"},{".xsl", "text/xml"},{".xul", "text/xul"},{".xwd", "image/x-xwindowdump"},{".xyz", "chemical/x-pdb"},{".yz1", "application/x-yz1"},{".z", "application/x-compress"},{".zac", "application/x-zaurus-zac"},{".zip", "application/zip"},{"", "*/*"}};2.获取File⽂件路径,⾃定义打开⽂件try {Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(Intent.ACTION_VIEW);//Uri.fromFile(new File()) 会出现乱码intent.setDataAndType(Uri.parse(Uri.decode(url)), FilePath.getMIMEType(url); startActivity(intent);Intent.createChooser(intent, "请选择对应的软件打开该附件!");} catch (ActivityNotFoundException e) {Toast.makeText(MainActivity.this, "附件打开失败,请下载相关软件!", Toast.LENGTH_SHORT).show(); }/*** --获取⽂件类型 --*/public static String getMIMEType(String filePath) {String type = "*/*";String fName = filePath;int dotIndex = stIndexOf(".");if (dotIndex < 0) {return type;}。
Android进阶之Spinner下拉框的使⽤⽅法Spinner有俩种实现⽅式,除去存储数据与读取数据不同的话,其他并没有什么区别Effect :第⼀种:在Res⽬录下,找到values⽂件夹下arrays.xml进⾏资源存储<string-array name="state"><item >今⽇</item><item >昨⽇</item><item >本周</item><item >上周</item><item >本⽉</item><item >上⽉</item></string-array>在代码中读取资源:String[] mItems = getResources().getStringArray(R.array.state);第⼆种:在代码中进⾏数据源的存储与读取,这篇⽂章中我将使⽤这种⽅式进⾏实现MainActivity :package com.example.dow.spinner;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.Spinner;import android.widget.TextView;import org.w3c.dom.Text;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {private Spinner mSpinner;private TextView mTv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);mSpinner = (Spinner) findViewById(R.id.sp_btn);//只是为了展⽰我们的实现效果,故可不要mTv = (TextView) findViewById(_content);//数据源ArrayList<String> spinners = new ArrayList<>();spinners.add("今⽇");spinners.add("昨⽇");spinners.add("本周");spinners.add("上周");spinners.add("本⽉");spinners.add("上⽉");//设置ArrayAdapter内置的item样式-这⾥是单⾏显⽰样式final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, yout.simple_spinner_item, spinners);//这⾥设置的是Spinner的样式,输⼊ simple_之后会提⽰有4⼈,如果专属spinner的话应该是俩种,在特殊情况可⾃⼰定义样式 adapter.setDropDownViewResource(yout.simple_spinner_item);//设置Adapter了mSpinner.setAdapter(adapter);//监听Spinner的操作mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {//选取时候的操作@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {mTv.setText(adapter.getItem(position));}//没被选取时的操作@Overridepublic void onNothingSelected(AdapterView<?> parent) {mTv.setText("No anything");}});}}MainActivity Xml :<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/activity_main"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.dow.spinner.MainActivity"><Spinnerandroid:padding="5dp"android:layout_gravity="center"android:layout_width="60dp"android:layout_height="wrap_content"android:id="@+id/sp_btn" /><TextViewandroid:padding="5dp"android:layout_gravity="center"android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/tv_content"/></LinearLayout>以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
android常见默认值修改目录文档说明 (2)默认值修改 (2)1. 情景模式的铃声资源修改 (2)2.默认铃声的修改 (3)3.音量修改 (4)3.1音量默认最大级别格数 (4)3.2 第一次开机或者恢复出厂设置时的默认音量大小的修改 (5)4.默认情景模式 (6)5. 情景模式中的常用开关 (7)6.设置中其他默认值 (7)7.壁纸 (9)7.1默认壁纸 (9)7.2桌面壁纸 (9)文档说明针对android智能机项目,每个客户的要求不同,所以经常涉及到要修改一些默认值,智能机中默认值修改经常涉及到设置模块,所以针对每个项目都需要修改默认值,最近自己整理了一下以前修改的一些默认值,对于后续项目,可以参考此修改。
此文档只是简单总结了一些默认值的修改,并未对代码流程进行分析,如果有兴趣,大家可以根据这些默认值的关键字作为学习的入口,进行深入分析,这些默认值的修改,只是针对展讯的8810平台,对于MTK平台,未做过研究,请注意区分不同平台,另外,一些默认值的修改,此处只是列出修改的文件,具体路径视不同项目而定。
默认值修改1. 情景模式的铃声资源修改情景模式的铃声资源修改(手机铃声、通知铃声、闹钟铃声等)铃声资源存放位置:TD/frameworks/base/data/sounds在此目录下有很多铃声还有一些文件夹,对比我们手机中所看到的铃声资源,并不是此目录下的全部资源,各个项目有自己的一套铃声资源,我们手机要内置那些资源主要是由此目录下OriginalAudio.mk文件进行控制的。
OriginalAudio.mk文件说明:LOCAL_PATH:= frameworks/base/data/soundsPRODUCT_COPY_FILES += \$(LOCAL_PATH)/F1_MissedCall.ogg:system/media/audio/notification s/F1_MissedCall.ogg \$(LOCAL_PATH)/F1_New_MMS.ogg:system/media/audio/notification s/F1_New_MMS.ogg \$(LOCAL_PATH)/F1_New_SMS.ogg:system/media/audio/notifications /F1_New_SMS.ogg \$(LOCAL_PATH)/Di_Di.ogg:system/media/audio/alarms/Di_Di.ogg \ $(LOCAL_PATH)/Afternoon_tea.ogg:system/media/audio/alarms/Afte rnoon_tea.ogg \$(LOCAL_PATH)/Church_Bells.ogg:system/media/audio/alarms/Churc h_Bells.ogg \此文件的主要作用是将目录下的某些特定的铃声资源copy到我们手机中对应的目录下(system/media/audio),所以我们将铃声资源放在哪个目录下并没有关系,只要copy到我们手机上对应的目录正确就OK了。
AndroidRecyclerview实现多选,单选,全选,反选,批量删除的功能效果图如下:Recyclerview 实现多选,单选,全选,反选,批量删除的步骤1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算数量等控件2.这⾥选中的控件没有⽤checkbox来做,⽤的是imageview,选中和不选中其实是两张图⽚3.默认是不显⽰选中的控件的,点击编辑的时候显⽰,点击取消的时候隐藏4.通过adapter和activity数据之间的传递,然后进⾏具体的操作具体代码如下:在recyclerview的布局中写全选,反选,删除,计数等相应的控件<LinearLayoutandroid:id="@+id/ll_mycollection_bottom_dialog"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:layout_gravity="bottom"android:visibility="gone"android:background="@color/app_bg"><Viewandroid:background="#e5e5e5"android:layout_width="match_parent"android:layout_height="1px"/><RelativeLayoutandroid:background="@color/white"android:layout_width="match_parent"android:layout_height="@dimen/px_90"><TextViewandroid:layout_centerVertical="true"android:id="@+id/tv"android:textColor="#1A1A1A"android:textSize="@dimen/px_28"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/px_30"android:text="@string/mine_certify_select" /><TextViewandroid:layout_centerVertical="true"android:layout_toRightOf="@+id/tv"android:textColor="#1A1A1A"android:textSize="@dimen/px_28"android:id="@+id/tv_select_num"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/px_18"android:text="0" /><Buttonandroid:textColor="@color/color_b7b8bd"android:textSize="@dimen/px_28"android:layout_centerVertical="true"android:background="@drawable/button__noclickable_shape"android:gravity="center"android:id="@+id/btn_delete"android:layout_width="@dimen/px_160"android:layout_height="@dimen/px_66"android:layout_marginRight="@dimen/px_30"android:layout_alignParentRight="true"android:text="删除" /><TextViewandroid:layout_centerVertical="true"android:id="@+id/select_all"android:layout_marginRight="@dimen/px_30"android:background="@drawable/bg_selete_all"android:layout_toLeftOf="@+id/btn_delete"android:layout_width="@dimen/px_160"android:layout_height="@dimen/px_66"android:text="全选"android:gravity="center"android:textColor="#000001"android:textSize="@dimen/px_28"/></RelativeLayout></LinearLayout>Adapter中的布局就不必再写了,就⼀个item,最左边⼀个imageview.<ImageViewandroid:id="@+id/check_box"android:src="@mipmap/ic_uncheck"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="@dimen/px_24"android:gravity="center"android:visibility="gone"/>布局写完开始写逻辑代码⾸先在adapter定义⼀个⽅法,以便在activity中拿到数据添加进adapter中 public void notifyAdapter(List<MyLiveList.MyLive> myLiveList,boolean isAdd){if (!isAdd){this.mMyLiveList=myLiveList;}else {this.mMyLiveList.addAll(myLiveList);}notifyDataSetChanged();}然后在activity中拿到获取到数据后调⽤adapter中的这个⽅法,添加数据mAdapter.notifyAdapter(data.getList(), false);在adapter中在判空,更有保证public List<MyLiveList.MyLive> getMyLiveList(){if (mMyLiveList == null) {mMyLiveList =new ArrayList<>();}return mMyLiveList;}然后adapter中的getItemCount就直接拿到上⾯这个mMyLiveList的⼤⼩就可以了接下来开始点击编辑的时候显⽰出imageview和recycleview中的底部全选反选部分定义两个变量private static final int MYLIVE_MODE_CHECK = 0;private static final int MYLIVE_MODE_EDIT = 1;//点击编辑的时候显⽰,顺便调mAdapter.setEditMode(mEditMode);赋值mEditMode = mEditMode == MYLIVE_MODE_CHECK ? MYLIVE_MODE_EDIT : MYLIVE_MODE_CHECK; if (mEditMode == MYLIVE_MODE_EDIT) {activity_btn.setText("取消");ll_mycollection_bottom_dialog.setVisibility(View.VISIBLE);editorStatus = true;} else {activity_btn.setText("编辑");ll_mycollection_bottom_dialog.setVisibility(View.GONE);editorStatus = false;onRefresh();}mAdapter.setEditMode(mEditMode);//当然,adapter中也有先关的变量在记录private static final int MYLIVE_MODE_CHECK = 0;int mEditMode = MYLIVE_MODE_CHECK;public void setEditMode(int editMode) {mEditMode = editMode;notifyDataSetChanged();}//在onBindViewHolder中做显⽰和隐藏的操作.holder.setIsRecyclable(false); // 为了条⽬不复⽤//显⽰和隐藏if (mEditMode == MYLIVE_MODE_CHECK) {holder.mCheckBox.setVisibility(View.GONE);} else {holder.mCheckBox.setVisibility(View.VISIBLE);为了⽅便记录选中的状态,在bean⾥⾯⽤个变量记起来public boolean isSelect;public boolean isSelect() {return isSelect;}public void setSelect(boolean isSelect) {this.isSelect = isSelect;}//然后点击条⽬选中和不选中的时候为Imageview设置不同的图⽚if(myLive.isSelect()) {holder.mCheckBox.setImageResource(R.mipmap.ic_checked);}else{holder.mCheckBox.setImageResource(R.mipmap.ic_uncheck);}//在adapter中暴漏⼀个Item的点击事件的接⼝public interface OnSwipeListener {void onItemClickListener(int pos,List<MyLiveList.MyLive> myLiveList);}/*在activity中的item点击事件中,来操作Imageview是否选中*///⽤⼀个变量记录private int index = 0;MyLive myLive = myLiveList.get(pos);boolean isSelect = myLive.isSelect();if (!isSelect) {index++;myLive.setSelect(true);if (index == myLiveList.size()) {isSelectAll = true;selectAll.setText("取消全选");}} else {myLive.setSelect(false);index--;isSelectAll = false;selectAll.setText("全选");}setBtnBackground(index);tv_select_num.setText(String.valueOf(index));radioAdapter.notifyDataSetChanged();/*** 根据选择的数量是否为0来判断按钮的是否可点击.** @param size*/private void setBtnBackground(int size) {if (size != 0) {mBtnDelete.setBackgroundResource(R.drawable.button_shape);mBtnDelete.setEnabled(true);mBtnDelete.setTextColor(Color.WHITE);} else {mBtnDelete.setBackgroundResource(R.drawable.button__noclickable_shape);mBtnDelete.setEnabled(false);mBtnDelete.setTextColor(ContextCompat.getColor(this, R.color.color_b7b8bd));}}⾄于全选和反选的操作,就是遍历这个bean类,得到他的选择状态,重新设置就可以了.if (radioAdapter == null) return;if (!isSelectAll) {for (int i = 0, j = radioAdapter.getMyLiveList().size(); i < j; i++) {radioAdapter.getMyLiveList().get(i).setSelect(true);}index = radioAdapter.getMyLiveList().size();mBtnDelete.setEnabled(true);selectAll.setText("取消全选");isSelectAll = true;} else {for (int i = 0, j = radioAdapter.getMyLiveList().size(); i < j; i++) {radioAdapter.getMyLiveList().get(i).setSelect(false);}index = 0;mBtnDelete.setEnabled(false);selectAll.setText("全选");isSelectAll = false;}radioAdapter.notifyDataSetChanged();setBtnBackground(index);tv_select_num.setText(String.valueOf(index));最后删除的话就调删除的接⼝,遍历这个bean,判断当前的状态如果是选中的状态,就删除! 这样就OK了以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
android怎样⾃定义设置下拉列表样式图样:实现⽅式:1、⽔平布局⼀个TextView和⼀个ImageView(⼩⿊箭头)2、实现点击ImageView的单击事件,弹出PopupWindow3、PopupWindow中实现下拉列表关键代码⽰例:1、布局<LinearLayout android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><TextView/><ImageView /></LinearLayout>2、单击事件image.setBackgroundResource(R.drawable.gerendang_jiantou);image.setOnClickListener(new OnClickListener() {public void onClick(View v) {//弹出popupwindow}});3、pupupwindow相关代码ListView lv = new ListView(this);adapter = new OptionsAdapter(context, datas); // 根据数据,设置下拉框显⽰list.setAdapter(adapter);/*** 两种不同长度的下拉框,主要是为了适应屏幕的⼤⼩*/if (p_width > 0) {pWindow = new PopupWindow(v, par.getWidth(), 150);} else {pWindow = new PopupWindow(v, par.getWidth(), 300);}pWindow.setFocusable(true); //能够焦点获得pWindow.setBackgroundDrawable(new BitmapDrawable()); //设置背景pWindow.setOutsideTouchable(true); //外部点击关闭pWindow.update(); //更新位置pWindow.showAsDropDown(text);//显⽰下拉列表。
android实现下拉框(spinner),⾃⼰定义⼤⼩颜⾊背景位置,去掉默认样式⿊边1. 实现最简单的spinnerxml⽂件,有⼀个TextView,⼀个Spinner:<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools" android:layout_width="match_parent"android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"><TextView android:text="@string/hello_world" android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/textView" /><Spinnerandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/spinner"android:layout_below="@+id/textView"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"android:layout_marginTop="50dp" /></RelativeLayout>.java⽂件public class MainActivity extends ActionBarActivity {private static final String[] name={"刘备","关⽻","张飞","曹操","⼩乔"};private TextView text ;private Spinner spinner;private ArrayAdapter<String> adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);text = (TextView) findViewById(R.id.textView);spinner = (Spinner) findViewById(R.id.spinner);//将可选内容与ArrayAdapter连接起来,simple_spinner_item是android系统⾃带样式adapter = new ArrayAdapter<String>(this,yout.simple_spinner_item,name);//设置下拉列表的风格,simple_spinner_dropdown_item是android系统⾃带的样式,等会⾃⼰定义改动adapter.setDropDownViewResource(yout.simple_spinner_dropdown_item);//将adapter 加⼊到spinner中spinner.setAdapter(adapter);//加⼊事件Spinner事件监听spinner.setOnItemSelectedListener(new SpinnerSelectedListener());}//使⽤数组形式操作class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener {public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {text.setText("我的名字是:"+name[arg2]);}public void onNothingSelected(AdapterView<?> arg0) {}}执⾏效果:—————————————————————使⽤xml⽂件作为数据源创建adapter:<?xml version="1.0" encoding="utf-8"?><resources><string-array name="songs"><item>没有⼈</item><item>我的快乐时代</item><item>黄⾦时代</item><item>习惯失恋</item><item>你来⾃哪颗星</item></string-array></resources>.java⽂件:public class SpinnerActivity extends Activity {private TextView text;private Spinner spinner;private ArrayAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(yout.spinner);spinner = (Spinner) findViewById(R.id.spinner);text = (TextView) findViewById(R.id.textView);//将可选内容与ArrayAdapter连接起来adapter = ArrayAdapter.createFromResource(this, R.array.songs, yout.simple_spinner_item); //设置下拉列表的风格adapter.setDropDownViewResource(yout.simple_spinner_dropdown_item);//将adapter2 加⼊到spinner中spinner.setAdapter(adapter);//加⼊事件Spinner事件监听spinner.setOnItemSelectedListener(new SpinnerXMLSelectedListener());}//使⽤XML形式操作class SpinnerXMLSelectedListener implements OnItemSelectedListener{public void onItemSelected(AdapterView<?> arg0, View arg1, int position,long arg3) {text.setText("你使⽤什么样的⼿机:"+adapter.getItem(position));}public void onNothingSelected(AdapterView<?> arg0) {}}}spinner有三个属性能够记⼀下:android:spinnerMode="dropdown"android:dropDownVerticalOffset="-50dp"android:dropDownHorizontalOffset="20dp"android:popupBackground="#f0000000"spinnerMode=dropdown时,为下拉模式spinnerMode=dialog时,会在界⾯中间弹出android:popupBackground=”#f0000000”,能够去除spinner的默认⿊边dropDownVerticalOffset和dropDownHorizontalOffset都是改变下拉框位置的2.⾃⼰定义spinner样式改变字体颜⾊、⼤⼩和背景:新建⼀个xml布局⽂件,命名为spinner_item.xml:<?xml version="1.0" encoding="utf-8"?><TextViewxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingRight="5dp"android:textColor="#f77718"android:gravity="left"android:textSize="15sp"android:padding="10dp"android:singleLine="true"android:text="New Text"android:id="@+id/textView32" />再创建⼀个下拉框样式布局的xml⽂件。