Недавно добавляемая строка, которую я использовал в своем приложении, перестала отображаться на некоторых устройствах.
Это работало в прошлом, но тогда я не уверен, когда он перестал работать (вероятно, после недавнего обновления SDK).
В любом случае происходит то, что textView со сменным модулем корректно отображается на некоторых устройствах (т. Е. На планшете или на устройствах с большим экраном, но не на всех, т. Е. Проблема имеет один плюс один), но на других устройствах это не так. отображается вообще (выглядит более не обновленным, так как я попытался поместить строку-заполнитель, и эта строка отображается, даже если я уверен, что вызывается метод setText).
Так что я не уверен, в чем может быть проблема. Это textView я использую:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="40dp"
android:gravity="center"
android:id="@+id/edition_name"
android:shadowDx="3"
android:shadowDy="3"
android:shadowRadius="1.5"
android:shadowColor="@color/transparentGrey"
android:layout_below="@+id/space"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
/>
И вот как я устанавливаю spannableString:
private void updateText(TextView textView, String title, String value){
SpannableString styledString;
if(title != null) {
styledString = new SpannableString(title + ": " + value);
styledString.setSpan(new StyleSpan(Typeface.BOLD), title.length() + 2, styledString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
} else {
styledString = new SpannableString(value);
styledString.setSpan(new StyleSpan(Typeface.BOLD), 0, styledString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
Log.i(TAG, "Spannable String: " + styledString.toString());
textView.setText(styledString);
textView.invalidate();
}
Я в другом случае. В любом случае все остальные строки, составленные в части if, работают правильно.
Проверяемая мной строка spannable не пуста.
И когда в ландшафтном режиме он отображает текст. Я думал, что это может быть связано с проблемой размеров, поэтому я попытался сделать строку меньше, но безуспешно.
Есть идеи, почему это происходит?
Я проверил этот вопрос: Почему мой разводной не отображается?
Не уверен, что дело в ответе о высоте применимо к моему делу. На данный момент высота, заданная для textView, равна wrap-content.
- ОБНОВЛЕНИЕ
Еще одна интересная вещь, которую я обнаружил, заключается в том, что если я поворачиваю экран и он переходит в альбомный режим, появляется строка (она использует другой файл макета), а когда я поворачиваю ее обратно в вертикальное положение, строка появляется (не выровненная в любом случае) .
Второе обновление
Хорошо, это интересно, я попытался прокомментировать использование spannable строки и использовать только текст, как есть, я столкнулся с той же проблемой.
Вероятно, сусла, показывающего метод onActivityCreated, где я заполняю компоненты:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState != null){
edition = (Edition) savedInstanceState.getSerializable(EDITION_DETAIL);
}
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
boolean useAppStorage = preferences.getBoolean("network_symbols", false);
String imagePath;
Activity currentActivity = getActivity();
TextView editionCodeView = (TextView) currentActivity.findViewById(R.id.edition_code);
TextView editionLaunchView = (TextView) currentActivity.findViewById(R.id.edition_launch);
TextView editionNameView = (TextView) currentActivity.findViewById(R.id.edition_name);
TextView editionSizeView = (TextView) currentActivity.findViewById(R.id.edition_size);
ImageView editionImageView = (ImageView) currentActivity.findViewById(R.id.edition_detail_image);
TextView otherAttributes = (TextView) currentActivity.findViewById(R.id.otherAttributes);
TextView cardsComposition = (TextView) currentActivity.findViewById(R.id.cards_composition);
Button gathererButton = (Button) currentActivity.findViewById(R.id.gatherer_button);
gathererButton.setOnClickListener(this);
if(edition != null) {
updateText(editionCodeView, currentActivity.getString(R.string.edition_code), edition.getCode());
showLaunchText(editionLaunchView, currentActivity, edition.getLaunchYear(), edition.getLaunchMonth());
//updateText(editionNameView, null, edition.getName());
if(edition.getTotalCards() != 0) {
updateText(editionSizeView, currentActivity.getString(R.string.total_cards), String.valueOf(edition.getTotalCards()));
}
updateText(cardsComposition, edition);
String extraProperties = buildExtraPropertiesString();
if(extraProperties != null && !extraProperties.equals("")){
updateText(otherAttributes, currentActivity.getString(R.string.other_attributes_label), extraProperties);
}
if(edition.getImage() == null) {
editionImageView.setImageResource(R.drawable.ic_block_black_48dp);
} else {
if(!useAppStorage){
imagePath = SYMBOL_FOLDER + edition.getImage();
} else {
imagePath = getActivity().getFilesDir() + "/" + SYMBOL_FOLDER + edition.getImage();
}
Drawable symbolDrawable = ImageUtils.loadImage(imagePath, getActivity().getAssets(), getResources(), SCALE_SIZE, useAppStorage);
if(symbolDrawable != null){
editionImageView.setImageDrawable(symbolDrawable);
} else {
editionImageView.setImageResource(R.drawable.ic_block_black_48dp);
}
}
editionNameView.setText(edition.getName());
}
}
Третье обновление
Это очень странно, я попытался использовать строку как есть, воссоздать новое текстовое представление с нуля, и по какой-то причине это единственный TextView, который не обновляется.
Должна быть причина.
И еще одна странность в том, что даже если я попытаюсь установить для нее строку с добавлением стоимости, она не отобразится.