根据下拉框Spinner.isEnable更改其字体颜色

这里提供两种方法,应该还有更简单的方法,希望前辈们不吝赐教。

通常情况下:



在Adapter中调用自定义的TevtView 这里叫它 myTextView


关键代码 是 这个View的 id="@android:id/text1"



<?xml version="1.0" encoding="utf-8"?>
<TextView 
xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:textColor="@color/textcolor"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:gravity="center_vertical" >
</TextView>


以及 android:textColor="@color/textcolor" 当然其他样式应该也是可以修改的,例如背景等
@color/textcolor 其实是res/color/textcolor下的 一个xml文件 由selector组成,里面有两个Item分别表示为
Spinner.isEnable()为true 和 false 时 各自字体的颜色


下面是 这个 xml


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="#ff808080"/>
    <item android:color="#000000"/>

</selector>


下面是activity的内容,内容中的TextValue只是一个自定的类而已,可以忽略

package com.example.spinnerchangestyle;


import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;


public class MainActivity extends Activity 
{
private Button btnOnly;
private Button btnEnable;
private Spinner spinner;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnOnly = (Button) findViewById(R.id.btn_spinnerOnlyRead);
btnEnable = (Button) findViewById(R.id.btn_spinnerEnable);
spinner = (Spinner) findViewById(R.id.spinner);
List<TextValue> dnsyList = new ArrayList<TextValue>();
TextValue tv1 = new TextValue();
tv1.setText("个人电脑");
tv1.setValue("0");
dnsyList.add(tv1);
TextValue tv2 = new TextValue();
tv2.setText("公司电脑");
tv2.setValue("1");
dnsyList.add(tv2);
TextValue tv3 = new TextValue();
tv3.setText("客户提供");
tv3.setValue("2");
dnsyList.add(tv3);
ArrayAdapter<TextValue> adapter=new ArrayAdapter<TextValue>(this,R.layout.mylayout, dnsyList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

btnOnly.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) 
{
// TODO Auto-generated method stub
spinner.setEnabled(false);
}
});

btnEnable.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) 
{
// TODO Auto-generated method stub
spinner.setEnabled(true);
}
});

}


}


注意!我在实际的开发中还有一种方法可以实现上述功能,而且用上述方法且不能实现(至少我目前实验的情况是酱)

方法2:

自定义一个类继承Adapter,实现其中的getView方法,getView中的view其实就是Spinner显示为一行时的那个view,所以在这里更改view的样式就可以了

关键代码同上,只是多了个自定义的类。由于要自定义Adapter类,要new下面的Adapter来用,而此时用到的myAdapter中的view的样式,就是前面提到的自定义的Textview

dnsySpinner = (Spinner) findViewById(R.id.dnsyet);
adapter = new MySpinnerAdapter(AddActivity.this, R.layout.spinner_layout, dnsyList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dnsySpinner.setAdapter(adapter);

如下:


public class MySpinnerAdapter extends ArrayAdapter<TextValue>
{
private Context context;


public MySpinnerAdapter(Context context, int resource, List<TextValue> objects)
{
super(context, resource, objects);
this.context = context;
}


@Override
public View getView(int position, View convertView, ViewGroup parent)
{
TextView view = (TextView) super.getView(position, convertView, parent);

AddActivity add = (AddActivity)context;
Spinner spinner = (Spinner) add.findViewById(R.id.dnsyet);

if(spinner.isEnabled())
{
view.setTextColor(Color.parseColor("#000000"));这里其实就是修改了自定义TextView中的字体的颜色为黑色
}
else
{      
view.setTextColor(Color.parseColor("#808080"));灰色
}
return view;
}
}

这样还不能能实现如题所述的功能的,需要在设置mySpinner.setEnable(true或者false)的下一行代码中在setAdapter,因为自定义的类中的getView方法时在setAdapter的时候调用的,如果不setAdapter的话就无法实现更改样式的功能了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值