1

我正在尝试在自定义可扩展列表视图中使用自定义字体。但是,当我尝试执行此操作时,最初,当加载 Viewpager 片段(我使用的)时,ExpandableListView 的文本和字体不可见。

一旦我单击可扩展列表视图中的空白文本,就会显示文本和字体。这个问题似乎只发生在自定义字体上。如果我使用任何其他自定义功能(例如更改 textview 的颜色等),它会运行良好。请帮助

请参阅所附图片以供进一步参考: 1 2

我的自定义可扩展列表适配器代码的相关部分:

public class MyExpandableListAdapter extends SimpleExpandableListAdapter {

    View cntView;
    LayoutInflater inflater;
    Context cxt;
    TextView tvGrp, tvChild;

    public MyExpandableListAdapter(Context context,
            List<? extends Map<String, ?>> groupData, int groupLayout,
            String[] groupFrom, int[] groupTo,
            List<? extends List<? extends Map<String, ?>>> childData,
            int childLayout, String[] childFrom, int[] childTo) {
        super(context, groupData, groupLayout, groupFrom, groupTo, childData,
                childLayout, childFrom, childTo);
        cxt=context;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {

        super.getGroupView(groupPosition, isExpanded, convertView, parent);
        View tmp;


        if (convertView == null) {  // if it's not recycled, initialize some attributes
            tmp=new View(cxt);
            inflater=(LayoutInflater)cxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            tmp=inflater.inflate(R.layout.explistgroup, null);
        }else{
            tmp = (View)convertView;
        }

        tvGrp=(TextView) tmp.findViewById(R.id.rowTextView);
        tvGrp.setTypeface(FontLoader.loadTypeface(cxt,R.raw.roboto_regular));  // This does not work. It shows a blank textview initially. Only after I click it, the typeface and the text come into effect
        //tvGrp.setText("ambit"); -- This works well

        return tmp;

    }
4

3 回答 3

0

尝试从资产加载自定义字体,例如:

Typeface tf = Typeface.createFromAsset(getAssets(), "<your font name>.ttf");
tvGrp.setTypeface(tf);
于 2013-01-25T15:09:54.157 回答
0

好的,这是您需要做的事情: 1- 在 Activity 中初始化一个公共静态变量,您在其中使用自定义适配器为您的可扩展列表视图说 MainListActivity,如下所示:

public static Typeface typeFace;

2- 现在像 Natali 在同一个 Activity 中提到的那样初始化它,如下所示:

tf = Typeface.createFromAsset(getAssets(), "<your font name>.ttf");

3- 现在按照 Natali 先生的指示在您的自定义适配器中使用以下内容,但稍作更改

tvGrp.setTypeface(MainListActivity.typeFace);

如果问题仍然存在,请尝试扩展自定义适配器类BaseExpandableListAdapter

于 2013-08-04T16:32:35.700 回答
0

您只创建一个视图,而不是为其设置文本。textxml中有没有?我认为这个方法应该是这样的:

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {

    ViewGroup tmp = (ViewGroup)super.getGroupView(groupPosition, isExpanded, convertView, parent);
    tvGrp=(TextView) tmp.findViewById(R.id.rowTextView);
    tvGrp.setTypeface(FontLoader.loadTypeface(cxt,R.raw.roboto_regular));  // This does not work. It shows a blank textview initially. Only after I click it, the typeface and the text come into effect
    //tvGrp.setText("ambit"); -- This works well

    return tmp;

}

或者您的创建和初始化而不是调用 super.

这应该可以正常工作。

于 2013-08-04T16:45:15.833 回答