【问题标题】:TTF font to icon doesn't work in listview androidTTF字体到图标在listview android中不起作用
【发布时间】:2016-06-10 18:36:49
【问题描述】:

我有一个包含天气图标的 ttf 文件。我想使用这种字体在列表视图中为每日温度创建天气图标。我已经很好地设置了它,并且我也在列表视图中获得了图标,但不是在任何地方都只有八个列表视图项目之一。另外,当我向上和向下滚动时,它只会刷新到一个地方,而不是到处。我正在为我设置所有数据的列表视图发布 getview 方法。

        public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder;

        if(convertView==null){
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.activity_whether_list_style, null);
            holder = new ViewHolder();
            holder.description = (TextView) convertView.findViewById(R.id.description);
            holder.weatherIcon = (TextView) convertView.findViewById(R.id.weather_iconT);
            holder.maxTemp = (TextView) convertView.findViewById(R.id.max_temp);
            holder.minTemp = (TextView) convertView.findViewById(R.id.min_temp);
            holder.dayName = (TextView) convertView.findViewById(R.id.day);
            convertView.setTag(holder);
        }

        else  holder = (ViewHolder)convertView.getTag();

        Daily daily = dailyTest.get(position);
        holder.description.setText(daily.getDescription());
        holder.dayName.setText(daily.getFormattedTime());

        Typeface typeface = Typeface.createFromAsset(getAssets(), "Weather&Time.ttf" );
        holder.weatherIcon.setTypeface(typeface);
        holder.weatherIcon.setText(daily.getWeatherIconString());


        //for two digit temp format.. adding 0 for single digits.
        int maxtemp = (daily.getMaxTemp()-32)*5/9;
        if(maxtemp<10){
            holder.maxTemp.setText("0"+ maxtemp);
        } else holder.maxTemp.setText(""+ maxtemp);

        int mintemp = (daily.getMinTemp()-32)*5/9;
        if(mintemp<10) {
            holder.minTemp.setText("0"+ mintemp);

        } else holder.minTemp.setText(""+ mintemp);


        return convertView;
    }

【问题讨论】:

  • 如果字体是“图标字体”,如 fontello 或 fontastic,则需要引用正确的 Unicode 字符。
  • unicode 是正确的,但问题是它仅在 8 个列表视图项中呈现两个
  • 你使用 Android N Dev-Preview 吗?

标签: android listview truetype


【解决方案1】:

请同时粘贴您的 Viewholder 类代码。

如果您提到了静态 Textview,请从其中删除 static 关键字。

您也可以参考this 了解更多信息

【讨论】:

  • 视图中没有静态字段。并且该文档用于显示位图..我不在这里渲染位图..它只是将字体转换为文本视图中的图标..
【解决方案2】:

您没有将上下文传递给 createFromAsset 字体,请将上下文传递给 createFromAsset 并尝试此代码。

 if(convertView==null){
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.activity_whether_list_style, null);
            holder = new ViewHolder();
            holder.description = (TextView) convertView.findViewById(R.id.description);
            holder.weatherIcon = (TextView) convertView.findViewById(R.id.weather_iconT);
            holder.maxTemp = (TextView) convertView.findViewById(R.id.max_temp);
            holder.minTemp = (TextView) convertView.findViewById(R.id.min_temp);
            holder.dayName = (TextView) convertView.findViewById(R.id.day);
            convertView.setTag(holder);
        }

        else  holder = (ViewHolder)convertView.getTag();

        Daily daily = dailyTest.get(position);
        holder.description.setText(daily.getDescription());
        holder.dayName.setText(daily.getFormattedTime());

        Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "Weather&Time.ttf" );
        holder.weatherIcon.setTypeface(typeface);
        holder.weatherIcon.setText(daily.getWeatherIconString());


        //for two digit temp format.. adding 0 for single digits.
        int maxtemp = (daily.getMaxTemp()-32)*5/9;
        if(maxtemp<10){
            holder.maxTemp.setText("0"+ maxtemp);
        } else holder.maxTemp.setText(""+ maxtemp);

        int mintemp = (daily.getMinTemp()-32)*5/9;
        if(mintemp<10) {
            holder.minTemp.setText("0"+ mintemp);

        } else holder.minTemp.setText(""+ mintemp);


        return convertView;
    }

【讨论】:

    猜你喜欢
    • 2018-11-11
    • 2014-02-06
    • 2012-05-09
    • 2013-05-25
    • 2012-09-03
    • 2013-01-08
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多