更新5月14日API11(和now12)和Spannable導致運行NPE
它的文本大小,打破它的搭配,如果我只是一個喜歡的顏色的變化更換
<item name = "android:textSize">16sp</item>
<item name="android:textColor">#00ff00</item>
然後它運行正常。
引用TextLine,在logcat中測量應該給了我一個線索。 雖然我仍然想要修復它,但我相信其他人會對單個文本行中的大小混合進行要求。
Udpdated 5月12日 - 最少的代碼示例被示出在該交
代碼這下SDK 2.everything正常工作的端部,在一個3.0模擬器中運行時引發一個空指針異常。我已經縮小到我的代碼中唯一出現的SpannableString。我正在使用它在屏幕頂部的橫幅區域放置不同字體大小的文本。的logcat的是:
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.text.style.TextAppearanceSpan.updateDrawState(TextAppearanceSpan.java:209)
at android.text.TextLine.handleRun(TextLine.java:848)
at android.text.TextLine.measureRun(TextLine.java:399)
at android.text.TextLine.measure(TextLine.java:278)
at android.text.TextLine.metrics(TextLine.java:252)
at android.text.Layout.measurePara(Layout.java:1432)
at android.text.Layout.getDesiredWidth(Layout.java:89)
at android.text.Layout.getDesiredWidth(Layout.java:68)
at android.widget.TextView.onMeasure(TextView.java:5713)
at android.view.View.measure(View.java:10577)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:581)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:365)
at android.view.View.measure(View.java:10577)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:581)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:365)
at android.view.View.measure(View.java:10577)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:581)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:365)
at android.view.View.measure(View.java:10577)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4270)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
at android.view.View.measure(View.java:10577)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:764)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:519)
at android.view.View.measure(View.java:10577)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4270)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:1876)
at android.view.View.measure(View.java:10577)
at android.view.ViewRoot.performTraversals(ViewRoot.java:885)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1944)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:126)
at android.app.ActivityThread.main(ActivityThread.java:3997)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
的代碼是一個由計時器稱爲處理程序,將其寫入與以下基本行的文本視圖(null檢查等中省略)
TextView tvBanner = (TextView) findViewById(R.id.RefText);
.....
int startSpan = altDispStr.indexOf("\n");
int endSpan = altDispStr.length();
spanRange = new SpannableString(altDispStr);
spanRange.setSpan(new TextAppearanceSpan(this,
R.style.custompoint), startSpan, endSpan,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
....
....
tvBanner.setText(spanRange);
當我陷阱它在調試器中(使用3.0模擬器和3GB內存不容易),它會通過處理程序方法確定, - spanRange不爲空,但NPE和FC稍後會在主循環中發生。
textview(RefTxt)位於main.xml中包含的名爲infobar.xml的xml中。信息欄的基本組成部分是:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/BannerRelView"
android:layout_alignParentTop="true"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="#800000ff"
android:layout_width="wrap_content">
<TextView
android:id="@+id/BannerOptionsButton"
android:layout_alignParentRight="true"
....
</TextView>
<TextView
android:id="@+id/BannerGPS"
android:layout_toLeftOf="@+id/BannerOptionsButton"
....
</TextView>
<TextView
android:id="@+id/RefText"
android:layout_toLeftOf="@+id/BannerGPS"
......
</TextView>
</RelativeLayout>
如果我更換一個普通的舊的字符串,然後在3.0的模擬器的應用程序運行的SpannableString。 我想知道是否有任何額外的措施,我需要採取Spannables和平板設備?
當它死,調試透視圖顯示 - MT和TL都是不爲空
更新例如 我已經減少這這表明了錯誤最小的代碼示例,它是在確定2.1但具有相同NPE崩潰下3.0
活動碼:
public class SpanTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String dispStr = "I'm the first line\nI'm the second line";
TextView tvBanner = (TextView) findViewById(R.id.textView1);
int startSpan = dispStr.indexOf("\n");
int endSpan = dispStr.length();
Spannable spanRange = new SpannableString(dispStr);
spanRange.setSpan(new TextAppearanceSpan(this, R.style.custompoint), startSpan, endSpan, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tvBanner.setText(spanRange);
}
}
main.xml是僅包含一個TextView的LinearLayout。我的styles.xml包含custompoint是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style
name="custompoint">
<item name="android:textSize">24sp</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
。
如何設置linkColor?添加- #ff0000
給出了一個錯誤,並在谷歌上linkColor不給我一個線索 –
NickT
2011-05-13 21:36:41
它終於接受- #0000ff
然後我把TextAppearanceSpan tas = new TextAppearanceSpan(ctx,R.style.custompoint); \t \t ColorStateList csl = tas.getLinkTextColor();在代碼中。它撿起來確定但仍然像以前一樣死去。 (我希望谷歌能在他們的命名約定中保持一致性!) –
NickT
2011-05-13 22:10:42
嘗試'- #ff0000
'。 –
Femi
2011-05-13 22:25:48