Toast.makeText(…).show() иногда смещается

#android #alignment #toast #android-context

#Android #выравнивание #toast #android-контекст

Вопрос:

Я использую Toast.makeText для отображения результатов из диалоговых окон и сталкиваюсь с немного странной проблемой: текст отображается над фреймом, который должен его содержать, вот так:

Сообщение смещено с рамкой. Пожалуйста, выровняйте его лучше. [_________________________________________________]

Обычно я использую код, похожий на

 Toast bread = Toast.makeText(getContext(), R.string.message, Toast.LENGTH_LONG);
bread.show();
  

из диалогового окна. Я слышал, что плохой контекст иногда может вызывать проблемы с инфляцией, но getOwnerActivity() возвращает значение null, так что это исключено. В любом случае, я бы подумал, что getContext() предоставит контекст, переданный во время построения, что в любом случае является действием.

Есть предложения?

Комментарии:

1. Попробуйте изменить getContext() с помощью getApplicationContext() …

Ответ №1:

вы можете попробовать это:

 Toast bread = Toast.makeText(getApplicationContext(), R.string.message, Toast.LENGTH_LONG);
bread.show();
  

Комментарии:

1. Недоступен из класса Dialog, но будет getContext().getApplicationContext() работать?

2. Это было написано как комментарий к вопросу, прежде чем вы опубликуете этот ответ

3. @CrimsonChin Извините, я бы сразу отметил это, но это заставляет вас ждать десять минут, и я забыл.

Ответ №2:

 bread.setGravity(5,5,5);
  

попробуйте поиграть, изменяя эти значения, пока не получите точное местоположение.

Но использование Gravity.CENTER и других констант является предпочтительным способом..

Ответ №3:

Если вы создаете toast изнутри действия, вы должны использовать: this или MyActivityName.this в качестве параметра контекста.

Ответ №4:

Попробуйте использовать,

 <supports-screens
   android:largeScreens="true"
   android:normalScreens="true"
   android:smallScreens="true"
   android:anyDensity="true" /> 
  

в вашем файле манифеста.