Android开发 如何重写SimpleAdapter,自定义字体的大小?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发 如何重写SimpleAdapter,自定义字体的大小?相关的知识,希望对你有一定的参考价值。
原来的代码是使用的simpleAdapter,但是字体大小只能在xml文件中修改,这样的话要想适应不同的屏幕大小只能建很多的xml文件,所以就想重写simpleAdapter,自定义字体大小。
有没有现成的例子??具体该怎么写?
下面给出我的实现方式吧,希望对你有帮助
public class MySimpleAdapter extends SimpleAdapterprivate LayoutInflater mInflater;
private final float titleFontSize;
private final float screenWidth; //屏幕宽
private final float screenHeight; //屏幕高
public MySimpleAdapter(Context context,
List<? extends Map<String, ?>> data, int resource, String[] from,
int[] to)
super(context, data, resource, from, to);
// 获取屏幕的长和宽
DisplayMetrics dm = new DisplayMetrics();
dm = context.getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
//设置标题字体大小
titleFontSize = adjustTextSize();
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@Override
public View getView(int position, View convertView, ViewGroup parent)
if(convertView == null)
convertView = mInflater.inflate(R.layout.judge_item, null);
TextView tv_title = (TextView) convertView.findViewById(R.id.itemTitle);
TextView tv_content = (TextView) convertView.findViewById(R.id.itemContext);
tv_title.setTextSize(titleFontSize); //设置字体大小,
return super.getView(position, convertView, parent);
float adjustTextSize()
float textsize = 12;
//在这实现你自己的字体大小算法,可根据之前计算的屏幕的高和宽来按比例显示
textsize = screenWidth/320 * 12;
return textsize;
这是我的算法,希望对你有帮助哈。用的时候直接把SimpleAdapter替换成MySimpleAdapter即可~
参考技术A 现成的例子写起来也需要时间,不如这样,你可以直接在itemTitle或其他textview中定义字体大小,这样多方便啊。追问但是,这样大小只能写一个固定的值。如果设备的分辨率变大或者变小的话,字体的大小无法自适应啊!
追答在adapter中写也是一个固定值啊。如果你在adapter中能写一个适配屏幕大小的 方法的话,还不如直接写一个适配大小的工具类。
追问恩,有道理。做安卓开发的时间不是很长,知识面还比较小。谢谢。
追答嗯,有什么疑问可随时问。共同学习
参考技术B 适配器的操作:records = new ArrayList<Map<String, String>>();
adapter = new SimpleAdapter(Activity.this, records,
android.R.layout.simple_list_item_2, new String[] "data1",
"data2" , new int[] android.R.id.text2,
android.R.id.text1 );
listView.setAdapter(adapter);
设置字体大小,代码如下:
class MyAdapter extends ArrayAdapter<String>
LayoutInflater inflator;
public StudentAdapter(Context context)
super(context, 0);
inflator = LayoutInflater.from(context);
@Override
public View getView(int position, View convertView, ViewGroup parent)
if (convertView == null)
convertView = inflator.inflate(android.R.layout.simple_list_item_2, parent, false);
TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
TextView text2 = (TextView) convertView.findViewById(android.R.id.text2);
text1.setTextSize(14);
text2.setTextSize(12);
text1.setText("title");
text2.setText("summary");
return convertView;
Android ListView重写BaseAdapter如何改变指定item中的TextView的颜色?
例如,要每隔两个item就将其中的TextView变成红色,如何在BaseAdapter中重写?
参考技术A 在类中定义一个类 继承BaseAdapter然后重写getView
public View getView(int position, View convertView,
ViewGroup parent)
position 就是下标 每隔两个 就是 position%3==2
下面是例子:--------------------------------------------------------------------------------------
class MyTextAdapter extends BaseAdapter
//自定义Adapter以内部类形式存在于MainActivity中,方便访问MainActivity中的各个变量,特别是texts数组(你要显示的数组)
private Context context;//用于接收传递过来的Context对象
public MyImgAdapter(Context context)
super();
this.context = context;
@Override
public int getCount()
return texts.length;
@Override
public Object getItem(int position)
return position;
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
//针对每一个数据创建一个TextView实例,
TextView tv = new TextView(context);//针对外面传递过来的Context变量,
tv.setLayoutParams(new LayoutParams(80, 80));//设置大小为80*80
tv.setText(texts[position]);//设置要显示的内容
if(position%3==2)//第三个变颜色
tv.setTextColor(Color.RED);
else
tv.setTextColor(Color.BLACK);
return tv;
本回答被提问者和网友采纳
以上是关于Android开发 如何重写SimpleAdapter,自定义字体的大小?的主要内容,如果未能解决你的问题,请参考以下文章
Android 开发 重写定位器类Timer与TimerTask
Android开发,重写了onConfigurationChanged方法。横屏切换竖屛不会重建,而竖屛切换横屏却仍会重建活动