Как установить настраиваемую продолжительность для настраиваемого сообщения Toast? - PullRequest
2 голосов
/ 10 мая 2019

Поэтому я использую макет xml с Textview для создания настраиваемого тост-сообщения.Все работает отлично, за исключением пользовательской продолжительности для него.Я знаю, что могу установить значение LENGTH_SHORT или LENGTH_LONG, но я хочу, чтобы оно отображалось дольше, чем LENGTH_LONG.Я работал над этим часами, и я не уверен, что делаю неправильно.По сути, я хочу установить, на сколько секунд мой пользовательский тост появится на экране, а затем он исчезнет, ​​пока тост снова не будет вызываться каждый раз.Вот что я имею в своем классе Main Java ...

public class MainActivity extends AppCompatActivity {

Button b;
TextView tv;
Toast myToast;

Handler h;
Runnable r;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    b = findViewById(R.id.my_toast_button);


    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myCustomToast(getApplicationContext(), "Hello World!");
        }
    });
}

private void myCustomToast(final Context context, final String toastMessage) {
    LayoutInflater layoutInflater = getLayoutInflater();
    final View customToastLayout = layoutInflater.inflate(R.layout.my_custom_toast, (ViewGroup) findViewById(R.id.container));

    h = new Handler();
    r = new Runnable() {
        @Override
        public void run() {
            tv = customToastLayout.findViewById(R.id.my_custom_toast_tv);
            tv.setText(toastMessage);
            myToast = new Toast(context);
            myToast.setView(customToastLayout);
            myToast.setDuration(Toast.LENGTH_LONG);
            myToast.show();

            myCustomToast(context, toastMessage);
        }
    };

    h.postDelayed(r, 10000);

}

}

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Вы можете достичь этого, как это

private Toast mToastToShow;
public void showToast(View view) {
   // Set the toast and duration
   int toastDurationInMilliSeconds = 10000;
   mToastToShow = Toast.makeText(this, "Hello world, I am a toast.", Toast.LENGTH_LONG);

   // Set the countdown to display the toast
   CountDownTimer toastCountDown;
   toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, 1000 /*Tick duration*/) {
      public void onTick(long millisUntilFinished) {
         mToastToShow.show();
      }
      public void onFinish() {
         mToastToShow.cancel();
         }
   };

   // Show the toast and starts the countdown
   mToastToShow.show();
   toastCountDown.start();
}

Вы можете установить его на свой пользовательский вид

0 голосов
/ 10 мая 2019

Вместо использования Toast.LENGTH_LONG или Toast.LENGTH_SHORT, просто введите int, он ищет int.Я считаю, что это в миллисекундах, так что если вы используете 1000, это будет 1000 миллисекунд

...