做一个记事本的简单app,在listview长按删除item中如何选择任意一个item项进行置顶?

◇本站云标签◇本站云标签6683人阅读
Android学习笔记(123)
作者同类文章X
ListView中想让text变色是一个比较棘手的问题,事实上有很多人都遇到了问题,可是能解决的方案不多,这个帖子旨在帮助大家
解决这个问题,好,让我们通过两种方式来看看。
1.用selector和setTextColor的方式
这是一种执行效率比较高的方法
一,在listview的adapter xml中找到要变色的控件,用setTextColor或者style来改变颜色,如下所示:
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&fill_parent& android:layout_height=&wrap_content&
android:orientation=&horizontal& android:paddingLeft=&5dip&
android:descendantFocusability=&blocksDescendants&
android:background=&@drawable/listview_state_bg&
android:paddingRight=&5dip&&
&ImageButton android:id=&@+id/headphoto& android:layout_width=&45dip&
android:layout_height=&45dip& android:layout_marginTop=&10dip&
android:layout_marginLeft=&10dip& android:focusable=&false&
android:background=&@drawable/recfriend_pic_box& android:scaleType=&fitCenter&
android:src=&@drawable/pic_bg& android:layout_marginBottom=&10dip&/&
&LinearLayout android:layout_width=&fill_parent&
android:id=&@+id/text_layout&
android:layout_height=&wrap_content& android:orientation=&vertical&
android:paddingLeft=&10dip& android:paddingTop=&8dip& android:focusable=&false&
android:layout_weight=&1&&
&LinearLayout android:orientation=&horizontal& android:focusable=&false&
android:layout_width=&fill_parent& android:layout_height=&wrap_content&&
&TextView android:id=&@+id/name& android:layout_width=&wrap_content&
android:layout_height=&wrap_content& android:textSize=&16dip&
style=&@style/textview_title& android:focusable=&false&/&
&ImageView android:id=&@+id/pageicon& android:layout_width=&wrap_content&
android:layout_height=&wrap_content& android:src=&@drawable/page_icon_new&
android:focusable=&false&
android:visibility=&gone&/&
&LinearLayout android:layout_width=&wrap_content& android:focusable=&false&
android:layout_height=&wrap_content& android:layout_weight=&1&/&
&/LinearLayout&
&TextView android:id=&@+id/text1& android:layout_width=&wrap_content&
android:layout_marginTop=&4dip& android:focusable=&false&
android:layout_height=&wrap_content& android:textColor=&@drawable/rec_button_color&
android:textSize=&14sp& android:visibility=&gone&/&
&TextView android:id=&@+id/text2& android:layout_width=&wrap_content&
android:focusable=&false&
android:layout_height=&wrap_content& android:textColor=&@drawable/rec_button_color&
android:textSize=&14sp& android:visibility=&gone&/&
&/LinearLayout&
&CheckBox android:id=&@+id/checkbox& android:layout_width=&wrap_content&
android:layout_height=&wrap_content& android:layout_marginRight=&5dip&
android:focusable=&false& android:button=&@drawable/checkbox&
android:layout_gravity=&center_vertical&/&
&ImageButton android:id=&@+id/arrow& android:layout_width=&wrap_content&
android:focusable=&false&
android:layout_height=&wrap_content& android:background=&@drawable/profile_icon_arrow&
android:layout_gravity=&center_vertical& android:layout_marginRight=&5dip&
android:visibility=&gone&/&
&/LinearLayout&
特别注意的是,在你的adapter的最外层linearLayout里有一句话
android:descendantFocusability=&blocksDescendants&
是必须的,否则无法实现点击变色,它的功能是覆盖子控件的onclick事件。解释如下:
android:descendantFocusability
其中的ID name,text1,text2都是需要点击变色的textview,分别用了style和textColor,其中rec_button_color.xml如下:
&?xml version=&1.0& encoding=&utf-8&?&
&selector xmlns:android=&/apk/res/android& &
&item android:state_pressed=&false& android:color=&@color/profile_color&/&
&item android:state_pressed=&true& android:color=&@color/white&/&
&/selector&
注意要写在drawable文件夹下。
style(注意不是android:style)指向的textview_title写在values/style.xml中,如下:
&?xml version= &1.0& encoding= &utf-8&?&
&resources xmlns:adnroid=&/apk/res/android&&
&style name=&textview_title&&
&item name=&android:textColor&&@color/title_color&/item&
&item name=&android:duplicateParentState&&true&/item&
&/resources&
其中的@color/title_color是写在res/color文件夹下的一个xml,与rec_button_color.xml相似:
&?xml version=&1.0& encoding=&utf-8&?&
&selector xmlns:android=&/apk/res/android&&
&item android:state_pressed=&true& android:color=&@color/white& /&
&item android:color=&@color/black& /&
&/selector&
二,至此xml文件的设置就结束了,正常情况下就可以实现点击变色了,可问题往往在这里出现了,
有时候我们的listeview item需要有点击事件,如在ListView Adapter类里的getView()中实现如下功能:
view.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(holder.checkbox.isChecked()){
holder.checkbox.setChecked(false);
holder.checkbox.setChecked(true);
即实现点击item实现其中的checkbox选中,如果加入这段代码,则点击变色不能成功,因为我们的外部view把内部控件的点击事件都覆盖了,不会执行
到子控件的点击变色部分。
所以需要有变通的方案,即在包含Listview的Activity中给Listview加入setOnItemClickListener,而不通过view.setOnClickListener:
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView&?& parent, View view,
int position, long id) {
RecommendFriendsAdapter.ViewHolder holder = (RecommendFriendsAdapter.ViewHolder)view.getTag();
if(holder.checkbox!= null){
if(holder.checkbox.isChecked()){
holder.checkbox.setChecked(false);
holder.checkbox.setChecked(true);
});这样即实现了点击变色,也实现了点击需要的其它功能。
如果需要在点击父控件时还要让checkbox变色,则在最上部分的checkbox一项里加入
android:button=&@drawable/checkbox&其中checkbox.xml为:
&?xml version= &1.0& encoding= &UTF-8&?&
&selector xmlns:android=&/apk/res/android&&
&item android:drawable=&@drawable/btn_checkbox_normal& android:state_checked=&false& android:state_pressed=&false&/&
&item android:drawable=&@drawable/btn_checkbox_pressed& android:state_checked=&false& android:state_pressed=&true&/&
&item android:drawable=&@drawable/bth_checkbox_normal& android:state_checked=&true& android:state_pressed=&false&/&
&item android:drawable=&@drawable/bth_checkbox_pressed& android:state_checked=&true& android:state_pressed=&true&/&
&/selector&这样就实现了选中变色。
累死lz了,这个方案前前后后搞了至少半个月,因为后面的setOnClickListener问题一直阻塞,现在终于搞出来了!
希望对自己和大家都有帮助。
2. 下面的方法是之前没有找到上面方法的替代方法,用于一些极端情况下能实现效果,
它的缺点是在滑动的时候也会有时触发点击效果,从而使得滑动变得比较卡,不过作为临时方法也可以接受,
同等情况优先使用第一种方法。
在adapter的getView()方法里加入下面的话
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Log.d(&meng&, &action + &+event.getAction());
if(event.getAction() == 0){
view.setBackgroundColor(Color.parseColor(&#2cb1e1&));
holder.name.setTextColor(Color.WHITE);
holder.text1.setTextColor(Color.WHITE);
holder.text2.setTextColor(Color.WHITE);
}else if(event.getAction() == 2){
view.setBackgroundColor(Color.parseColor(&#2cb1e1&));
holder.name.setTextColor(Color.WHITE);
holder.text1.setTextColor(Color.WHITE);
holder.text2.setTextColor(Color.WHITE);
}else if(event.getAction() == 3){
view.setBackgroundColor(Color.TRANSPARENT);
holder.name.setTextColor(Color.BLACK);
holder.text1.setTextColor(R.color.profile_color);
holder.text2.setTextColor(R.color.profile_color);
}else if(event.getAction() == 1){
view.setBackgroundColor(Color.TRANSPARENT);
holder.name.setTextColor(Color.BLACK);
holder.text1.setTextColor(R.color.profile_color);
holder.text2.setTextColor(R.color.profile_color);
Log.d(&meng&, &else + &+event.getAction());
view.setBackgroundColor(Color.TRANSPARENT);
holder.name.setTextColor(Color.BLACK);
holder.text1.setTextColor(R.color.profile_color);
holder.text2.setTextColor(R.color.profile_color);
注意:如果要同时换背景,最好用color值,用图片会产生布局混乱的问题,而且必须用
view.setBackgroundColor(Color.parseColor(&#2cb1e1&));
不要用你自己定义的id R.color.xxx,这样颜色会变的,而且不能用
view.setBackgroundResource(R.color.item_click_color);&
因为个别手机尤其是4.0系统的手机会出现点击一会就不变色的bug!
else其实可有可无了,是为了保险加入的。
ps:今天发现有网站转了我的文章,但不标明作者,甚至都不写转,希望大家转载的时候
至少写上个转自mengweiqi33,谢谢!
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:335102次
积分:3850
积分:3850
排名:第4320名
原创:27篇
转载:116篇
评论:86条
(1)(1)(1)(5)(1)(4)(4)(5)(2)(1)(3)(1)(2)(2)(1)(2)(10)(1)(5)(3)(3)(13)(10)(17)(1)(9)(15)(5)(1)(12)(2)◇本站云标签&记事本实例之界面设计
记事本实例之界面设计
成为极客学院VIP,观看全部课程
VIP会员可无限制观看所有课程,下载资料与源码,享受技术问答支持,年会员还可以下载720p高清视频。
或者可以观看以下免费课程
视频太卡?试试切换线路
本课时针对课程内容进行简要讲解。
本课时介绍移动开发操作系统的发展历史,对Android的各个版本逐一回顾,简单讲解Android开发框架的构成,帮助大家快速了解Android体系的整体情况。
本课时学习如何搭建Android的开发环境。
本课时学习如何编写一个Android应用程序,通过这一课的学习,完成第一个Android应用的开发。
Activities是一个程序的组件之一,主要功能是提供界面。本课时介绍Android 四大核心组件之Activity的生命周期等内容。
Activities是一个程序的组件之一,主要功能是提供界面。本课时介绍Android 四大核心组件之Activity的生命周期等内容。
Android四大核心组件之Service与Activity不同,虽然看不到,但非常重要。本课时主要介绍Service的使用。
Android四大核心组件之Service与Activity不同,虽然看不到,但非常重要。本课时主要介绍Service的使用。
Broadcast是广播,和Android内的事件一样,它可以发出一个广播(事件),注册了该广播接收器(事件监听器)的所有组件都会接收到该广播,从而调用自己的响应方法(事件响应处理)。本课时主要介绍Broadcast Receiver的使用方法。
Content Provider是内容提供器,与内容(数据)的存取(存储、获取)有关,是Android应用程序的四大组成部分之一,是Android中的跨应用访问数据机制。本课时主要介绍Content Provider的使用方法。
Intent是同一个或不同的应用中的组件之间的消息传递的媒介,是一个将要执行动作的抽象描述,一般来说是作为参数来使用。 本课时主要介绍Intent的使用方法。
Intent是同一个或不同的应用中的组件之间的消息传递的媒介,是一个将要执行动作的抽象描述,一般来说是作为参数来使用。 本课时主要介绍Intent的实现方法。
Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。Android的五大布局分别是LinearLayout(线性布局)、FrameLayout(单帧布局)、RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)和TableLayout(表格布局)。本课时讲解如何在Android中进行界面布局。
ListView是用来显示一个列表的控件,它在Android源代码中是继承AbsListView类的,AbsListView类是继承于AdapterView类的,而AdapterView类是继承ViewGroup类的。本课时主要介绍ListView的使用方法。
ListView是用来显示一个列表的控件,它在Android源代码中是继承AbsListView类的,AbsListView类是继承于AdapterView类的,而AdapterView类是继承ViewGroup类的。本课时主要介绍ListView的使用方法。
ListView是用来显示一个列表的控件,它在Android源代码中是继承AbsListView类的,AbsListView类是继承于AdapterView类的,而AdapterView类是继承ViewGroup类的。本课时主要介绍ListView的使用方法。
本课时介绍Android中如何使用RadioGroup和RadioButton,实现自定义的RadioGroup中被选中RadioButton的变更监听事件。
CheckBox是多项选择,允许用户用列表中选择一个或多个选项, 它在android源代码中是继承CompoundButton类的,而CompoundButton类是继承于Button类的。本课程课时介绍了CheckBox的使用方法。
DatePicker是一个选择年月日的日历控件。本课时主要介绍DatePicker的使用方法。
TimePicker概述:TimePicker也继承自FrameLayout类,时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择,如果要捕获用户修改时间数据的事件,便需要为TimePicker添加 OnTimeChangedListener监听器。本课时讲解TimePicker的使用。
Spinner位于android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器,Spinner是View类的一个子类。本课时介绍Spinner的使用方法。
ProgressBar是一个进度条控件,当用户在后台执行一些任务时,在前台展示的信息,用于表示任务正在处理,请用户等待或者给用户展示处理的进度消息等,它在android源代码中是直接继承View类的。本课时介绍ProgressBar的使用方法。
SeekBar控件其实是相对高级的进度条,是可以拖动的,可以改变进度的一个进度条控件。本课时介绍SeekBar的使用方法。
GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。本课时介绍GridView的使用方法。
ProgressDialog,顾名思义,就是一个进度对话框,常用于显示载入进度、下载进度等,合理使用ProgressDialog能增加用户体验,让用户知道现在程序所处的状态。本课时介绍ProgressDialog的使用方法。
Notification是Android中常用的一种通知方式,当有未读短信或未接电话的时候,屏幕状态栏就会有提示图标,这时可以下拉状态栏来读取通知。在使用微信的时(微信在后台运行),如果有新消息时便会发出声音提示,状态栏也有相应的微信提示。本课时介绍Notification的使用方法。
ScrollView滚动视图是指当拥有很多内容,屏幕显示不完时,需要通过滚动跳来显示的视图。ScrollView只支持垂直滚动。本课程介绍了ScrollView的使用方法。
RatingBar是SeekBar和ProgressBar的扩展,用星星来评级,使用的默认大小RatingBar时,用户可以触摸/拖动或使用键来设置评分,它有大小两种样式,其中大的只适合指示,不适合于用户交互。本课时介绍RatingBar的使用方法。
ImageSwitcher类提供了图片切换功能,通过第三方的操作,设置当前ImageSwitcher显示的图片,同时设置图片变换的动画。本课时介绍ImageSwitcher的使用方法。
Gallery组件主要用于横向显示图像列表,不过按常规做法。Gallery组件只能有限地显示指定的图像。本课程介绍了Gallery的使用方法。
BaseAdapter是经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter。本课时介绍BaseAdapter的使用方法。
Android计算器是入门学习阶段最有趣的一个应用程序,本课时主要介绍实现一个简单Android计算器的所需要掌握的基本布局方法。
Android计算器是入门学习阶段最有趣的一个应用程序,本课时主要介绍实现一个简单Android计算器的具体实现方法。
Android中的后退事件在很多应用中被用到,给用户带来的方便之处妙不可言,非常友好的体现了Android的人机交互过程。本课时主要介绍后退事件中的使用方法。
AutoCompleteTextView是实现动态匹配输入的内容,如google搜索引擎当输入文本时可以根据内容显示匹配的热门信息。本课时介绍AutoCompleteTextView的使用方法。
EditText是一个非常重要的组件,可以说它是用户和Android应用进行数据传输窗户,有了它就等于有了一扇和Android应用传输的门,通过它用户可以把数据传给Android应用,然后得到想要的数据。本课时介绍EditText的使用方法。
在一个Android工程中,可能会使用大量的字符串作为提示信息,这些字符串都可作为字符串资源声明在配置文件中,从而实现程序的可配置性。本课时介绍字符串资源的使用方法。
本课时介绍国际化多语言的使用方法。
Android中颜色资源文件,几乎囊括了常用的各种颜色,选择颜色的时候一目了然,不必再为调色发愁。本课时介绍颜色资源的使用方法。
我们可以使用一些常用的尺寸单位来定义一些文字尺寸、视图组件的宽和高等,尺寸资源是一个数字类型的数据,被定义在res\values\dimens.xml文件中。本课时介绍尺寸资源的使用方法。
数组资源也就是一串字符串或者整数列表,经常被用于Menu和Spinner选项的保存。本课时介绍数组资源的使用方法。
Android SDK提供了一个强大的类Drawable。本课时介绍Drawable资源的使用方法。
样式是用于描述一个View或是一个窗口的显示属性的集合,样式可以指定如高度,填充,字体颜色,字体大小,背景颜色等属性。本课时介绍样式和主题的使用方法。
菜单是任何应用程序的一个重要部分,提供了透露应用程序功能和设置的通用接口。Android为开发者提供了一个简单的编程接口来实现各种条件下的标准化应用程序菜单。本课时介绍菜单资源的使用方法。
在androd手机中处理XML数据时很常见的事情,通常在不同平台传输数据的时候,就可能使用XML,XML是与平台无关的特性,被广泛运用于数据通信中。本课时介绍XML的使用方法。
在Android应用中使用assets目录下存放的资源文件,assets目录下存放的资源代表应用无法直接访问的原生资源,应用程序通过AssetManager以二进制流的形式来读取资源。本课时介绍assets资源的使用方法。
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。本课时介绍SharedPreferences存储的使用方法。
内部存储,就是将文件保存在设备内部存储器中,默认情况下,这些文件是相应程序私有的,对其他程序不透明,对用户也是不透明的,当程序卸载后,这些文件就会被删除。本课时主要介绍一般内部存储的使用方法。
所有Android设备都支持可以保存文件的共享外部存储器,这个外部存储器可以是可移动存储器(如SD卡),也可以是内置在设备中的外部存储器(不可移动)。本课时介绍一般外部存储的使用方法。
SQLite是一种关系型数据库,并且SQLite是轻量级的数据库解决方案,SQLite支持多数的SQL92标准,在一些场合下其性能优于MySql等数据库引擎。本课时介绍SQLite存储的使用方法。
SQLite是一种关系型数据库,并且SQLite是轻量级的数据库解决方案,SQLite支持多数的SQL92标准,在一些场合下其性能优于MySql等数据库引擎。本课时介绍SQLite存储的使用方法。
ContentProvider提供了在应用程序之前共享数据的一种机制,而每一个应用程序都是运行在不同的应用程序的,数据和文件在不同应用程序之间达到数据的共享不是没有可能,而是显得比较复杂,而正好Android中的ContentProvider则达到了这一需求,比如有时候我们需要操作手机里的联系人,手机里的多媒体等一些信息,我们都可以用到这个ContentProvider来达到所需。本课时介绍ContentProvider存储的使用方法。
通过调用Android的API,可以实现相册,播放器,录音和摄像等功能。本课时介绍多媒体的多种支持格式。
开发Android软件中可能经常需播放多媒体声音文件,一般使用MediaPlayer类,但该类占用资源较多,对于游戏等应用可能不是很适合,SoundPool类在SDK的android.media.SoundPool为声音池的意思。本课时介绍SoundPool的使用方法。
MediaPlayer播放音频比较简单,但要播放视频就需要SurfaceView,SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。本课时介绍MediaPlayer播放音频的使用方法。
使用VideoView播放视频简单、方便,除此之外,还可以利用MediaPlayer用来播放视频。本课时介绍MediaPlayer播放视频的使用方法。
VideoView是Android系统提供的一个媒体播放显示和控制的控件。本课时介绍VideoView播放视频的使用方法。
Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Intent和MediaStroe调用系统Camera App程序来实现拍照和摄像功能,二是根据Camera API自写Camera程序。本课时主要介绍Camera的使用方法。
由于对手机娱乐功能方面的需要,在Android系统中都是自带系统照相机程序的,直接调用系统的照相机程序是最便捷实现照相机功能的方式。本课时主要介绍系统拍照功能的使用方法。
在进行多媒体播放时,我们知道使用MediaPlayer类来进行处理,而对于多媒体的采样录制,在Android中使用了MediaRecorder类来进行处理。本课时主要介绍MediaRecorder录音的使用方法。
当一个Android项目开发完成后,需要打包和签名处理,这样才能放到手机中使用,当然也可以发布到Google Play上去让大家下载、让自己赚钱。本课时主要介绍应用程序打包发布的使用方法。
项目开发流程是做一个项目的开始,至关重要,它关系到整个项目的需求、设计、开发、测试和产品发布等等因素。本课时主要介绍项目开发的基本流程。
在Android应用中创建界面通常有两种方法,一种是使用xml创建布局,另一种则是在java代码中实现,与使用xml文件相比,它更加灵活、更加动态。本课时主要介绍界面的基本设计方法。
SQLite是一种流行的关系型数据库管理系统(Relational Database Management System, RDBMS),它具有以下特征:开源、符合标准、轻量级、单一层等。本课时主要介绍SQLite的使用方法。
本课时主要介绍记事本实例之呈现日志代码实现。
本课时主要介绍记事本实例之编辑添加日志代码实现。
本课时主要介绍记事本实例之添加日志附加媒体代码实现。
本课时主要介绍记事本实例之播放日志附加媒体代码实现。
本课时介绍什么是超级手电筒,有哪些功能,以及为后面的开发做一些准备工作。
本课时介绍超级手电筒的程序架构以及热点区域的布局。
本课时通过实例讲解闪光灯的控制方法和drawable资源。
本课时通过实例讲解超级手电筒的主界面布局和UI切换。
本课时学习多线程的使用,通过实例学会设置和获取屏幕亮度。
本课时讲解摩尔斯电码的理论,通过实例学会如何用闪光灯发送摩尔斯电码。
本课时通过实例讲解渐变drawable资源的用法和自定义控件的实现和使用。
本课时通过实例讲解搭建彩色灯的UI,根据彩色灯颜色设置自定义控件的文本颜色。
本课时通过实例讲解搭建彩色灯的UI,根据彩色灯颜色设置自定义控件的文本颜色。
本课时通过实例讲解搭建警灯的UI、控制警灯、实现窗口按两下退出。
本课时通过实例讲解搭建设置的UI、动态调整警示灯和警灯的闪烁频率及添加和删除快捷方式。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [记事本实例之界面设计]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [记事本实例之界面设计]
正在读取中...
正在读取中...

我要回帖

更多关于 listview item 高度 的文章

 

随机推荐