当我将AppTheme设置为Theme.AppCompat.Light.DarkActionBar时,我无法使SpannableString工作。
我有一个按钮,其文本设置为SpannableString。当我使用Holo主题时,文本按预期呈现,但是当我切换到AppCompat主题时,span效果会被忽略。如何使用AppCompat主题使SpannableString工作?
styles.xml - 当在这两个主题之间切换时,我会得到截然不同的结果......
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar" />
<!--<style name="AppTheme" parent="@android:style/Theme.Holo.Light" />-->
</resources>
...我的按钮使用SpannableString
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
Button button = (Button) rootView.findViewById(R.id.button);
String detail = "ABC";
String caption = String.format("2 %s", detail);
Spannable span = new SpannableString(caption);
int detailIndex = caption.indexOf(detail);
span.setSpan(new StyleSpan(Typeface.BOLD), 0, detailIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new RelativeSizeSpan(0.5f), detailIndex, detailIndex+detail.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
button.setText(span);
return rootView;
}
}
答案 0 :(得分:8)
嗯,它与appcompat-v7
无关。如果您完全删除主题内容,并且只使用默认主题,则在Android 5.0+上您将获得Theme.Material
,并且可以看到相同的效果。
材料设计美学的一部分是按钮标题应该是全部大写,但是它们实现了消除你的跨度。 appcompat-v7
可以在5.0之前的设备上使用您的代码,建议他们的backported小部件效果不包含app-caps内容,并且他们将委托给5.0 +上的标准小部件。
在布局中向android:textAllCaps="false"
添加Button
似乎可以解决问题。