======原文地址:blog.csdn.net/zgyulongfei ======
在使用PopupWindow的时候,有一个不好的地方就是不太好设置弹出窗体的大小。如果指定绝对大小,那么对于不同分辨率不同尺寸的手机来说,显示出来效果会不同,从而导致用户体验不佳。
为了达到PopupWindow能够自适配布局大小,可以在设置长宽时候指定:
popupWindow.setWidth(LayoutParams.WRAP_CONTENT); popupWindow.setHeight(LayoutParams.WRAP_CONTENT);
下面我就来具体讲解一下在PopupWindow中使用ListView的方法。
首先贴出的是main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="弹出popupWindow" /> </LinearLayout>
然后贴出的是PopupWindow中显示的listview_demo.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
再贴出的是listview显示的每一项item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" /> </LinearLayout>
最后贴出的是java代码PopupWindowDemoActivity.java
package xmu.zgy; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.SimpleAdapter; /** * * @author yulongfei * @blog blog.csdn.net/zgyulongfei * */ public class PopupWindowDemoActivity extends Activity { private Button button; private PopupWindow popupWindow; private ListView listView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initControls(); } private void initControls() { LayoutInflater inflater = LayoutInflater.from(this); View view = inflater.inflate(R.layout.listview_demo, null); SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.item, new String[] { "text" }, new int[] { R.id.item }); listView = (ListView) view.findViewById(R.id.listview); listView.setAdapter(adapter); //自适配长、框设置 popupWindow = new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg)); popupWindow.setOutsideTouchable(true); popupWindow.setAnimationStyle(android.R.style.Animation_Dialog); popupWindow.update(); popupWindow.setTouchable(true); popupWindow.setFocusable(true); button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!popupWindow.isShowing()) { popupWindow.showAsDropDown(button, 0, 0); } } }); } private List<Map<String, String>> getData() { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String> map = new HashMap<String, String>(); map.put("text", "中国"); list.add(map); map = new HashMap<String, String>(); map.put("text", "加油"); list.add(map); map = new HashMap<String, String>(); map.put("text", "钓鱼岛是中国的"); list.add(map); map = new HashMap<String, String>(); map.put("text", "!!"); list.add(map); return list; } }
咦?不是已经设置自适应长和宽了吗?为什么显示出来的效果还是占满屏幕的宽度呢?
可以看看stackoverflow上面这个人问的问题,这个问题想必纠结了挺多人。虽然我不知道具体的原因是什么,但是我有个解决的方案,我也同时在stackoverflow上做了解答,下面我具体来说明一下。
为了让PopupWindow能够自适应ListView的内容,需要在listview_demo.xml添加一项:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:layout_width="wrap_content" android:layout_height="0dp" android:textSize="18sp" android:text="钓鱼岛是中国的" /> </LinearLayout>
先看显示结果再做解释:
看到了吗?很神奇吧,popupwindow的宽度进行了自适配。
因为我在xml中加了一个TextView,然后设置了高度为0,这样他就看不到了。
最重要的步骤是我在TextView中设置了android:text="钓鱼岛是中国的",这一句是关键性的动作。
因为TextView才是自适配的砝码,要在text中写上你的listView中最长的那个字符。上述demo中,所有显示的文字{中国,加油,钓鱼岛是中国的,!!!}中”钓鱼岛是中国的“是最长的。
虽然方法不太好,但是实现了效果。如果你遇到这样的问题,可以试试这种方式。
希望本文能够帮到有需要的朋友!
点击下载本文Demo。
一、一般命令
1、AT+CGMI: 请求得到移动设备生产厂商的标识。
2、AT+CGMM: 请求得到移动设备模块的标识。
3、AT+CGMR: 请求得到改订的系统版本,修改级别和日期,以及其他相关内容。
4、AT+CGSN: 得到GSM移动设备的唯一标识,比如IMEI(国际移动设备标识)序列号。
5、AT+CSCS 选择TE(操作终端)字符集设定情况,使其能够和ME设备匹配,TA能够在TE和ME之间进行正确的字符转换。
6、AT+CIMI 获得IMSI。用来读取或者识别SIM卡的IMSI(国际移动签署者标识),识别移动设备附带的SIM卡标识。在读取IMSI之前应该先输入PIN码(如果需要PIN的话)。
7、AT+CMUX 使GSM的多路协议生效,设置多路模式控制通道的参数。
8、AT+GMI 请求得到终端适配器生产厂商的标识。
9、AT+GMM: 请求得到终端适配器模块的标识。
10、AT+GMR: 请求得到终端适配器改订的系统版本,修改级别和日期,以及其他相关内容。
11、AT+GSN: 得到GSM终端适配器的序列号标识。
12、AT+GOI: 得到GSM终端适配器TA的ISO全球系统标识。
13、AT+GCAP: 得到GSM终端适配器TA的全部性能和容量的信息。
14、AT+GCI: 得到GSM终端适配器TA安装所在的国家。
15、AT+WS46: 设置使用无线网络,使用无线数据服务模式。
二、呼叫控制命令
1、AT+CSTA: 选择地址类型,选择GSM的拨号命令的数字类型。
2、AT+CMOD: 选择远程呼叫指令的呼叫模式,主要有SINGLE MODE,alternating voice/fax等,各模式中轮换模式的呼叫命令是在TA里实现。
3、AT+CHUP: 使呼叫挂起命令,即由TA挂起当前的使用轮换模式的GSM网络的呼叫过程。
4、AT+CBST: 选择信差(持有人)服务类型,并选择对应的数据速率和呼叫连接元素。
5、AT+CRLP: 选择和改变无线电通信线路协议参数,主要是在非透明数据呼叫建立时。
6、AT+CR: 服务报告控制,控制是否给出错误控制和数据压缩的报告,以及传输质量和速率的报告。
7、AT+CEER: 扩展错误报告,由TA向用户提供更多的呼叫和网络连接的故障和错误。
8、AT+CRC: 划分的结果代码,控制在呼叫到来时是否允许更为详细的铃声指示以及允许GPRS网络请求。
9、AT+CHSD: 获取ME和TA所支持的高速电路交换数据技术(HSCSD)的特征参数。
10、AT+CHST: 控制对透明高速电路交换数据呼叫的参数进行设置,在呼叫的过程中改变设置对当前呼叫无影响。
11、AT+CHSN: 控制对非透明高速电路交换数据呼叫的参数进行设置。
12、AT+CHSC: 获取当前的高速电路交换数据呼叫的参数信息,如果没有激活的呼叫就参数返回0。
13、AT+CHSR: 控制是否给出高速电路交换数据传输的报告。
14、AT+CHSU: 控制是否对高速电路交换数据传输的用户服务级别进行自动升级。
15、AT+CHSA: 控制对非透明的增强型电路交换数据(ECSD)传输的呼叫首选使用的非对称模式进行配置。
16、AT+CSNS: 单一编号方案,在被单一编号的呼叫建立以后,选择使用的信差类型。
17、AT+CVHU: 控制是否对语音连接进行挂起,轮换模式可以用在语音连接中。
18、AT+CV120: 设置CCITTV.120(GSM网络支持的)速率适配协议的参数。
19、AT+CSDF: 设置提供给用户的日期信息的格式。
20、AT+CSIL: 控制GSM移动台(MS)的静音模式的开关,当处于静音模式时,除了噪音以外的所有声音都会被抑制。
21、AT+CSTF: 设置提供给用户的时间信息的格式。
三、GSM网络服务命令
1、AT+CNUM: 获得和签署者相关的MSISDN(移动用户国际号码)号码信息。
2、AT+CREG: 网络注册。获得ME手机的网络注册状态。
3、AT+COPS: 服务商选择,选择和注册GSM网络的操作者。
4、AT+CLCK: 设备锁命令,给一个ME或者网络设备上锁,解锁或者进行询问。该操作通常需要密码输入。当网络设备被设置或者询问时,这个命令能够被中断。
5、AT+CPWD: 修改设备锁功能的密码,设置新密码。
6、AT+CLIP: CLIP是呼叫线路确认的陈述服务,使TE上的呼叫线路确认的陈述生效或者无效。
7、AT+CLIR: CLIR是呼叫线路确认限制服务,当一个GSM呼叫建立时使TE上的呼叫线路确认的陈述生效或者无效。
8、AT+COLP: COLP是连接线路确认陈述服务,使TE上的连接线路确认的陈述生效或者无效。
9、AT+CDIP: 涉及向移动终端MT提供已呼叫线路确认的网络服务,使TE上的已呼叫线路确认的陈述生效或者无效。
10、AT+CCUG: 对关闭的用户组进行控制。
11、AT+CCFC: 控制呼叫继续进行。
12、AT+CCFC: 控制呼叫等待的操作。
13、AT+CHLD: 呼叫相关的追加服务,使用此命令,GSM呼叫可以暂时断开但是网络依然保持连接,用户可以激活一个呼叫而使另外一个呼叫保持,呼叫可以被保持,恢复和释放以及添加到连接中。
14、AT+CTFR: 呼叫偏差控制,控制接入的警报呼叫连接到特定的号码上。
15、AT+CUSD: 无组织的追加服务数据(USSD),控制是否使无组织的追加服务数据生效。
16、AT+CAOC: 费用报告,得到当前ME上的呼叫花费的费用。
17、AT+CSSN: 追加服务的通知,控制从TA到TE的网络初始化的通知生效或者失效。
18、AT+CLCC: 列出移动设备ME当前的呼叫。
19、AT+CPOL: 设置移动设备SIM卡的优先操作员列表,当新网络被选择后移动设备可以对列表自动更新。
20、AT+COPN: 从移动设备ME读取获得操作员的姓名。
四、移动设备ME控制和状态命令
1、AT+CPAS: 返回移动设备的活动状态。
2、AT+CFUN: 设定电话机能。选择移动设备的功能水平。
3、AT+CPIN: 输入PIN码,在移动设备使用前提供需要的SIM卡的PIN码。
4、 AT+CBC: 获得移动设备电池连接状态(BCS)和电池充电多少的情况(BCL)。
5、AT+CSQ: 获得移动设备接收信号质量的情况。
6、AT+CMEC: 选择移动设备的控制模式,比如按键区,显示屏和指示器等。
7、AT+CKPD: 键盘控制,仿真模仿ME键盘进行操作,执行命令。
8、AT+CDIS: 显示控制,设置移动设备文本类型显示元素的内容。
9、AT+CIND: 指示器控制,设置移动设备指示器的数值,从而控制指示器的状态。
10、AT+CMER: 移动设备事件报告,控制是否向操作终端返回移动设备的键盘,显示器和指示器的事件报告。
11、AT+CPBS: 选择电话簿记忆存储功能。
12、AT+CPBR: 从当前电话簿存储器中按记录序号读取电话簿记录。
13、AT+CPBF: 从当前电话簿存储器中按记录序号查找电话簿记录。
14、AT+CPBW: 从当前电话簿存储器中按记录序号书写进电话簿记录。
15、AT+CCLK: 时钟管理。用来设置移动设备ME真实时钟的当前日期和时间。
16、AT+CALA: 警报管理。用来设定在ME中的警报日期和时间。
17、AT+CSIM: 普通SIM卡访问。使TE上的程序控制SIM卡,处理SIM卡上的信息。
18、AT+CRSM:受限制的SIM卡访问。限制对ME上SIM卡的访问和参数修改。
19、AT+CSCC:安全控制命令,设置是否在保证安全的机制下使用AT命令。
20、AT+CALM:选择普通的警告声音模式,包括一般模式,静音模式和厂商定制。
21、AT+CRSL:选择ME上到来的电话铃声的声音级别。
22、AT+CVIB:设置振荡器的模式,使ME的振荡器警告生效或者失效。
23、AT+CLVL:选择移动设备内部喇叭的音量大小。
24、AT+CMUL:麦克风静音控制,在GSM通话的过程中开/关麦克风静音模式。
25、AT+CACM:累计呼叫时间量,复位SIM卡的累计呼叫时间值。
26、AT+CAMM:累计呼叫时间量最大值,设置SIM卡的累计呼叫时间最大值。
27、AT+CPUC:单价和货币表,设置SIM卡中的单价和货币表的参数,设置参数需要先输入正确的SIM PIN2码。
28、AT+CCWE:在达到累计呼叫时间量最大值之前,控制是否显示相关警告信息。
29、 AT+CPWC:在每个GSM频带的支持下,设置优先的移动设备电源类型。
30、 AT+CLAN:设置移动设备使用的语言。
31、 AT+CLAE:设置移动设备是否进行语言事件的处理。
32、 AT+CSGT:设置和激活移动设备上的开机问候语。
33、 AT+CSVM:设置语音邮件号码。
34、 AT+CRMP: 铃声旋律播放。有两种旋律可用:设备自定义类型和用户定义。移动设备播放特定类型的铃声,默认情况下播放当前选择的。
35、 AT+CMAR:管理复位,要求移动设备复位用户的数据。
36、 AT+CLAC:列出所有可用AT命令的列表。
37、 AT+CALD:删除移动设备的一个警报。
38、 AT+CAPD:推迟或者解除移动设备当前活动的警报。
39、 AT+CTZU:设置是否使自动时区升级功能生效,默认是失效。
40、 AT+CTZR:设置是否使时区更改报告功能生效,默认是失效。
41、 AT+CPROT:输入协议模式,使TE,TA和ME之间能够建立链路通信。
五、移动设备错误相关命令
1、 AT+CMEE:设置是否获得有关移动设备错误的报告。
2、 AT+CME ERROR:返回移动设备发生错误的结果代码。
六、UMTS包传输相关命令
1、 AT+CGDCONT:定义PDP上下文。
2、 AT+CGDSCONT:确定PDP上下文的参数。
3、 AT+CGTFT:指定传输流模板的包过滤器。
4、 AT+CGQREQ:指定被请求的服务质量简要。
5、 AT+CGQMIN:指定最小可以接受的服务质量简要。
6、 AT+CGEQREQ:指定被请求的UMTS服务质量简要。
7、 AT+CGEQMIN:指定最小可以接受的UMTS服务质量简要。
8、 AT+CGEQNEG:从活动的PDP上下文中重新获得可协商的UMTS服务质量简要。
9、 AT+CGATT:将MT附加到包传输服务或者将MT从包传输服务分离。
10、 AT+CGACT:PDP 上下文激活或者封闭。
11、 AT+CGCMOD:修改PDP 上下文。
12、 AT+CGDATA:返回数据状态。
13、 AT+CGCLOSP:在本地PAD设置特定的OSP PAD参数值。
14、 AT+CGPADDR:返回特定的PDP的地址列表。
15、 AT+CGAUTO:控制是否自动回应PDP上下文激活的网络请求。
16、 AT+CGANS:要求MT进行回应PDP上下文激活的网络请求。
17、 AT+CGCLASS:使MT按照特定的GPRS移动台类型进行操作(仅用于GPRS)。
18、 AT+CGCLPAD:在本地PAD设置特定的X.3 PAD参数值(仅用于GPRS)。
19、 AT+CGEREP: GPRS包传输事件报告。
20、 AT+CGREG: 返回GPRS网络注册状态。
21、 AT+CGSMS: 指定MT用来传输短信的服务类型。
七、TIA IS-101中的命令
1、 AT+FCLASS: 选择模式。把模块设置成数据或传真操作的特殊模式。
2、 AT+VGR: 应用于调节喇叭的接收增益。
3、 AT+VGT: 应用于麦克风的传输增益。
4、 AT+VIP: 初始化声音参数。
5、 AT+VTS: 给用户提供应用GSM网络发送DTMF双音频,允许传送双音频。
6、 AT+VTD: 给用户提供应用GSM网络发送DTMF双音频,定义双音频的长度。
缩写语:
ME:Mobile Equipment
TE:Terminal Equipment
TA:Terminal Adaptor
MT:Mobile Telecommunications
母亲,我叫钓鱼岛
七百年前你起的名字植入我的襁褓
我徜佯在你温暖的怀抱
从此我不再是无根的水草
母亲,我叫钓鱼岛
一百年前的马关火炮
撕裂我伤痕累累的骄傲
我在你的眼眸里云散烟消
那些年,你可知道
我飘摇的心多么需要依靠
母亲,我叫钓鱼岛
六十年前你轻轻把我的名字呼叫
我的欣喜被阳光照耀
可是强盗在最后时刻强行夺去了我的贞操
那一刻,母亲,你可知道
我屈耻地活着,水深火热地煎熬
母亲,我叫钓鱼岛
三十年前强盗在我的身躯上修起了跑道
他们想要掠夺我
全部的妖娆
我不应该是强盗餐桌上的佳肴
我的呐喊,母亲,你可听到
母亲,我叫钓鱼岛
二十年前强盗在我的身躯上让灯塔闪耀
他们想要占有我的身体到天荒地老
我不应该是强盗无耻的夜宵
我支离破碎的容貌,母亲,你可看到
母亲,我叫钓鱼岛
昨天强盗撞翻了您的孩子我的同胞
强盗用滑稽的借口给他们戴上镣铐
他们只是为了陪伴我的寂廖
为何,为何强盗要将他们用烈火燃烧
母亲,我叫钓鱼岛
不是强盗嘴里的尖阁列岛
我不应该背着沉重的背包
在尘世的纷纷扰扰中被人嘲笑
我的精彩应该闪
耀在你博大的云霄
我的骄傲应该执着在你温暖的怀抱
母亲,我叫钓鱼岛
我期待,期待那一秒
您披起战袍,吹响号角
在犀利的炮火中将我的名字呼叫
那一刻,母亲
躺在你温柔怀中,我是您永远要呵护的宝
母亲,我叫钓鱼岛
您起的名字从生叫到老...
原文作者:楚天寒《母亲,我是钓鱼岛》
母亲——我是钓鱼岛(视频)
钓鱼岛简介:
钓鱼岛又称钓鱼台、钓鱼台群岛、钓鱼台列岛(日本称其为“尖阁列岛”),位于中国东海大陆架的东部边缘,在地质结构上是附属于台湾的大陆性岛屿。钓鱼列岛周围海域面积约为17万平方公里,相当于5个台湾本岛面积。1972年美国将琉球主权移交日本时,一并将钓鱼台列屿的行政管辖权也交给日本。该岛实际由日本控制,被划为冲绳县石垣市。针对日本的行径,自1970年代开始,华人组织的民间团体曾多次展开宣示主权的“保钓运动”。
本文转自:
四大军区频繁大规模军演(网易评论)
钓鱼岛(百度百科)