项目需要做一个首页新闻图片自动无限循环的组件,上面配有标识的RadioGroup。这个简单。可是后来UI设计出来的效果,要求在图片的下方添加一个灰色颜色带,再在这个颜色带上显示关于图片的标题。我想,这个也简单,分分钟的事。起先,我将表示TextView的组件引用传递个自定义的Gallery,让Gallery自动滚动时也顺带把TextView的值改变过来。可是运行起来后,发现字是改变过来了。不过Gallery的滚动效果变得有问题了,会抖动。我以为是线程影响的问题,用了handler,不行,又用线程加了延时,还是不行。无奈,在尝试了2个小时无果后,只能求助google了。最后发现一篇文章,讲的是一个播放音乐进度条反馈进度,同样调用TextView.setText方法,发生了进度条向右抖动的情况。是将TextView的长度写死,不要用wrap_content,于是,我的问题也这么解决了。但是将长度写死又带来了适配的问题。当然这又是另外一个问题了。
总结:一、这个问题应该是android中组件绘制过程带来的影响。
二、多上google,少用百度
def init(sck) sck.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) #连接60秒没有任何数据开始发送探测 sck.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE, 60) #探测发包时间间隔为6秒 sck.setsockopt(socket.SOL_TCP, socket.TCP_KEEPCNT, 6) #探测次数为5次 sck.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 5)
列表视图ListView是android开发最常用的组件之一,创建方法主要有五种,分为两类:使用Listview组件、继承ListActivity。
使用Listview时有三种办法:
方法一、直接在Listview组件中添加数组资源文件
<ListView android:id="@+id/listView1" android:divider="@drawable/greendivider" android:dividerHeight="3dp" android:footerDividersEnabled="true" android:headerDividersEnabled="true" android:layout_height="wrap_content" android:layout_width="match_parent" android:entries="@array/ctype"/>
注意最后一句——添加资源文件语句。
在工程的values文件里,新建一个array.xml文件
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="ctype"> <item>连接功能</item><item>情景模式</item> <item>主题模式</item> <item>手机</item> <item>程序管理</item> <item>通话设置</item> </string-array> </resources>
方法二:使用设备器Adapter来处理数据
<ListView android:id="@+id/listView1" android:divider="@drawable/greendivider" android:dividerHeight="3dp" android:footerDividersEnabled="true" android:headerDividersEnabled="true" android:layout_height="wrap_content" android:layout_width="match_parent" />
final ListView listView=(ListView)findViewById(R.id.listView1); String[] ctype=new String[]{"情景模式","主题模式","手机","程序管理"}; ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_activated_1,ctype); listView.setAdapter(adapter); // 将适配器与ListView关联
方法三:使用资源文件创建设备器,在通过设备器关联Listview
final ListView listView=(ListView)findViewById(R.id.listView1); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.ctype,android.R.layout.simple_list_item_multiple_choice); //创建一个适配器 listView.setAdapter(adapter);
直接使用ListActivity有两种方法:
方法一:使用数组创建设备器
public class MainActivity extends ListActivity -------------------------------------- String[] ctype=new String[]{"情景模式","主题模式","手机","程序管理"}; ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,ctype); setListAdapter(adapter); //设置该窗口中显示的列表
方法二:使用资源文件创建设备器,方法类似于上一个方法三。
相比这五种方法————如果你的窗口只是用来显示列表,则可以考虑直接使用ListActivity,布局文件为空;;
———— 创建设备器推荐使用资源文件,便于管理,便于修改,便于查看