课题=ANDROID 自定义SPINNER和其下拉窗口
Android之Spinner用法详解
Android之Spinner⽤法详解⽬录⼀、Spinner的两种展⽰样式⼆、Spinner相关⽅法三、Spinner⽤法举例XML布局⽂件activity_main.xml选中⽂字样式item_select.xml列表其他⽂字样式item_dropdown.xmlJava代码MainActivity.java四、dropdown模式下的列表分割线⼀、Spinner的两种展⽰样式下拉列表的展⽰⽅式有两种,⼀种是在当前下拉框的正下⽅展⽰列表,此时把spinnerMode属性设置为dropdown;另⼀种是在页⾯中部以对话框形式展⽰列表,此时把SpinnerMode属性设置为dialog。
⼆、Spinner相关⽅法setPrompt:设置标题⽂字。
setAdapter:设置下拉列表的适配器。
setSelection:设置当前选中哪项。
注意该⽅法要在setAdapter⽅法之后调⽤。
setOnItemSelectedListener:设置下拉列表的选择监听器,该监听器要实现接⼝OnItemSelectedListener。
三、Spinner⽤法举例XML布局⽂件activity_main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Spinnerandroid:layout_width="200dp"android:id="@+id/spinner"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:spinnerMode="dropdown"android:dropDownVerticalOffset="45dp"android:background="@null"/></LinearLayout>选中⽂字样式item_select.xml<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="45dp"android:background="@android:color/holo_blue_dark"android:textSize="14sp"android:textColor="@android:color/holo_red_light"android:gravity="center"/>列表其他⽂字样式item_dropdown.xml<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="45dp"android:textColor="@android:color/black"android:textSize="14sp"android:gravity="center"/>Java代码MainActivity.javapublic class MainActivity extends AppCompatActivity{private String[] starArray = {"⽔星","⾦星","地球","⽕星","⽊星","⼟星"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);initSpinner();}private void initSpinner(){//声明⼀个下拉列表的数组适配器ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this,yout.item_select,starArray);//设置数组适配器的布局样式starAdapter.setDropDownViewResource(yout.item_dropdown);//从布局⽂件中获取名叫sp_dialog的下拉框Spinner sp = findViewById(R.id.spinner);//设置下拉框的标题,不设置就没有难看的标题了sp.setPrompt("请选择⾏星");//设置下拉框的数组适配器sp.setAdapter(starAdapter);//设置下拉框默认的显⽰第⼀项sp.setSelection(0);//给下拉框设置选择监听器,⼀旦⽤户选中某⼀项,就触发监听器的onItemSelected⽅法sp.setOnItemSelectedListener(new MySelectedListener());}class MySelectedListener implements AdapterView.OnItemSelectedListener{@Overridepublic void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {Toast.makeText(MainActivity.this,"您选择的是:"+starArray[i],Toast.LENGTH_SHORT).show();}@Overridepublic void onNothingSelected(AdapterView<?> adapterView) {}}}四、dropdown模式下的列表分割线只需要在style中添加如下代码即可添加样式<style name="XSpinnerStyle" parent="android:Widget.ListView.DropDown"><!-- 分隔线颜⾊ --><item name="android:divider">#000000</item><item name="android:dividerHeight">1dp</item></style>然后在AppTheme中调⽤<item name="android:dropDownListViewStyle">@style/XSpinnerStyle</item>但注意,该分割线只有是dropdown样式时才会显⽰到此这篇关于Android之Spinner⽤法详解的⽂章就介绍到这了,更多相关Android之Spinner⽤法内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
android客户端二级下拉框级联操作
android客户端⼆级下拉框级联操作在项⽬中,为了提⾼⽤户的体验效果,我们会⽤到级联操作,在android中关于下拉框的级联操作,我们可以使⽤Spinner。
关于Spinner,来⾃官⽅⽂档是这样介绍的:A view that displays one child at a time and lets the user pick among them. The items in the Spinner come from the associatedwith this view。
简⽽⾔之就是is a widget similar to a drop-down list for selecting items.这次项⽬中的需求是这样的,⽤户选择⼀个城市,⼆级下拉框⾃动获取该城市下的所有区/县,下⾯分布讲解。
1. 对于android应⽤程序⽽⾔,布局时是不可缺少的,很重要,就在第⼀点来讲,采⽤两个LinearLayout布局,第⼀个LinearLayout采⽤垂直⽅向总体布局,第⼆个LinearLayout采⽤⽔平⽅向对说明信息进⾏⼦节点布局View Code2. 这⾥主要在Activity中对布局⽂件进⾏操作。
1. 对⼀些信息的声明://市区/⼦菜单项信息private String[][] areaData = CityCountry.areaData;private ArrayAdapter<CharSequence> adapterArea = null;//spinner城市private Spinner mCity = null;//spinner县区private Spinner mCountry = null;2. 获得Spinner对象:// spinner下拉列表框⼆级菜单级联mCity = (Spinner) super.findViewById(R.id.city);mCountry = (Spinner) super.findViewById(R.id.area);3. 注册Spinner setOnItemSelectedListener监听事件:mCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3){// 表⽰选项改变的时候触发MppspPhoneAlarmAct.this.adapterArea = new ArrayAdapter<CharSequence>(MppspPhoneAlarmAct.this,// 定义所有的列表项yout.simple_spinner_item, MppspPhoneAlarmAct.this.areaData[position]);// 设置⼆级下拉列表的选项内容MppspPhoneAlarmAct.this.mCountry.setAdapter(MppspPhoneAlarmAct.this.adapterArea);}@Overridepublic void onNothingSelected(AdapterView<?> arg0){}});3. 部分效果图如下:。
Android学习笔记_72_Spinner的用法
Android学习笔记_72_Spinner的⽤法⼀、普通1、<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="/apk/res/android"android:id="@android:id/text1"android:layout_width="match_parent"android:layout_height="wrap_content"android:ellipsize="marquee"android:gravity="left"android:paddingLeft="8dip"android:singleLine="true"android:textSize="12sp"android:textStyle="bold"android:textColor="@color/gsdk_black"android:text="sdf"/>2private String[] method = null;ArrayAdapter<String> methodAdapter = new ArrayAdapter<String>(this,yout.simple_spinner_item, method); methodSpinner = (Spinner) findViewById(R.id.spinner_recharge_type);moneyAdapter.setDropDownViewResource(yout.select_dialog_item);methodSpinner.setAdapter(methodAdapter);⼆、⾃定义spinner:1、配置⽂件:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_spinner_id"android:layout_width="60dp"android:layout_height="80dp"android:visibility="gone"/><TextViewandroid:id="@+id/tv_spinner_name"style="?android:attr/spinnerDropDownItemStyle"android:layout_width="match_parent"android:layout_height="35dip"android:gravity="center_vertical"android:paddingLeft="10dp"android:textColor="#000"android:textSize="@dimen/font_body"/></LinearLayout>2、填充数据List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();for (Project project : linkedList) {Map<String, Object> map = new HashMap<String, Object>();map.put("name", project.getName());map.put("id", project.getId());data.add(map);}searchAdapter = new SimpleAdapter(PurchaseActivity.this, data,yout.purchase_search_spinner, new String[]{"id","name"},new int[]{_spinner_id,_spinner_name});searchSpinner.setAdapter(searchAdapter);3、点击事件:注意点击事件是OnItemSelectedListener⽽不是OnItemClickListener.private class SearchSpinnerItemListener implements OnItemSelectedListener{@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {Spinner spinner = (Spinner) parent;Map<String, Object> projectMap = (Map<String, Object>) spinner.getItemAtPosition(position);int pid = Integer.valueOf(projectMap.get("id")+"");String pname = (String) projectMap.get("name");Log.i("Purchase","pid: "+pid+" pname: "+pname);}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}}。
Android 自定义Spinner
Android 自定义Spinner在Android的UI开发中,Spinner(下拉列表)总是可以用到的,一个简单的自定义Spinner制作我们只需要记住这重要的五步,一个Spinner就可以应用而生了。
(1)新建一个Android工程,名字为SpinnerTest1。
修改layout下的main.xml,添加一个Textview和一个Spinner,文件内容如下:Java代码1<?xmlversion="1.0"encoding="utf-8"?>23<LinearLayout4567android:layout_width="fill_parent"89android:layout_height="fill_parent"1011android:orientation="vertical"1213xmlns:andro>1415<TextView1617android:layout_width="fill_parent"1819android:layout_height="wrap_content"2021android:text="你选择的是"2223android:textSize="25sp">2425</TextView>2627<Spinner2829android:layout_width="fill_parent"3031android:layout_height="wrap_content">3233</Spinner>3435<!--定义一个下拉菜单-->3637</LinearLayout>(2)修改你的SpinnerTest1类,在这里我们就要记住五步来自定义一个Spinner了,完整代码及五步注释如下:Java代码38packageeoe.spinner;39404142importjava.util.ArrayList;4344importjava.util.List;4546importandroid.app.Activity;4748importandroid.os.Bundle;4950importandroid.view.MotionEvent;5152importandroid.view.View;5354importandroid.view.View.OnTouchListener;5556importandroid.view.animation.Animation;5758importandroid.view.animation.AnimationUtils;5960importandroid.widget.AdapterView;6162importandroid.widget.ArrayAdapter;6364importandroid.widget.Spinner;6566importandroid.widget.TextView;67686970publicclassSpinnerTest1extendsActivity{7172/**Calledwhentheactivityisfirstcreated.*/737475767778privateList<String>list=newArrayList<String>();80privateTextViewmyTextView;8182privateSpinnermySpinner;8384privateArrayAdapter<String>adapter;8586privateAnimationmyAnimation;87888990@Override9192publicvoidonCreate(BundlesavedInstanceState){9394super.onCreate(savedInstanceState);9596setContentView(yout.main);9798//第一步:添加一个下拉列表项的list,这里添加的项就是下拉列表的菜单项99100list.add("北京");101102list.add("上海");103104list.add("深圳");105106list.add("南京");107108list.add("重庆");109110111112myTextView=(TextView)findView ById(R.id.TextView_Show);113114mySpinner=(Spinner)findView ById(R.id.spinner_City);115116//第二步:为下拉列表定义一个适配器,这里就用到里前面定义的list。
列表类组件(Spinner、ListView)
取选择项的值
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
方法,设置footer View。 5、android:headerDividersEnabled 用于设置是否在header View后绘制分隔条,默认为true。 当设为false时,ListView将不会在各个header之间绘制
divider,否则要通过addHeaderView()方法设置header View。
ArrayAdapter<String>(this,yout.
simple_list_item_checked,ctype); listView.setAdapter(adapter);// 将适配器与ListView关联
3. 添加OnItemClickListener事件
(2)Spinner下拉列表框
如何使用Spinner 1、获取Spinner对象 2、创建Adapter
3、为Spinner对象设置Adaper
4、为Spinner对象设置监听器 创建Adapter分为两步: 1、新建Adapter对象inner对象 通过Acitivity.findViewById(int id)获取 2、创建Adapter 3个参数: Context上下文关系,属于哪个应用程序 textViewResourceId,TextView的ID 向列表中添加数据,静态的String数组,或者动态的数组 List<String> 3、为Adapter设置下拉视图资源 ArrayAdapter.setDropDownViewResource(int resource)方法设置 4、为Spinner对象设置Adapter AbsSpinner.setAdapter(SpinnerAdapter adapter)将Spinner和 SpinnerAdapter关联 5、为Spinner对象设置监听器 添加监听事件
Android Spinner的三种编写方法详解
Android Spinner的三种编写方法详解例子一:Spinner的基本实现方法步骤一:编写Android XML文件<LinearLayout …… ><TextView android:id="@+id/spinner_label" ……/><!-- 经过我们的测试android:drawSelectorOnTop="true | false"不起作用,因此此参数可以不设置--><Spinner android:id="@+id/spinner"android:layout_width="fill_parent"android:layout_height="wrap_content" /></LinearLayout>步骤二:源代码1)设置Spinner之中的元素内容,采用了ArrayAdapter来描述,并通过setApdater()来设置adapterprivate String[] items= {"lorem", "ipsum", "dolor", "sit", "amet",….ArrayAdapter<String> aa = newArrayAdapter<String>(this,yout.simple_spinner_item,items); //第二个参数表示spinner没有展开前的UI类型spin.setAdapter(aa); //之前已经通过Spinner spin = (Spinner)findViewById(R.id.spinner);来获取spin对象2)设置spinner展开的方式,在上面,我们将通过设置ArrayAdapter的第二个参数,设置了spinner没有展开前的UI格式,simple_spinner_item是textview的label 方式,而simple_spinner_dropdown_item这是点击圆圈选择方式。
AndroidSpinner的简单用法。
AndroidSpinner的简单⽤法。
今天学到的是spinner,就是下拉列表,这可不是ExpandListView哈。
闲话不解释。
这是控件,所以先上布局:就不上线性布局了,基本上可以总结出,控件都得在布局⾥写,写之前嵌个布局就⾏。
<Spinner android:layout_height="wrap_content" android:layout_width="match_parent" android:entries="@array/spinner_arr" 这边介绍下,这是下拉列表的各个列表的数据,这是给第⼆个简单的列表写法⽤的,我们现在讲的是⾃⼰写⾃⼰的列表数据 android:prompt="@string/spinner_prompt" 这个是下拉列表的标题,不能在这直接写字符串,得到Values⾥的string⾥写好,再调⽤ android:spinnerMode="dialog" 有两种⽅式,dialog和dropdown,⼀个是对话框,⼀个是下拉框。
android:id="@+id/sp1"/>这个是在Values⾥头创建的⼀个array:<?xml version="1.0" encoding="UTF-8"?>-<resources>-<string-array name="spinner_arr"><item>星期⼀</item><item>星期⼆</item><item>星期三</item><item>星期四</item><item>星期五</item><item>星期六</item><item>星期⽇</item></string-array></resources>然后这边就先在drawable⾥创建⼏张图⽚再搞个布局来给下拉列表⾥的列表这边和ExpandListView差不多,我们得写个适配器,会不会奇怪,为啥List有个Person。
Android中Spinner(下拉框)控件的使用详解
Android中Spinner(下拉框)控件的使⽤详解android给我们提供了⼀个spinner控件,这个控件主要就是⼀个列表,那么我们就来说说这个控件吧,这个控件在以前的也看见过,但今天还是从新介绍⼀遍吧。
Spinner位于 android.widget包下,每次只显⽰⽤户选中的元素,当⽤户再次点击时,会弹出选择列表供⽤户选择,⽽选择列表中的元素同样来⾃适配器。
Spinner是View类得⼀个⼦类。
1.效果图2.创建页⾯⽂件(main.xml)<Spinnerandroid:id="@+id/spinner1"android:layout_width="match_parent"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/tvResult"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="选择的⽔果" />3.创建下拉框的数据源List<String> list = new ArrayList<String>();list.add("苹果");list.add("⾹蕉");list.add("橘⼦");list.add("⾹蕉");4.创建适配器(下拉框的数据源是来⾃适配器)ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, yout.simple_spinner_item,list);5.为适配器添加样式adapter.setDropDownViewResource(yout.simple_spinner_dropdown_item);系统提供的样式如下simple_spinner_dropdown_item(列表-间距较⾼⽐较好看)simple_spinner_item(列表-间距紧凑不好看)simple_list_item_checked(复选框-选中的有绿沟)simple_list_item_single_choice (单选按钮)6.向控件Spinner添加适配器Spinner sp=(Spinner) findViewById(R.id.spinner1);sp.setAdapter(adapter);释义1. setAdapter(SpinnerAdapter adapter) ,从类的继承关系上看,ArrayAdapter是SpinnerAdapter接⼝的间接实现类7.实现选择项事件(使⽤匿名类实现接⼝)sp.setOnItemSelectedListener(new OnItemSelectedListener() {// parent:为控件Spinner view:显⽰⽂字的TextView position:下拉选项的位置从0开始public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {TextView tvResult = (TextView) findViewById(Result);//获取Spinner控件的适配器ArrayAdapter<String> adapter = (ArrayAdapter<String>) parent.getAdapter();tvResult.setText(adapter.getItem(position));}//没有选中时的处理public void onNothingSelected(AdapterView<?> parent) {}});8.后台整体代码如下public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);List<String> list = new ArrayList<String>();list.add("苹果");list.add("⾹蕉");list.add("橘⼦");list.add("⾹蕉");ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, yout.simple_spinner_item, list);adapter.setDropDownViewResource(yout.simple_list_item_single_choice);Spinner sp = (Spinner) findViewById(R.id.spinner1);sp.setAdapter(adapter);sp.setOnItemSelectedListener(new OnItemSelectedListener() {// parent:为控件Spinner view:显⽰⽂字的TextView position:下拉选项的位置从0开始public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {TextView tvResult = (TextView) findViewById(Result);//获取Spinner控件的适配器ArrayAdapter<String> adapter = (ArrayAdapter<String>) parent.getAdapter();tvResult.setText(adapter.getItem(position));}//没有选中时的处理public void onNothingSelected(AdapterView<?> parent) {}});}以上所述是⼩编给⼤家介绍的Android中Spinner(下拉框)控件的使⽤详解,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
Android之spinner
Android之spinnerspinner:就是下拉列表,这个工程的就是创建一个下拉列表,当选择列表中的一个Item 后,就将这个Item显示在首项上。
先看看效果:layout中的main.xml文件:1.<?xml version="1.0" encoding="utf-8"?>2.<LinearLayout3. xmlns:android="/apk/res/android"4. android:orientation="vertical"5. android:layout_width="fill_parent"6. android:layout_height="fill_parent"7. >8.9. <TextView10. android:id="@+id/myText"11. android:layout_width="fill_parent"12. android:layout_height="wrap_content"13. android:text="选择你喜欢的颜色:"14. />15. //创建一个spinner,prompt就是设置下拉列表16. //的内容,我这里的内容是从values下的string.xml17. //中取得的18. <Spinner19. android:id="@+id/mySpinner"20. android:layout_width="fill_parent"21. android:layout_height="wrap_content"22. android:prompt="@string/color"23. >24.25. </Spinner>26.27.28.</LinearLayout>values中的string.xml文件:1.<?xml version="1.0" encoding="utf-8"?>2.<resources>3.4. <string name="app_name">SpinnerProject</string>5. <string name="hello_world">Hello world!</string>6. <string name="menu_settings">Settings</string>7.8. <string name="color" >选择颜色:</string>9. //这里是定义个数组,就是下拉列表中的内容,这里你可以写该成你自己的选项10. <string-array name="colors">11. <item>黑色 | Black</item>12. <item>白色 | White</item>13. <item>灰色 | gray</item>14. <item>绿色 | green</item>15. <item>红色 | red</item>16. <item>蓝色 | blue</item>17. <item>粉色 | Pink</item>18. </string-array>19.</resources>Activaty.java文件:1.package com.cheng.spinnerproject;2.3.import android.os.Bundle;4.import android.R.string;5.import android.app.Activity;6.import android.view.Menu;7.import android.view.View;8.import android.widget.AdapterView;9.import android.widget.AdapterView.OnItemSelectedListener;10.import android.widget.ArrayAdapter;11.import android.widget.Spinner;12.import android.widget.Toast;13.14.public class SpinnerActivaty extends Activity {15.16. private Spinner mSpinner;17. @Override18. protected void onCreate(Bundle savedInstanceState) {19. super.onCreate(savedInstanceState);20. super.setContentView(yout.main);21. //得到在xml文件中定义的spinner22. mSpinner = (Spinner)findViewById(R.id.mySpinner);23. //准备一个数组适配器,这里的样式是使用系统的样式24. ArrayAdapter adapter = ArrayAdapter.createFromResource(SpinnerActivaty.this, R.array.colors, yout.select_dialog_item);25. //设置下拉列表的样式26. adapter.setDropDownViewResource(yout.simple_spinner_dropdown_item);27. //为下拉列表设置适配器28. mSpinner.setAdapter(adapter);29.30. //定义元素选择监听器31. OnItemSelectedListener oisl = new OnItemSelectedListener() {32.33. @Override34. public void onItemSelected(AdapterView<?> parent, View view,35. int position, long id) {36. // TODO Auto-generated method stub37. //当选择了一个Item之后,我们用一个Toast将选择的信息显示出来38. Toast.makeText(SpinnerActivaty.this, "selected"+parent.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show() ;39. }40.41. @Override42. public void onNothingSelected(AdapterView<?> arg0) {43. // TODO Auto-generated method stub44.45. }46. };47. //为下拉列表绑定事件监听器48. mSpinner.setOnItemSelectedListener(oisl);49. }50.51. @Override52. public boolean onCreateOptionsMenu(Menu menu) {53. // Inflate the menu; this adds items to the action bar if itis present.54. getMenuInflater().inflate(R.menu.main, menu);55. return true;56. }57.58.}。
Android高级界面组件学情分析
第一部分 Android基础界面控件一、回顾上节课知识,继续讲解Android基础界面控件(1)对上节课留的知识进行答疑(2)进入本节课本节课主题,讲解Android高级界面控件图片控件Android界面美观离不开图片控件,ImageView是视图控件,它继承自View,其功能是在屏幕中显示图像。
常见基本图片控件ImageView,ImageButton,ImageSwicher。
(3)明确学习目标熟练掌握ImageView,ImageButton,ImageSwicher的用法。
二、重点知识讲解(1)老师创建情境,引入ImageView组件。
①演示显示图片项目,提出问题Android界面如何呈现一张图片?图片在项目中放在哪里?②图片存放在drawable文件夹③android:src属性指定图片来源,值为@drawable/***。
④分析android:scaleType属性⑤老师操作演示android:scaleType显示效果(2)ImageButton图片按钮①分析图片按钮。
②提出问题:如果想要在按钮上达到既有图片又有文字的效果,应该怎么做呢?让学生讨论。
③分析ImageButton中src和background的区别。
④在XML文件中采用selector标签,定义自定义图片。
⑤老师操作演示使3种不同方式实现图片监听⑥提出问题图片控件灰色背景如何去掉白色?⑦分析讲解颜色值的表示方法:#ARGB、#AARRGGBB、#RGB、#RRGGBB(3)图片切换器ImageSwitcher①演示项目图片切换项目。
②分析ImageSwitcher实现图片实现原理。
③老师操作演示ImageSwitcher图片切换器(4)项目完成演示。
老师引导学生分析“竞赛登陆”布局、控件摆放、涉及控件属性等(4)上机训练。
ImageView、ImageButton、ImageSwitcher案例项目。
(5)学生掌握检查。
Spinner样式大全
Spinner 样式大全
Spinner 其实是一个列表选择框,不过Android 的列表选择框并不需
要显示下拉列表,而是相当于弹出一个菜单供用户选择。
Spinner 与Gallery 都继承了AbsSpinner,AbsSpinner 继承了AdapterView,因此他也表现出AdapterView 的特征:只要为AdapterView 提供Adapter 即可。
android:entries 属性并不是Spinner 定义的,而不是AbsSpinner 中定义的,因此Gallery(继承了AbsSpinner)也支持该XML 属性。
如果开发者使用Spinner 时已经可以确定列表选择框里的列表项,则
完全不需要编写代码,只要为Spinner 指定android:entries 属性即可让Spinner 正常工作;如果程序需要在程序运行时动态决定Spinner 的列表项,或者程
序需要对Spinner 的列表项进行定制,则可使用Adapter 提供列表项。
如下界面布局文件中定义了两个Spinner 组件,其中一个Spinner 组
件指定了android:entries 属性,因此需要在Activity 中为他设置Adapter。
Android中自定义ListView控件实现下拉刷新,简单实用效果好(原创)
花了一天时间写出了这个类来实现下拉刷新。
首先这是一个自定义的listView控件类,我在许多项目中都用到了它,效果很稳定。
实现也很简单。
用的时候其他功能都和系统提供的ListView一样,就只是多了一个下拉刷新监听。
用这个类替代系统提供的ListView,下拉刷新再也不会烦恼了。
\(^o^)/~希望对大家有用。
我写的自定义ListView的代码:import java.util.Date;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import youtInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.animation.LinearInterpolator;import android.view.animation.RotateAnimation;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ProgressBar;import android.widget.TextView;public class MyListView extends ListView implements OnScrollListener {private static final String TAG = "listview";private final static int RELEASE_To_REFRESH = 0;private final static int PULL_To_REFRESH = 1;private final static int REFRESHING = 2;private final static int DONE = 3;private final static int LOADING = 4;// 实际的padding的距离与界面上偏移距离的比例private final static int RATIO = 3;private LayoutInflater inflater;private LinearLayout headView;private TextView tipsTextview;private TextView lastUpdatedTextView;private ImageView arrowImageView;private ProgressBar progressBar;private RotateAnimation animation;private RotateAnimation reverseAnimation;// 用于保证startY的值在一个完整的touch事件中只被记录一次private boolean isRecored;private int headContentWidth;private int headContentHeight;private int startY;private int firstItemIndex;private int state;private boolean isBack;private OnRefreshListener refreshListener;private boolean isRefreshable;public MyListView(Context context) {super(context);init(context);}public MyListView(Context context, AttributeSet attrs) { super(context, attrs);init(context);}private void init(Context context) {setCacheColorHint(context.getResources().getColor(R.color.tran sparent));inflater = LayoutInflater.from(context);headView= (LinearLayout) inflater.inflate(yout.head, null);arrowImageView = (ImageView) headView.findViewById(R.id.head_arrowImageView);arrowImageView.setMinimumWidth(70);arrowImageView.setMinimumHeight(50);progressBar = (ProgressBar) headView.findViewById(R.id.head_progressBar);tipsTextview = (TextView)headView.findViewById(R.id.head_tipsTextView);lastUpdatedTextView = (TextView) headView.findViewById(R.id.head_lastUpdatedTextView);measureView(headView);headContentHeight = headView.getMeasuredHeight();headContentWidth = headView.getMeasuredWidth();headView.setPadding(0, -1 * headContentHeight, 0, 0);headView.invalidate();Log.v("size", "width:" + headContentWidth + " height:"+ headContentHeight);addHeaderView(headView, null, false);setOnScrollListener(this);animation = new RotateAnimation(0, -180,RotateAnimation.RELATIVE_TO_SELF, 0.5f,RotateAnimation.RELATIVE_TO_SELF, 0.5f);animation.setInterpolator(new LinearInterpolator());animation.setDuration(250);animation.setFillAfter(true);reverseAnimation = new RotateAnimation(-180, 0,RotateAnimation.RELATIVE_TO_SELF, 0.5f,RotateAnimation.RELATIVE_TO_SELF, 0.5f);reverseAnimation.setInterpolator(new LinearInterpolator());reverseAnimation.setDuration(200);reverseAnimation.setFillAfter(true);state = DONE;isRefreshable = false;}public void onScroll(AbsListView arg0, int firstVisiableItem, int arg2,int arg3) {firstItemIndex = firstVisiableItem;}public void onScrollStateChanged(AbsListView arg0, int arg1) { }public boolean onTouchEvent(MotionEvent event) {if (isRefreshable) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:if (firstItemIndex == 0 && !isRecored) {isRecored = true;startY = (int) event.getY();Log.v(TAG, "在down时候记录当前位置‘");}break;case MotionEvent.ACTION_UP:if (state != REFRESHING && state != LOADING) { if (state == DONE) {// 什么都不做}if (state == PULL_To_REFRESH) {state = DONE;changeHeaderViewByState();Log.v(TAG, "由下拉刷新状态,到done状态");}if (state == RELEASE_To_REFRESH) {state = REFRESHING;changeHeaderViewByState();onRefresh();Log.v(TAG, "由松开刷新状态,到done状态");}}isRecored = false;isBack = false;break;case MotionEvent.ACTION_MOVE:int tempY = (int) event.getY();if (!isRecored && firstItemIndex == 0) {Log.v(TAG, "在move时候记录下位置");isRecored = true;startY = tempY;}if(state!= REFRESHING&& isRecored&& state!= LOADING) {// 保证在设置padding的过程中,当前的位置一直是在head,否则如果当列表超出屏幕的话,当在上推的时候,列表会同时进行滚动// 可以松手去刷新了if (state == RELEASE_To_REFRESH) {setSelection(0);// 往上推了,推到了屏幕足够掩盖head的程度,但是还没有推到全部掩盖的地步if(((tempY - startY) / RATIO< headContentHeight)&& (tempY - startY) > 0) {state = PULL_To_REFRESH;changeHeaderViewByState();Log.v(TAG, "由松开刷新状态转变到下拉刷新状态");}// 一下子推到顶了else if (tempY - startY <= 0) {state = DONE;changeHeaderViewByState();Log.v(TAG, "由松开刷新状态转变到done状态");}// 往下拉了,或者还没有上推到屏幕顶部掩盖head的地步else {// 不用进行特别的操作,只用更新paddingTop的值就行了}}// 还没有到达显示松开刷新的时候,DONE或者是PULL_To_REFRESH状态if (state == PULL_To_REFRESH) {setSelection(0);// 下拉到可以进入RELEASE_TO_REFRESH的状态if((tempY - startY) / RATIO>= headContentHeight) {state = RELEASE_To_REFRESH;isBack = true;changeHeaderViewByState();Log.v(TAG, "由done或者下拉刷新状态转变到松开刷新");}// 上推到顶了else if (tempY - startY <= 0) {state = DONE;changeHeaderViewByState();Log.v(TAG, "由DOne或者下拉刷新状态转变到done状态");}}// done状态下if (state == DONE) {if (tempY - startY > 0) {state = PULL_To_REFRESH;changeHeaderViewByState();}}// 更新headView的sizeif (state == PULL_To_REFRESH) {headView.setPadding(0, -1 * headContentHeight+ (tempY - startY) / RATIO, 0, 0);}// 更新headView的paddingTopif (state == RELEASE_To_REFRESH) {headView.setPadding(0, (tempY - startY) / RATIO- headContentHeight, 0, 0);}}break;}}return super.onTouchEvent(event);}// 当状态改变时候,调用该方法,以更新界面private void changeHeaderViewByState() {switch (state) {case RELEASE_To_REFRESH:arrowImageView.setVisibility(View.VISIBLE);progressBar.setVisibility(View.GONE);tipsTextview.setVisibility(View.VISIBLE);lastUpdatedTextView.setVisibility(View.VISIBLE);arrowImageView.clearAnimation();arrowImageView.startAnimation(animation);tipsTextview.setText("松开刷新");Log.v(TAG, "当前状态,松开刷新");break;case PULL_To_REFRESH:progressBar.setVisibility(View.GONE);tipsTextview.setVisibility(View.VISIBLE);lastUpdatedTextView.setVisibility(View.VISIBLE);arrowImageView.clearAnimation();arrowImageView.setVisibility(View.VISIBLE);// 是由RELEASE_To_REFRESH状态转变来的if (isBack) {isBack = false;arrowImageView.clearAnimation();arrowImageView.startAnimation(reverseAnimation);tipsTextview.setText("下拉刷新");} else {tipsTextview.setText("下拉刷新");}Log.v(TAG, "当前状态,下拉刷新");break;case REFRESHING:headView.setPadding(0, 0, 0, 0);progressBar.setVisibility(View.VISIBLE);arrowImageView.clearAnimation();arrowImageView.setVisibility(View.GONE);tipsTextview.setText("正在刷新...");lastUpdatedTextView.setVisibility(View.VISIBLE);Log.v(TAG, "当前状态,正在刷新...");break;case DONE:headView.setPadding(0, -1 * headContentHeight, 0, 0);progressBar.setVisibility(View.GONE);arrowImageView.clearAnimation();arrowImageView.setImageResource(R.drawable.arrow);tipsTextview.setText("下拉刷新");lastUpdatedTextView.setVisibility(View.VISIBLE);Log.v(TAG, "当前状态,done");break;}}public void setonRefreshListener(OnRefreshListener refreshListener) {this.refreshListener = refreshListener;isRefreshable = true;}public interface OnRefreshListener {public void onRefresh();}public void onRefreshComplete() {state = DONE;lastUpdatedTextView.setText("最近更新:"+ new Date().toLocaleString());changeHeaderViewByState();}private void onRefresh() {if (refreshListener != null) {refreshListener.onRefresh();}}// 此方法直接照搬自网络上的一个下拉刷新的demo,此处是“估计”headView的width以及heightprivate void measureView(View child) {youtParams p = child.getLayoutParams();if (p == null) {p = new youtParams(youtParams.FILL_PARENT,youtParams.WRAP_CONTENT);}int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0 + 0, p.width);int lpHeight = p.height;int childHeightSpec;if (lpHeight > 0) {childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight,MeasureSpec.EXACTLY);} else {childHeightSpec = MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);}child.measure(childWidthSpec, childHeightSpec);}public void setAdapter(BaseAdapter adapter) {lastUpdatedTextView.setText("最近更新:"+ new Date().toLocaleString());super.setAdapter(adapter);}}这个类到此结束了,你可以在项目中建一个类把此类拷贝进去,作为你自定义的listView 使用就可以了。
android8种对话框(Dialog)使用方法汇总
android8种对话框(Dialog)使用方法汇总Android中提供了多种对话框(Dialog)用于与用户进行交互。
下面将介绍Android中的8种常用对话框及其使用方法。
1. AlertDialog对话框:AlertDialog对话框是Android中最常用的对话框之一、它可以显示一个带有标题、消息和按钮的对话框。
使用AlertDialog.Builder类创建AlertDialog对象并设置相关属性,如标题、消息、按钮等。
然后调用show(方法显示对话框。
2. ProgressDialog对话框:ProgressDialog对话框用于显示一个进度条,通常用于表示长时间运行的任务的进度。
使用ProgressDialog类创建ProgressDialog对象,并使用setProgressStyle(方法设置进度条的样式,然后使用show(方法显示对话框。
可以通过调用setProgress(方法来更新进度条的进度。
3. DatePickerDialog日期选择对话框:DatePickerDialog对话框用于选择日期。
使用DatePickerDialog类创建DatePickerDialog对象,并使用setDate(方法设置初始日期。
然后使用show(方法显示对话框。
可以通过实现OnDateSetListener接口来监听用户选择的日期。
4. TimePickerDialog时间选择对话框:TimePickerDialog对话框用于选择时间。
使用TimePickerDialog类创建TimePickerDialog对象,并使用setTime(方法设置初始时间。
然后使用show(方法显示对话框。
可以通过实现OnTimeSetListener接口来监听用户选择的时间。
5. AlertDialog单选对话框:AlertDialog单选对话框用于让用户从多个选项中选择一个选项。
使用AlertDialog.Builder类创建AlertDialog对象,并使用setSingleChoiceItems(方法设置选项列表。
Android创建悬浮窗的完整步骤
Android创建悬浮窗的完整步骤在Android中想要创建悬浮窗分为三步1.申请权限2.使⽤服务启动悬浮窗3.设置悬浮窗参数并添加进WindowManager下⾯话不多说了,来⼀起看看详细的实现过程申请权限⾸先需要申请悬浮窗权限,在清单⽂件中 manifest 下添加<!-- 低版本悬浮窗所需权限 --><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>在Activity中动态申请权限public class MainActivity extends Activity {/** 悬浮窗权限标识码 */public static final int CODE_WINDOW = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 申请悬浮窗权限if (Build.VERSION.SDK_INT >= 23) {if (!Settings.canDrawOverlays(this)) {Toast.makeText(this, "请打开此应⽤悬浮窗权限-Shendi", Toast.LENGTH_SHORT).show();startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), CODE_WINDOW); }}// 关闭当前activity,这样只显⽰悬浮窗finish();}// 权限申请成功后的回调@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {// 不给权限就退出case Permission.CODE_WINDOW:if (resultCode != Activity.RESULT_OK) System.exit(0);break;default:Toast.makeText(this, "未知权限回调: " + requestCode, Toast.LENGTH_SHORT).show();}}}使⽤服务启动悬浮窗对于悬浮窗的操作主要使⽤ WindowManager创建⼀个服务,并在清单⽂件中注册public class TestService extends Service {@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return super.onStartCommand(intent, flags, startId);}@Overridepublic IBinder onBind(Intent intent) {return null;}}在清单⽂件的Application中注册服务<service android:name=".TestService" />在Activity中启动服务Intent intent = new Intent(this, TestService.class);startService(intent);接下来需要创建悬浮窗的界⾯,这⾥⽅便演⽰直接使⽤代码创建也可以使⽤inflate函数将xml⽂件变view对象View.inflate(context, yout.main_activity, null);在服务的onStartCommand函数中内容如下@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Button btn = new Button(this);btn.setText("hello,world");return super.onStartCommand(intent, flags, startId);}设置悬浮窗参数并添加进WindowManager这⾥直接上代码,看注释@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Button btn = new Button(this);btn.setText("hello,world");// 获取WindowManagerWindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); // 创建布局参数youtParams params = new youtParams(); /** 设置参数 */params.type = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?youtParams.TYPE_APPLICATION_OVERLAY :youtParams.TYPE_PHONE;params.format = PixelFormat.RGBA_8888;// 设置窗⼝的⾏为准则params.flags = youtParams.FLAG_NOT_FOCUSABLE;//设置透明度params.alpha = 1.0f;//设置内部视图对齐⽅式,这边位置为左边靠上params.gravity = Gravity.LEFT | Gravity.TOP;//窗⼝的左上⾓坐标params.x = 0;params.y = 0;//设置窗⼝的宽⾼,这⾥为⾃动params.width = youtParams.WRAP_CONTENT;params.height = youtParams.WRAP_CONTENT;// 添加进WindowManagerwm.addView(btn, params);return super.onStartCommand(intent, flags, startId);}完整代码如下TestActivitypackage shendi.app.game.robot;import android.app.Activity;import android.content.Intent;import .Uri;import android.os.Build;import android.os.Bundle;import android.provider.Settings;import android.widget.Toast;public class TestActivity extends Activity {/** 悬浮窗权限标识码 */public static final int CODE_WINDOW = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 申请悬浮窗权限if (Build.VERSION.SDK_INT >= 23) {if (!Settings.canDrawOverlays(this)) {Toast.makeText(this, "请打开此应⽤悬浮窗权限-Shendi", Toast.LENGTH_SHORT).show();startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), CODE_WINDOW); }}Intent intent = new Intent(this, TestService.class);startService(intent);// 关闭当前activity,这样只显⽰悬浮窗finish();}// 权限申请成功后的回调@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {// 不给权限就退出case Permission.CODE_WINDOW:if (resultCode != Activity.RESULT_OK) System.exit(0);break;default:Toast.makeText(this, "未知权限回调: " + requestCode, Toast.LENGTH_SHORT).show();}}}TestServicepackage shendi.app.game.robot;import android.app.Service;import android.content.Intent;import android.graphics.PixelFormat;import android.os.Build;import android.os.IBinder;import android.view.Gravity;import android.view.WindowManager;import android.widget.Button;public class TestService extends Service {@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Button btn = new Button(this);btn.setText("hello,world");// 获取WindowManagerWindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);// 创建布局参数youtParams params = new youtParams();/** 设置参数 */params.type = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?youtParams.TYPE_APPLICATION_OVERLAY :youtParams.TYPE_PHONE;params.format = PixelFormat.RGBA_8888;// 设置窗⼝的⾏为准则params.flags = youtParams.FLAG_NOT_FOCUSABLE;//设置透明度params.alpha = 1.0f;//设置内部视图对齐⽅式,这边位置为左边靠上params.gravity = Gravity.LEFT | Gravity.TOP;//窗⼝的左上⾓坐标params.x = 0;params.y = 0;//设置窗⼝的宽⾼,这⾥为⾃动params.width = youtParams.WRAP_CONTENT;params.height = youtParams.WRAP_CONTENT;// 添加进WindowManagerwm.addView(btn, params);return super.onStartCommand(intent, flags, startId);}@Overridepublic IBinder onBind(Intent intent) {return null;}}运⾏ app,可以在屏幕左上⾓看到 hello,world的按钮悬浮拖动效果给悬浮组件添加触碰事件可以实现拖动效果,按钮组件不适⽤这⾥给出简单的实现代码⽚段private int upX, upY;// 视图移动处理view.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getActionMasked()) {case MotionEvent.ACTION_DOWN:upX = (int) event.getRawX();upY = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:// 与上⼀次位置相差不到5则不移动if (event.getRawX() - upX > 5 || event.getRawY() - upY > 5) {params.x = (int) event.getRawX();params.y = (int) event.getRawY();wm.updateViewLayout(view, params);}break;case MotionEvent.ACTION_UP:// 相差不到5则代表点击if (event.getRawX() - upX < 5 && event.getRawY() - upY < 5) {// TODO}break;}return false;}});移除悬浮窗可以在 onDestry 函数中进⾏移除@Overridepublic void onDestroy() {wm.removeView(view);super.onDestroy();}总结到此这篇关于Android创建悬浮窗的⽂章就介绍到这了,更多相关Android悬浮窗内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
Android 自定义实现抽屉SlidingDrawer的功能
Android自定义实现抽屉SlidingDrawer的功能最近项目中需要实现上拉功能,首先想到的就是Android本身自带的抽屉SlidingDrawer,最后也实现了不过,出现的问题就是设置背景色问题,handl er和content是两个不同的部分,这就造成图片要做成两部分,从而产生两个部分图片看起来不是一个整体,而且我这个上拉功能,里面要实现一个水平滚动功能,而SlidingDrawer还有其他的限制,同时官方给出api 17以后,这个功能已经废弃,所以自己自定这样一个上拉功能是必须的。
这里我是继承LinearLayout同时实现GestureDetector.OnGestureListener来实现上拉功能。
下面是代码:001package com.exampl e.test;002003import android.content.Context;004import android.os.AsyncTask;005import android.util.AttributeSet;006import android.view.GestureDetector;007import android.view.MotionEvent;008import android.widget.LinearLayout;009import android.widget.RelativeLayout;010011public class PanelBom extends LinearLayout impl ements GestureDetector.OnGestureListener{012013GestureDetector mGesture = null;014private bool ean isScrolling = false;015private int MAX_HEIGHT = 80;//拖动的最大高度,当前布局位于父布局下面-80位置,这个仅仅是调试参数,这个变量是动态设置的。
android 小窗 实现原理
android 小窗实现原理Android的小窗实现原理可以从多个角度来解释。
首先,小窗是指在Android系统中,应用程序可以以一种悬浮窗的形式显示在其他应用程序之上,用户可以在不离开当前应用的情况下进行操作。
以下是一些实现小窗功能的原理:1. 窗口管理器,Android系统提供了窗口管理器来管理应用程序的窗口。
窗口管理器负责绘制和显示窗口,并处理用户的输入事件。
小窗的实现依赖于窗口管理器的支持,它允许应用程序创建一个独立的窗口并显示在其他应用程序之上。
2. 悬浮窗权限,为了保证系统的安全性和用户的隐私,Android系统要求应用程序在显示悬浮窗之前获取特定的权限。
通过获取悬浮窗权限,应用程序可以在其他应用程序之上显示悬浮窗。
用户可以在系统设置中为应用程序授予或撤销悬浮窗权限。
3. 窗口类型,Android系统为窗口定义了不同的类型,每个类型都有不同的显示行为。
小窗通常使用TYPE_SYSTEM_ALERT或TYPE_APPLICATION_OVERLAY类型来实现。
这些类型的窗口可以显示在其他应用程序之上,并且不会被其他窗口遮挡。
4. 窗口布局和位置,小窗的布局和位置可以通过调整窗口的LayoutParams来实现。
LayoutParams定义了窗口的大小、位置、透明度等属性。
应用程序可以根据需要设置LayoutParams来控制小窗的显示效果。
5. 窗口交互,小窗通常需要与用户进行交互,例如接收用户的点击、拖动等操作。
应用程序可以通过监听触摸事件或者使用系统提供的手势识别功能来实现小窗的交互功能。
总结起来,Android小窗的实现原理涉及窗口管理器、悬浮窗权限、窗口类型、窗口布局和位置以及窗口交互等方面。
通过合理地使用这些机制,应用程序可以实现小窗功能,并提供更好的用户体验。
android怎样自定义设置下拉列表样式
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),自己定义大小颜色背景位置,去掉默认样式黑边
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⽂件。
Spinner的使用方法
Spinner_demo.xml这个布局文件的写法如下:<?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Spinnerandroid:id="@+id/spinner1"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="被选中的人名显示在下面"android:textSize="25sp"/></LinearLayout>ASpinnerpackage com.example.uidemo3;import java.util.ArrayList;import android.R.anim;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ArrayAdapter;import android.widget.Spinner;import android.widget.TextView;public class ASpinner extends Activity {Spinner spinner1;ArrayList<String> arrayList = new ArrayList<String>();TextView textView1;OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener() { /** parent The AdapterView where the selection happened*view The view within the AdapterView that was clicked*position The position of the view in the adapter*id The row id of the item that is selected**AdapterView<?>代表Spinner*View代表Spinner里面的item*/@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {textView1.setText( ((TextView)view).getText());}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(yout.spinner_demo);spinner1 = (Spinner) this.findViewById(R.id.spinner1);textView1 = (TextView) this.findViewById(R.id.textView1);arrayList.add("小仓优子");arrayList.add("苍井空");arrayList.add("松岛枫");arrayList.add("波多野结衣");arrayList.add("樱田樱");arrayList.add("小峰由衣");arrayList.add("早乙女");arrayList.add("小泉彩");// 适配的概念Adapter,主要负责适配数据和各种样式// 下拉菜单的样式@SuppressWarnings({ "unchecked", "rawtypes" })ArrayAdapter arrayAdapter = new ArrayAdapter(this,yout.simple_spinner_item, arrayList);// 以下显示的是一行,只有一行能看的见//arrayAdapter.setDropDownViewResource(yout.simple_dropdown_item_1lin e);// 这种是带有文本和radio的下拉效果。
android自定义Dialog弹框和背景阴影显示效果
android⾃定义Dialog弹框和背景阴影显⽰效果本⽂实例为⼤家分享了android⾃定义Dialog弹框和背景阴影显⽰的具体代码,供⼤家参考,具体内容如下⾸先需要⾃定义⼀个类,继承Dialogimport android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.Button;import android.widget.TextView;import com.zhiziyun.dmptest.bot.R;/*** Created by Administrator on 2018/1/31.*/public class CustomDialog extends Dialog {private Button yes, no;//确定按钮private TextView titleTv;//消息标题⽂本private TextView messageTv;//消息提⽰⽂本private String titleStr;//从外界设置的title⽂本private String messageStr;//从外界设置的消息⽂本//确定⽂本和取消⽂本的显⽰内容private String yesStr, noStr;private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器/*** 设置取消按钮的显⽰内容和监听** @param str* @param onNoOnclickListener*/public void setNoOnclickListener(String str, onNoOnclickListener onNoOnclickListener) {if (str != null) {noStr = str;}this.noOnclickListener = onNoOnclickListener;}/*** 设置确定按钮的显⽰内容和监听** @param str* @param onYesOnclickListener*/public void setYesOnclickListener(String str, onYesOnclickListener onYesOnclickListener) { if (str != null) {yesStr = str;}this.yesOnclickListener = onYesOnclickListener;}public CustomDialog(Context context) {super(context, R.style.Dialog_Msg);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.dialog_custom);//按空⽩处不能取消动画setCanceledOnTouchOutside(false);//初始化界⾯控件initView();//初始化界⾯数据initData();//初始化界⾯控件的事件initEvent();}/*** 初始化界⾯的确定和取消监听器*/private void initEvent() {//设置确定按钮被点击后,向外界提供监听yes.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (yesOnclickListener != null) {yesOnclickListener.onYesClick();}}});no.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (noOnclickListener != null) {noOnclickListener.onNoClick();}}});}/*** 初始化界⾯控件的显⽰数据*/private void initData() {//如果⽤户⾃定了title和messageif (titleStr != null) {titleTv.setText(titleStr);}if (messageStr != null) {messageTv.setText(messageStr);}//如果设置按钮的⽂字if (yesStr != null) {yes.setText(yesStr);}}/*** 初始化界⾯控件*/private void initView() {yes = (Button) findViewById(R.id.yes);no = (Button) findViewById(R.id.no);titleTv = (TextView) findViewById(R.id.title);messageTv = (TextView) findViewById(R.id.message);}/*** 从外界Activity为Dialog设置标题** @param title*/public void setTitle(String title) {titleStr = title;}/*** 从外界Activity为Dialog设置dialog的message** @param message*/public void setMessage(String message) {messageStr = message;}/*** 设置确定按钮和取消被点击的接⼝*/public interface onYesOnclickListener {public void onYesClick();}public interface onNoOnclickListener {public void onNoClick();}@Overridepublic void show() {super.show();/*** 设置宽度全屏,要设置在show的后⾯*/youtParams layoutParams = getWindow().getAttributes();layoutParams.width= youtParams.MATCH_PARENT;layoutParams.height= youtParams.MATCH_PARENT;getWindow().getDecorView().setPadding(0, 0, 0, 0);getWindow().setAttributes(layoutParams);}}这是实体类中的style:<style name="custom_dialog_style" parent="android:Theme.Dialog"><item name="android:windowFrame">@null</item><item name="android:windowIsFloating">true</item><item name="android:windowIsTranslucent">false</item><item name="android:windowNoTitle">true</item><!--除去title--><item name="android:backgroundDimEnabled">true</item><!--半透明--><item name="android:windowBackground">@color/transparent</item><!--除去背景⾊--> <item name="android:radius">10dp</item></style>其中@color/transparent是⼀个透明⾊<color name="transparent">#00000000</color>然后是布局<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#A5000000"><LinearLayoutandroid:layout_width="260dp"android:layout_height="wrap_content"android:layout_centerInParent="true"android:background="@drawable/shape_dialog_msg"android:orientation="vertical"><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_margin="15dp"android:gravity="center"android:text="消息提⽰"android:textColor="@color/colorBlack"android:textSize="@dimen/title_text_size" /><TextViewandroid:id="@+id/message"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginLeft="@dimen/padding_left_right4"android:layout_marginRight="@dimen/padding_left_right4"android:text="提⽰消息"android:textColor="@color/colorBlack"android:textSize="@dimen/textsizi3" /><Viewandroid:layout_width="match_parent"android:layout_height="1px"android:layout_marginTop="15dp"android:background="#E4E4E4" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="@dimen/buttom_height"android:orientation="horizontal"><Buttonandroid:id="@+id/no"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:background="@null"android:gravity="center"android:singleLine="true"android:text="取消"android:textColor="@color/blue"android:textSize="@dimen/textsizi3" /><Buttonandroid:id="@+id/yes"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:background="@null"android:gravity="center"android:singleLine="true"android:text="确定"android:textColor="@color/red"android:textSize="@dimen/textsizi3" /></LinearLayout></LinearLayout></RelativeLayout>下⾯是shape_dialog_msg的代码<?xml version="1.0" encoding="UTF-8"?><selector xmlns:android="/apk/res/android"> <item android:state_pressed="false"><shape android:shape="rectangle" ><!-- 填充的颜⾊前两位是透明度--><solid android:color="#f7f6f6"></solid><!-- 设置按钮的四个⾓为弧形 --><!-- android:radius 弧形的半径 --><corners android:radius="8dip" /><!-- padding:Button⾥⾯的⽂字与Button边界的间隔 --><padding android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp" /></shape></item></selector>准备⼯作都做好了,下⾯就是如何使⽤了//点击弹出对话框final CustomDialog customDialog = new CustomDialog(getActivity());customDialog.setTitle("消息提⽰");customDialog.setMessage("是否暂停⼴告投放?");customDialog.setYesOnclickListener("确定", new CustomDialog.onYesOnclickListener() {@Overridepublic void onYesClick() {//这⾥是确定的逻辑代码,别忘了点击确定后关闭对话框customDialog.dismiss();}});customDialog.setNoOnclickListener("取消", new CustomDialog.onNoOnclickListener() {@Overridepublic void onNoClick() {customDialog.dismiss();}});customDialog.show();以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。