Android – настраиваемое всплывающее окно, касающееся внешнего события

Я пытаюсь использовать Пользовательское всплывающее уведомление с ImageView и TextView. Я хочу, чтобы мой тост исчезал, когда я касаюсь чего-либо (нажатие кнопки, касание макета...), но это не так.

Я прочитал файл Toast.class и попытался использовать метод cancel() перед вызовом нового Toast, но это ничего не решило. Может ли кто-нибудь дать мне решение?

My CustomToast.java:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(
        Context.LAYOUT_INFLATER_SERVICE);
View v = new View(context);
v = inflater.inflate(R.layout.custom_toast, (ViewGroup) v.findViewById(
        R.id.layout_custom_toast));

layout = (RelativeLayout) v.findViewById(R.id.layout_custom_toast);
tvToast = (TextView) v.findViewById(R.id.tv_custom_toast);
tvToast.setText(text);

ivToast = (ImageView) v.findViewById(R.id.iv_custom_toast);
layout.setBackgroundResource(R.drawable.border_style_red);
ivToast.setBackgroundResource(R.drawable.warning);

Toast toast = new Toast(context);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(v);
toast.show();

person Taeng    schedule 11.05.2015    source источник
comment
Вы видели этот вопрос? stackoverflow.com/q/10070108/1979347   -  person Rohan Kandwal    schedule 11.05.2015
comment
Пожалуйста, проверьте этот blog.ravinishad.com/post/84906000396/toasts-dont -раздражает-меня   -  person Napolean    schedule 11.05.2015
comment
Решение состоит в том, чтобы построить Toast на основе (отклоняемого) AlertDialog. Много туториалов и вопросов по этому поводу.   -  person shkschneider    schedule 11.05.2015
comment
Спасибо за ответы. @shkschneider - я решил эту проблему, инициализировав объект всплывающего уведомления с помощью Toast.makeText(...), удалив все представления и добавив ImageView и TextView.   -  person Taeng    schedule 11.05.2015
comment
Рад, что вы решили это. Опубликуйте свое решение в качестве ответа, а затем примите его самостоятельно, чтобы закрыть этот вопрос, пожалуйста.   -  person shkschneider    schedule 11.05.2015


Ответы (1)


Решение: я использовал Toast.makeText(...) вместо new Toast(..), потому что он увеличивает ресурс в скрытом API (com.android.internal.R), и вы не можете получить к нему доступ. Инициализация всплывающего объекта с помощью Toast.makeText(...) упрощает доступ к скрытому API.

Toast toast = Toast.makeText(context, text, duration);

layout = (LinearLayout) toast.getView();
layout.removeAllViews();
layout.setOrientation(LinearLayout.HORIZONTAL);

int dftPadding = (int) StaticValues.dpToPixel(context, 10);
layout.setPadding(dftPadding, dftPadding, dftPadding, dftPadding);
ivToast = new ImageView(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, (int) StaticValues.dpToPixel(context, 5), 0);
ivToast.setLayoutParams(params);
layout.setBackgroundResource(R.drawable.border_style_red);
ivToast.setBackgroundResource(R.drawable.warning);
layout.addView(ivToast);
tvToast = new TextView(context);
tvToast.setTextColor(Color.BLACK);
tvToast.setTypeface(null, Typeface.BOLD);
tvToast.setText(text);
layout.addView(tvToast);
toast.show();
person Taeng    schedule 12.05.2015