Android: 在旧吐司上设置新文本并更新持续时间
Android: Setting new text on old toast and renew duration
我有一个简单的应用程序,它有一个按钮和点击侦听器,它显示一个 toast,其中包含在按钮上执行的点击次数:
class MainActivity : AppCompatActivity() {
private val toast by lazy { Toast.makeText(this, "", LENGTH_LONG) }
var count = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener { updateToast() }
}
private fun updateToast() {
count++
toast.setText(count.toString())
toast.show()
}
}
我遇到的问题是每次点击后 toast 的持续时间不会更新,在 20 次点击后(例如)toast 消失并且再也不会显示,即使我在显示之前再次设置它的持续时间也是如此:
private fun updateToast() {
count++
toast.setText(count.toString())
toast.duration = LENGTH_LONG
toast.show()
}
我总是可以取消当前显示的 toast 并创建新的,但我想知道是否有一种方法可以更新现有 toast 上的文本并让它在新创建的期间保留在屏幕上干杯。
即使有,也不要那样做。
从用户体验的角度来看,想象一下如果弹出 Toast
并显示 Your file was saved
,然后它突然变为 Your file wasn't saved
。
如果两条消息之间没有 well-defined 图形处理,用户很可能会错过文本更新。
这就是 Toast
应该是 immutable
元素的原因。
如果您需要交流新事物,请使用不同的 Toast
。
这实际上是某些 Android
设备中的一个问题:两个后续的 Toast
消息通常不会 fade-out
和 fade-in
强调 够了;如果两条消息的文本长度非常相似,您可能不会注意到后者。
您可以这样做,而不是使用相同的 Toast 对象。如您所知,每次创建新对象时,因为它的边界是 method level
,所以对象很容易被 garbage collector
.
捕获
private fun updateToast(String message) {
count++
Toast.makeText(context, message, Toast.LENGTH_LONG).show()
}
现在从您的 clickListner 调用此方法。
如果您想一次显示一个 toast,那么您可以借助 toast 中的 isShown() 方法 class。
public void showAToast (String st){ //"Toast toast" is declared in the class
try{ toast.getView().isShown(); // true if visible
toast.setText(st);
} catch (Exception e) { // invisible if exception
toast = Toast.makeText(theContext, st, toastDuration);
}
toast.show(); //finally display it
}
希望对您有所帮助。
我有一个简单的应用程序,它有一个按钮和点击侦听器,它显示一个 toast,其中包含在按钮上执行的点击次数:
class MainActivity : AppCompatActivity() {
private val toast by lazy { Toast.makeText(this, "", LENGTH_LONG) }
var count = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener { updateToast() }
}
private fun updateToast() {
count++
toast.setText(count.toString())
toast.show()
}
}
我遇到的问题是每次点击后 toast 的持续时间不会更新,在 20 次点击后(例如)toast 消失并且再也不会显示,即使我在显示之前再次设置它的持续时间也是如此:
private fun updateToast() {
count++
toast.setText(count.toString())
toast.duration = LENGTH_LONG
toast.show()
}
我总是可以取消当前显示的 toast 并创建新的,但我想知道是否有一种方法可以更新现有 toast 上的文本并让它在新创建的期间保留在屏幕上干杯。
即使有,也不要那样做。
从用户体验的角度来看,想象一下如果弹出 Toast
并显示 Your file was saved
,然后它突然变为 Your file wasn't saved
。
如果两条消息之间没有 well-defined 图形处理,用户很可能会错过文本更新。
这就是 Toast
应该是 immutable
元素的原因。
如果您需要交流新事物,请使用不同的 Toast
。
这实际上是某些 Android
设备中的一个问题:两个后续的 Toast
消息通常不会 fade-out
和 fade-in
强调 够了;如果两条消息的文本长度非常相似,您可能不会注意到后者。
您可以这样做,而不是使用相同的 Toast 对象。如您所知,每次创建新对象时,因为它的边界是 method level
,所以对象很容易被 garbage collector
.
private fun updateToast(String message) {
count++
Toast.makeText(context, message, Toast.LENGTH_LONG).show()
}
现在从您的 clickListner 调用此方法。
如果您想一次显示一个 toast,那么您可以借助 toast 中的 isShown() 方法 class。
public void showAToast (String st){ //"Toast toast" is declared in the class
try{ toast.getView().isShown(); // true if visible
toast.setText(st);
} catch (Exception e) { // invisible if exception
toast = Toast.makeText(theContext, st, toastDuration);
}
toast.show(); //finally display it
}
希望对您有所帮助。