在Android自定义列表视图中设置字体
我使用自定义布局来显示我的ListView项目。 但当我试图在运行时设置字体时,应用程序崩溃了。 首先,我试图访问onCreate中布局的TexView。。。看到它不起作用,我在网上寻找答案,发现我应该在自定义适配器中进行设置。我也试过了,同样的结果 我的适配器如下所示:在Android自定义列表视图中设置字体,android,android-listview,typeface,Android,Android Listview,Typeface,我使用自定义布局来显示我的ListView项目。 但当我试图在运行时设置字体时,应用程序崩溃了。 首先,我试图访问onCreate中布局的TexView。。。看到它不起作用,我在网上寻找答案,发现我应该在自定义适配器中进行设置。我也试过了,同样的结果 我的适配器如下所示: public class VizitaAdapter extends ArrayAdapter<Vizita>{ Context context; int layoutResourceId;
public class VizitaAdapter extends ArrayAdapter<Vizita>{
Context context;
int layoutResourceId;
Typeface fontux = null;
public VizitaAdapter(Context context, int layoutResourceId, Vizita[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
fontux = Typeface.createFromAsset(context.getAssets(), "fonts/myrprocond.otf");
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
WeatherHolder holder = null;
...
...
((TextView)row).setTypeface(fontux);
return row;
}
公共类VizitaAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
字体fontux=null;
公共VizitaAdapter(上下文上下文、int-layoutResourceId、Vizita[]数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
fontux=Typeface.createFromAsset(context.getAssets(),“font/myrprocond.otf”);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
WeatherHolder=null;
...
...
((TextView)行)。设置字体(fontux);
返回行;
}
因此,当我的活动开始时,我会收到一条错误消息,导致应用程序崩溃。在此之前,应用程序运行良好。
我做错了什么?
我应该能够为不同的字体设置不同的文本视图。这实际上是我所需要的。但我甚至不能同时设置所有文本视图
请帮忙。
多谢各位
更新
原木在下面
08-01 16:57:22.727:D/szipinf(881):初始化充气状态
08-01 16:57:22.787:D/AndroidRuntime(881):关闭虚拟机
08-01 16:57:22.787:W/dalvikvm(881):threadid=1:线程以未捕获异常退出(组=0x40015560)
08-01 16:57:22.797:E/AndroidRuntime(881):致命异常:主
08-01 16:57:22.797:E/AndroidRuntime(881):java.lang.ClassCastException:android.widget.RelativeLayout
08-01 16:57:22.797:E/AndroidRuntime(881):在softwarex.sscommonitor_custom.VizitaAdapter.getView(VizitaAdapter.java:50)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.AbsListView.obtainView(AbsListView.java:1430)
08-01 16:57:22.797:E/AndroidRuntime(881):位于android.widget.ListView.makeAndAddView(ListView.java:1745)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.ListView.fillDown(ListView.java:670)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.ListView.fillFromTop(ListView.java:727)
08-01 16:57:22.797:E/AndroidRuntime(881):位于android.widget.ListView.layoutChildren(ListView.java:1598)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.AbsListView.onLayout(AbsListView.java:1260)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.view.view.layout(view.java:7175)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.RelativeLayout.onLayout(RelativeLayout.java:912)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.view.view.layout(view.java:7175)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.FrameLayout.onLayout(FrameLayout.java:338)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.view.view.layout(view.java:7175)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.view.view.layout(view.java:7175)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.widget.FrameLayout.onLayout(FrameLayout.java:338)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.view.view.layout(view.java:7175)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.view.ViewRoot.performTraversals(ViewRoot.java:1140)上
08-01 16:57:22.797:E/AndroidRuntime(881):在android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
08-01 16:57:22.797:E/AndroidRuntime(881):位于android.os.Handler.dispatchMessage(Handler.java:99)
08-01 16:57:22.797:E/AndroidRuntime(881):在android.os.Looper.loop(Looper.java:123)上
08-01 16:57:22.797:E/AndroidRuntime(881):位于android.app.ActivityThread.main(ActivityThread.java:3683)
08-01 16:57:22.797:E/AndroidRuntime(881):位于java.lang.reflect.Method.Invokenactive(本机方法)
08-01 16:57:22.797:E/AndroidRuntime(881):位于java.lang.reflect.Method.invoke(Method.java:507)
08-01 16:57:22.797:E/AndroidRuntime(881):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-01 16:57:22.797:E/AndroidRuntime(881):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-01 16:57:22.797:E/AndroidRuntime(881):在dalvik.system.NativeStart.main(本机方法)
08-01 16:57:24.657:I/进程(881):发送信号。PID:881 SIG:9
我不知道如何格式化日志以使其更具可读性:(
另外,我更改了上面的代码以反映最新的尝试(这也给了我这个错误)请附上日志。
这一行很可能有NullPointerException
:
Typeface face=Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf");
((TextView)row).setTypeface(face);
convertView
可能是null
,在这种情况下,您应该创建一个新的,或者调用super class()的方法getView
请附加日志。
这一行很可能有NullPointerException
:
Typeface face=Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf");
((TextView)row).setTypeface(face);
convertView
可能是null
,在这种情况下,您应该创建一个新的,或者调用super class()的方法getView
,我建议对适配器使用这种样式。使用holder并检查convertView是否为null:VizitaAdapter.java中的50行是多少?此行:((TextView)行)。setTypeface(fontux);似乎行
的类型是RelativeLayout
,不能将其强制转换为TextView
。如果是这样,您应该使用findViewById
来获取TextVie