uipickerview 选中行怎么去更改选中item的字体颜色

android如何实现点击布局之后其下面的子控件改变字体颜色,定义的颜色选择器只能实现点击子控件变色,附_百度知道50430人阅读
android(24)
需要说明的是,在正常默认情况下都是选择Item橙黄色,点击Item橙黄色,但是如果你设置了Item整体布局的背景色 android:background=&#000000&则,你的上面两个都会不起作用,导致你selected了Item看不出来是否选择了。
那如何改橙黄色为绿色呢?????
step1:list_item.xml中的代码:
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
&&& android:layout_width=&fill_parent&
&&& android:layout_height=&45dp&
&&& android:orientation=&vertical&
&&& android:background=&@drawable/list_item_bg&
&& &RelativeLayout
&&&&&& android:layout_width=&fill_parent&
&&&&&& android:layout_height=&fill_parent&
&&&&&& android:gravity=&center_vertical&
&&&&&& &TextView
&&&&&&&&& .....
&&&&&&&&&& /&
&&&&&& &ImageView
&&&&&&&&&& ....
&&&&&&&&&& /&
&& &/RelativeLayout&
&/LinearLayout&
============================================
drawable下的 list_item_bg.xml中的代码:
&?xml version=&1.0& encoding=&utf-8& ?&
&selector xmlns:android=&/apk/res/android&&
& &item android:state_selected=&true&
&&&&&&& android:drawable=&@color/blue& /&
& &item android:state_focused=&true&
&&&&&&& android:drawable=&@color/blue& /&
&/selector&
list.setOnItemClickListener(new OnItemClickListener(){
&& &&& &&& &&& &@Override
&& &&& &&& &&& &public void onItemClick(AdapterView&?& arg0, View arg1,
&& &&& &&& &&& &&& &&& &int arg2, long arg3) {
&& &&& &&& &&& &&&
&& &&& &&& &&& &&& &arg1.setBackgroundResource(R.color.blue);& //&注意是这个方法o
&& &&& &&& &&& &&&& .......
&& &&& &&& &&& &}});
注意:当完成第二步之后,再运行程序会发现有个小小的问题,当你点击item时,选中的颜色会先是默认的橙黄色,然后变成设置的绿色。所以我们需要进行step3。
step3:在myList.xml中的 ListView设置:
&android:listSelector=&@android:color/transparent&&& //&将选中的默认设置为透明色
android:listSelector=&#&&
这样就ok了
还有其他方法
ListView选中时默认是黄色,很多时候会和我们软件的配色不符合,那么我就教你如何修改默认的ListView配色,改变ListView选中颜色有两个方法:
1. 在程序中:
Java代码 &
Drawable&drawable=getResources().getDrawable(R.drawable.touch_feedback);&&
ListView.setSelector(drawable);&&
Drawable drawable=getResources().getDrawable(R.drawable.touch_feedback); ListView.setSelector(drawable);
2. 在xml里面的ListView标签下添加:
Java代码 &
android:listSelector=”#″&//后面的颜色可以自己定这样写是透明的&&
android:listSelector=”#″ //后面的颜色可以自己定这样写是透明的
记录和恢复ListView滚动的位置
有时候我们需要记录当前ListView滚动到的位置,重新加载的时候要回到原位,不罗嗦,给出代码:
Java代码 &
//列表滚动&& private&OnScrollListener&ScrollLis&=&new&OnScrollListener()&{&&
&&& &&&&@Override&&
&&&&public&void&onScroll(AbsListView&arg0,&int&arg1,&int&arg2,&int&arg3)&{&&
&&&&}&& &&& &&&&@Override&&
&&&&public&void&onScrollStateChanged(AbsListView&view,&int&scrollState)&{&&
&&&&&&&&if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){&&
&&&&&&&&&&&&&&&&&&&&ListPos=list.getFirstVisiblePosition();&&//ListPos记录当前可见的List顶端的一行的位置&&
&&&&&&&&&&&&}&&
&&&&}&& };&&
接下来就是还原位置,放在ListView加载之后:
Java代码 &
list.setSelection(ListPos);&&
list.setSelection(ListPos);
关于android ListView的美化
用心的朋友应该会发现,listview中在设置了背景之后。会有些问题。
1.、listview在拖动的时候背景图片消失变成黑色背景。等到拖动完毕我们自己的背景图片才显示出来。
2 、listview的上边和下边有黑色的阴影。
3、lsitview的每一项之间需要设置一个图片做为间隔。
针对以上问题 在listview的xml文件中设置一下语句。
问题1 有如下代码结解决 android:scrollingCache=”false” 或 android:cacheColorHint=”#″
问题2 用如下代码解决:android:fadingEdge=”none”
问题3 用如下代码解决: android:divider=”@drawable/list_driver” 其中 @drawable/list_driver 是一个图片资源
ListView拖动时背景黑色的问题
我们知道在Android中ListView是一个比较常用的UI控件,我们在大部分开发中都需要用到它,因此Android为我们提供了 ListView的多种实现方法,通过自定义显示布局让显示的内容更加美观,但是我们会发现这样一个问题,当我们操作ListView的时候,如果不使用手机上下按键的时候,直接用触摸拖动视图的方式,会发现ListView的背景一片黑色,而且所有被选中的文字都变成一片漆黑。
其实这个问题发生的原因在于ListView存在缓存颜色机制,因此我们可以通过设定缓存颜色为透明的方法来解决这个问题。提供两个解决方法供大家使用,如下所示:
A、通过布局属性来设定(ListView的属性中直接定义)
android:cacheColorHint=”#″
B、在代码中直接设定
listView.setCacheColorHint(Color.TRANSPARENT);
这样就可以解决黑色出现的问题了。
ListView 中添加按钮,动态删除添加ItemView的操作
要实现添加按钮的操作,必须自定义Adapter,使用Button View的setTag()方法,将Button所属的位置设置到tag当中
要实现动态添加删除ItemView的操作,必须首先调整调整Adapter所绑定的数据源,然后调用Adapter的notifyDataSetChanged()方法
以下为实现的一个实例
Java代码 &
package&com.jason.&&
&&& import&java.util.ArrayL&&
import&java.util.HashM&&
import&java.util.L&&
import&java.util.M&&
&&& import&android.app.ListA&&
import&android.content.I&&
import&android.os.B&&
import&android.view.LayoutI&&
import&android.view.V&&
import&android.view.ViewG&&
import&android.view.W&&
import&android.view.View.OnClickL&&
import&android.widget.BaseA&&
import&android.widget.B&&
import&android.widget.EditT&&
import&android.widget.TextV&&
&&& public&class&SendMain&extends&ListActivity&implements&OnClickListener{&&
&&& &&&&Button&buttonMessage,buttonContact,buttonH&&
&&&&EditText&textM&& &&& &&&&List&Map&String,String&&&contacts&=&new&ArrayList&Map&String,String&&();&&
&&& &&& &&& &&&&@Override&&
&&&&protected&void&onCreate(Bundle&savedInstanceState)&{&&
&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&this.requestWindowFeature(Window.FEATURE_NO_TITLE);&&
&&& &&&&&&&&this.setContentView(R.layout.layout_send);&&
&&& &&&&&&&&buttonMessage&=&(Button)&this.findViewById(R.id.ButtonMessage);&&
&&&&&&&&buttonContact&=&(Button)&this.findViewById(R.id.ButtonContact);&&
&&&&&&&&buttonHistory&=&(Button)&this.findViewById(R.id.ButtonHistory);&&
&&& &&&&&&&&textMessage&=&(EditText)this.findViewById(R.id.EditTextMessage);&&
&&&&&&&&textMessage.setText(this.getIntent().getExtras().getString(&message&));&&
&&& &&&&}&& &&& &&&&public&void&onClick(View&v)&{&&
&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&switch(v.getId()){&&
&&&&&&&&case&R.id.ButtonMessage:&&
&&&&&&&&&&&&this.finish();&&
&&&&&&&&&&&&break;&&
&&&&&&&&case&R.id.ButtonContact:&&
&&&&&&&&{&& &&&&&&&&&&&&Intent&intent&=&new&Intent();&&
&&&&&&&&&&&&intent.setAction(&com.jason.action.contact&);&&
&&&&&&&&&&&&this.startActivityForResult(intent,&0);&&
&&&&&&&&}&& &&&&&&&&&&&&break;&&
&&&&&&&&case&R.id.ButtonHistory:&&
&&&&&&&&{&& &&&&&&&&&&&&Intent&intent&=&new&Intent();&&
&&&&&&&&&&&&intent.setAction(&com.jason.action.history&);&&
&&&&&&&&&&&&this.startActivityForResult(intent,&1);&&
&&&&&&&&}&& &&&&&&&&&&&&break;&&
&&&&&&&&}&& &&& &&&&}&& &&& &&& &&&&protected&void&onActivityResult(int&requestCode,&int&resultCode,&Intent&data)&{&&
&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&super.onActivityResult(requestCode,&resultCode,&data);&&
&&&&&&&&&if&(requestCode&==&0&&&&resultCode&==&RESULT_OK)&{&&
&&&&&&&&&&&&this.getcontactFromString(data.getExtras().getString(&&
&&&&&&&&&&&&&&&&&&&&UserSelectActivity.RETURN_LIST));&&
&&&&&&&&&&&&bindDataToList();&&
&&&&&&&&}&& &&&&}&& &&& &&&&private&void&getcontactFromString(String&data)&{&&
&&&&&&&&if&(data&==&null&||&data.length()&==&0)&{&&
&&&&&&&&&&&&return;&&
&&&&&&&&}&& &&& &&& &&&&&&&&String[]&arrayContact&=&data.split(&#&);&&
&&&&&&&&for&(String&singleContact&:&arrayContact)&{&&
&&&&&&&&&&&&if&(singleContact&!=&null&&&&singleContact.length()&&&0)&{&&
&&&&&&&&&&&&&&&&String[]&props&=&singleContact.split(&:&);&&
&&&&&&&&&&&&&&&&if&(props.length&==&2)&{&&
&&&&&&&&&&&&&&&&&&&&Map&String,String&&contact&=&new&HashMap&String,String&();&&
&&&&&&&&&&&&&&&&&&&&contact.put(&name&,&props[0]);&&
&&&&&&&&&&&&&&&&&&&&contact.put(&phone&,&props[1]);&&
&&&&&&&&&&&&&&&&&&&&contacts.add(contact);&&
&&& &&&&&&&&&&&&&&&&}&&
&&&&&&&&&&&&}&&
&&& &&&&&&&&}&& &&& &&&&}&& &&& &&&&private&void&bindDataToList(){&&
&&&&&&&&this.setListAdapter(new&MyAdapter());&&
&&&&}&& &&& &&&&public&class&MyAdapter&extends&BaseAdapter{&&
&&& &&&&&&&&public&int&getCount()&{&&
&&&&&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&&&&&return&contacts.size();&&
&&&&&&&&}&& &&& &&&&&&&&public&Object&getItem(int&position)&{&&
&&&&&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&&&&&return&contacts.get(position);&&
&&&&&&&&}&& &&& &&&&&&&&public&long&getItemId(int&position)&{&&
&&&&&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&&&&&return&&&
&&&&&&&&}&& &&& &&& &&&&&&&&public&View&getView(int&position,&View&convertView,&ViewGroup&parent)&{&&
&&&&&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&&&&&LayoutInflater&inflater&=&SendMain.this.getLayoutInflater();&&
&&&&&&&&&&&&&final&View&view&=&inflater.inflate(R.layout.layout_user_item,&null);&&
&&&&&&&&&&&&&final&TextView&textPhone&=&(TextView)&view.findViewById(R.id.text1);&&
&&&&&&&&&&&&&final&TextView&textName&=&(TextView)&view.findViewById(R.id.text2);&&
&&&&&&&&&&&&&Button&button&=&(Button)view.findViewById(R.id.buttonDelete);&&
&&& &&&&&&&&&&&&&textPhone.setText(contacts.get(position).get(&phone&));&&
&&&&&&&&&&&&&textName.setText(contacts.get(position).get(&name&));&&
&&& &&&&&&&&&&&&&button.setTag(&position);&&
&&& &&&&&&&&&&&&&button.setOnClickListener(new&OnClickListener(){&&
&&& &&&&&&&&&&&&&&&&public&void&onClick(View&v)&{&&
&&&&&&&&&&&&&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&&&&&&&&&&&&&int&position&=&Integer.parseInt(v.getTag().toString());&&
&&&&&&&&&&&&&&&&&&&&contacts.remove(position);&&
&&&&&&&&&&&&&&&&&&&&MyAdapter.this.notifyDataSetChanged();&&
&&& //&&&&&&&&&&&&&&&&&&SendMain.this.getListView().refreshDrawableState();&&
&&&&&&&&&&&&&&&&}});&&
&&& &&& &&& &&& &&&&&&&&&&&&return&&&
&&&&&&&&}&& &&& &&&&}&& }&&
Android ListView 清单与其Trigger 触发事件
Android ListView 清单与其选择时的触发事件,
可以参考下面的程式范例 :
Java代码 &
public&class&helloWorld&extends&Activity&{&&
&&& &&&&String[]&vData&=&null;&&
&&& &&&&public&void&onCreate(Bundle&savedInstanceState)&{&&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&& &&&&&&&&//&要做为ArrayAdapter的资料来源&&
&&&&&&&&vData&=&new&String[]{&足球&,&棒球&,&篮球&};&&
&&& &&&&&&&&//&建立&阵列接收器&&&
&&&&&&&&ArrayAdapter&String&&&arrayData&=&new&ArrayAdapter&String&(&&
&&&&&&&&&&&&&&&&this&&
&&&&&&&&&&&&&&&&,&android.R.layout.simple_list_item_1&&
&&&&&&&&&&&&&&&&,&vData&&
&&&&&&&&&&&&&&&&);&&
&&& &&&&&&&&//&建立ListView&物件&&
&&&&&&&&ListView&&lv&=&new&ListView(this);&&
&&& &&&&&&&&//&设定ListView&的接收器,&做为选项的来源&&
&&&&&&&&lv&.&setAdapter&(&arrayData&);&&
&&& &&&&&&&&//&ListView&设定Trigger&&
&&&&&&&&lv&.&setOnItemClickListener&(&new&OnItemClickListener()&{&&
&&& &&&&&&&&&&&&public&void&onItemClick&(AdapterView&?&&arg0,&View&arg1,&int&arg2,&&
&&&&&&&&&&&&&&&&&&&&long&arg3)&{&&
&&&&&&&&&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&&&&&&&&&setTitle(&getResources().getString(R.string.app_name)&+&&:&&&+&vData&[&arg2&]);&&
&&&&&&&&&&&&}&&
&&&&&&&&});&& &&& &&&&&&&&//&设定ListView&为ContentView&&
&&&&&&&&setContentView(lv);&&
&&&&}&& }&&
Android中的ListView内容刷新问题
最近在学习Android的listView控件时遇到了一个问题,如何添加一个Item到ListView中并及时的刷新出来。在网上查了很多帖子,很多人在问,也很多人在解答,但是总的来说都没找到详细的解决方案。对于ListView与数据库的同步,高手们建议使用 ContentProvider对象。但是如果我不使用数据库呢?也有人回答用notifyDataSetChanged()方法。这倒是一个正确的解决方案,但是对于新手来说,还是比较困惑怎么去用,这里我贴一下我的用法:
Java代码 &
OnClickListener&listener2&=&new&OnClickListener()&{&&
&&&&&&&&@Override&&
&&&&&&&&public&void&onClick(View&v)&{&&
&&&&&&&&&&&&//&TODO&Auto-generated&method&stub&&
&&&&&&&&&&&&Map&String,&Object&&m&=&new&HashMap&String,&Object&();&&
&&&&&&&&&&&&String&tiString&&=&tv.getText().toString();&//&注意这里我为什么要取出这个EditText的内容&&
&&&&&&&&&&&&m.put(&prod_na&,&tiString);&//&而不这样写&m.put(&prod_na&,&tv.getText());&&
&&&&&&&&&&&&m.put(&prod_type&,&tiString);&//&因为tv.getText()返回的是Editable对象,真正的数据是被缓存的,&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&也就是说你后续的EditText改动都会影响之前添加的Item&&
&&&&&&&&&&&&coll.add(m);&&
&&& &&&&&&&&&&&&//&取回Adapter对象,用于调用notifyDataSetChanged方法。&&
&&&&&&&&&&&&SimpleAdapter&sAdapter&=&(SimpleAdapter)lv.getAdapter();&&
&&&&&&&&&&&&sAdapter.notifyDataSetChanged();&&
&&&&&&&&}&& &&&&};&&
这里涉及到了Android中的MVC模式概念,如何存储数据,控制和显示。
你可以认为ListView是一个View,那么mode是什么呢?显然是SimpleAdapter对象,而Control又是什么呢?那只能是notifyDataSetChanged()了。当数据变化时,也就是SimpleAdapter所处理的数据变化了,那么我们就需要调用 notifyDataSetChanged 去通知View作出改变。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:226952次
积分:1784
积分:1784
排名:第16274名
原创:23篇
转载:12篇
评论:32条
(2)(1)(1)(1)(2)(2)(5)(2)(9)(5)(5)iOS开发- backBarButtonItem 颜色/文字修改
iOS7之后. 默认的返回按钮字体颜色是蓝色的, 显示内如是父VC(上一级界面)的title如果要做修改, 可以通过下面的办法:1. 修改字体颜色(1) 在plist里面, 加上View controller-based status bar appearance, 并且设置为NO(2) 在需要修改的那个界面. 加入如下代码(加在viewDIdLoad即可)
self.navigationController.navigationBar.barStyle = UIStatusBarStyleD
[self.navigationController.navigationBar setTintColor:[UIColor greenColor]];
2. 修改文字内容若 A--->B 即从A, push 到B, 返回按钮在B则在A界面里面, 加入如下代码
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] init];
backItem.title = @"哟西";
self.navigationItem.backBarButtonItem = backI则返回按钮的文字就会变成 "哟西"
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'NavigationView是android5.0以后引进的新控件,就是侧滑栏,但是策划栏MenuItem的字体颜色和默认选中项不是很好修改,经过我的摸索,发现字体颜色和默认选中项都是可以修改的。
首先在res/color文件下创建一个selector文件navigation_menu_item_color.xml,内容如下:
&?xml version=&1.0& encoding=&utf-8&?&
&selector xmlns:android=&/apk/res/android&&
&item android:state_checked=&true&
android:color=&@color/colorAccent&&&/item& &!-- selected颜色 --&
&item android:state_pressed=&true&
android:color=&@color/colorAccent&/& &!-- pressed颜色 --&
&item android:state_focused=&true&
android:color=&@color/colorAccent&/& &!-- focused颜色 --&
&item android:color=&#FFFFFF&/& &!-- default颜色 --&
&/selector&
对应填充自己的颜色就可以了。
3.java代码
上面的做完后需要在代码中区设置。
/**设置MenuItem的字体颜色**/
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
Resources resource=(Resources)getBaseContext().getResources();
ColorStateList csl=(ColorStateList)resource.getColorStateList(R.color.navigation_menu_item_color);
navigationView.setItemTextColor(csl);
/**设置MenuItem默认选中项**/
navigationView.getMenu().getItem(0).setChecked(true);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4749次
排名:千里之外
原创:15篇
(1)(8)(1)(1)(6)(1)(1)(1)(2)(2)要求是选中某一行的时候字体变化,代码如下
.h&UIPickerViewDataSource,UIPickerViewDelegate&
(assign,nonatomic)NSInteger selectedR
-(void)viewDidLoad
[super viewDidLoad];&
self.timeArray = [[NSArray alloc]initWithObjects:@&0&,@&2&,@&4&,@&6&,@&8&,@&10&,@&12&,
self.selectedRow = -1;&
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView
*)pickerView
-(NSInteger)pickerView:(UIPickerView
*)pickerView numberOfRowsInComponent:(NSInteger)component
return [self.timeArray count];
-(NSString
*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
NSString *timeString = self.timeArray[row];
return timeS&
-(void)pickerView:(UIPickerView
*)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
//获取对应列,对应行的数据
self.pickTimeString=self.timeArray[row];
self.selectedRow =&
[self.picker
selectRow:self.selectedRow inComponent:0 animated:YES]; &
[self.picker reloadComponent:0];&
*)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
& & & UILabel* pickerLabel = (UILabel*)
& & if (!pickerLabel)
& & & & pickerLabel = [[UILabelalloc]init];
& & & & pickerLabel.minimumScaleFactor =0.5;
& & & & pickerLabel.adjustsFontSizeToFitWidth =YES;
& & & & [pickerLabel
setTextAlignment:NSTextAlignmentCenter];
& & & & [pickerLabel
setBackgroundColor:[UIColorclearColor]];
& & if (row ==self.selectedRow) {
& & & & NSString *selectString = [self.timeArrayobjectAtIndex:self.selectedRow];
& & & & NSDictionary *attributeDict =@{NSForegroundColorAttributeName : [UIColororangeColor]};
& & & & NSMutableAttributedString *attributedString = [[NSMutableAttributedStringalloc]initWithString:selectStringattributes:attributeDict];
& & & & NSRange stringRange = {0,[attributedStringlength]};
& & & & [attributedStringaddAttribute:NSUnderlineStyleAttributeNamevalue:[NSNumbernumberWithInteger:NSUnderlineStyleSingle]range:stringRange];
& & & & pickerLabel.attributedText = attributedS
& & }else{
& & & & pickerLabel.text=[selfpickerView:pickerViewtitleForRow:rowforComponent:component];
& & return pickerL
-(CGFloat)pickerView:(UIPickerView
*)pickerView rowHeightForComponent:(NSInteger)component
return 30;
-(CGFloat)pickerView:(UIPickerView
*)pickerView widthForComponent:(NSInteger)component
return 30;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:23349次
排名:千里之外
原创:40篇
转载:84篇
(1)(4)(16)(4)(19)(5)(2)(6)(12)(15)(14)(3)(9)(9)(13)(1)}

我要回帖

更多关于 uipickerview选中状态 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信