Android开发 如何重写SimpleAdapter,自定义字体的大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发 如何重写SimpleAdapter,自定义字体的大小?相关的知识,希望对你有一定的参考价值。

原来的代码是使用的simpleAdapter,但是字体大小只能在xml文件中修改,这样的话要想适应不同的屏幕大小只能建很多的xml文件,所以就想重写simpleAdapter,自定义字体大小。

有没有现成的例子??具体该怎么写?

下面给出我的实现方式吧,希望对你有帮助

public class MySimpleAdapter extends SimpleAdapter 
 private 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 app被kill

Android开发,重写了onConfigurationChanged方法。横屏切换竖屛不会重建,而竖屛切换横屏却仍会重建活动

android 如何重写seekbar

android 重写gallery如何调用

如何重写android程序activity的返回活动