Многострочный TextView не обертывать границы слов, а использовать полные строки [дублировать]

Добавление случая, когда имя класса для объекта, используемого в структуре сущности, такое же, как имя класса для файла с кодировкой веб-формы.

Предположим, у вас есть веб-форма Contact.aspx, чей класс codebehind Свяжитесь с вами, и у вас есть имя объекта Contact.

Затем следующий код вызовет исключение NullReferenceException при вызове context.SaveChanges ()

Contact contact = new Contact { Name = "Abhinav"};
var context = new DataContext();
context.Contacts.Add(contact);
context.SaveChanges(); // NullReferenceException at this line

Ради полноты класса DataContext

public class DataContext : DbContext 
{
    public DbSet Contacts {get; set;}
}

и класс сущности контакта. Иногда классы сущностей являются частичными классами, так что вы можете распространять их и в других файлах.

public partial class Contact 
{
    public string Name {get; set;}
}

Ошибка возникает, когда оба класса entity и codebehind находятся в одном и том же пространстве имен. Чтобы исправить это, переименуйте класс сущности или класс codebehind для Contact.aspx.

Причина. Я все еще не уверен в причине. Но всякий раз, когда какой-либо из классов сущностей расширяет System.Web.UI.Page, возникает эта ошибка.

Для обсуждения рассмотрим NullReferenceException в DbContext.saveChanges ()

14
задан Christian 25 February 2011 в 15:55
поделиться

4 ответа

Это немного взломанно, но вы можете заменить пробелы символом пробела unicode без пробела (U + 00A0). Это приведет к тому, что ваш текст будет обрабатываться как одна строка и обернуть символы вместо слов.

myString.replace(" ", "\u00A0");

26
ответ дан martinp 25 August 2018 в 17:47
поделиться

После каждого символа добавьте невидимое пространство нулевой ширины ('\ u200b'):

textView.setText(longlongText.replaceAll(".(?!$)", "$0\u200b"));

Это также работает для длинных строк, не содержащих пробелов (например, ссылок на ссылки). Стандартный TextView пытается сломать ссылку вопросительным знаком '?' и слэш '/'.

3
ответ дан atarasenko 25 August 2018 в 17:47
поделиться

Как я знаю, такого свойства для TextView нет. Если вы хотите реализовать перенос текста самостоятельно, вы можете переопределить TextView и использовать функцию Paint breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) . Обратите внимание, что вы должны указать размер текста, шрифт и т. Д. На экземпляр Paint .

6
ответ дан Daniel DiPaolo 25 August 2018 в 17:47
поделиться
public class CharacterWrapTextView extends TextView {
  public CharacterWrapTextView(Context context) {
    super(context);
  }

  public CharacterWrapTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public CharacterWrapTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

  @Override public void setText(CharSequence text, BufferType type) {
    super.setText(text.toString().replace(" ", "\u00A0"), type);
  }
}

<com.my.CharacterWrapTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text"/>

(желтый фон: нормальный текст)

1
ответ дан susemi99 25 August 2018 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: