我连续几个TextViews,我希望第一个TextView占用所有备用空间,但如果TextViews的组合长度太长而无法放在一行上,我希望第一个TextView被切断.
至于备用空间,我将第一个TextView的layout_width设置为匹配parent和layout_weight为1.我只是不能让它切断任何多余的字母,所以它适合一行.
我想要的是像'Text'和'Long Text'这样的东西
'Text :data'
'Long T :data'
Run Code Online (Sandbox Code Playgroud)
所以'长文'被切断为'Long T'以适应.
我得到的是
'Text :data'
'Long Text :d'
Run Code Online (Sandbox Code Playgroud)
谢谢!
我的活动有一个 EditText 和一个按钮。当按钮被按下时,一个长时间运行的函数被调用。在此期间,应禁用 EditText。当函数完成后,应该重新启用 EditText。这在运行应用程序时工作正常,但是我编写了一个 Espresso 单元测试来测试这种行为,该行为似乎行为不正确。
看起来长时间运行的功能会暂停运行超过 3 秒的单元测试。一旦长时间运行的函数完成,单元测试然后测试 EditText 是否被禁用,它不再是因为任务完成并且loading
变量被设置回false
我希望单元测试然后启动该函数,因为它在协程中运行,它将继续到下一行以检查 EditText 是否被禁用。
我已经尝试了 CommonPool、UI、launch、async、Deferred 等的所有不同变体,但似乎没有得到正确的行为。
suspend fun getData(): String {
// simulate network request delay
delay(3000)
return "Hello, world!"
}
Run Code Online (Sandbox Code Playgroud)
fun onButtonClicked() {
// data binding field to disable EditText
loading = true
launch(CommonPool) {
// make "network call"
val data = getData().await()
// reenable EditText
loading = false
}
}
Run Code Online (Sandbox Code Playgroud)
@Test
fun disableEditText() {
// check the EditText starts off enabled
onView(withId(R.id.edit_text))
.check(matches(isEnabled())) …
Run Code Online (Sandbox Code Playgroud) 我有一个Web服务器,它创建一个QR码,它是[用户名] + [用户名] [密码]的md5哈希值.其中[username]是当时登录的用户.其中[密码]是我设置的系统密码,对于Web服务器和应用程序是通用的.
我的Android/iPhone/BlackBerry/Windows应用程序将扫描此QR码并使用QR码中提供的[用户名]与[密码]进行哈希,这将告诉我QR码来自我的服务器.
显然,如果有人要抓住[密码],那么他们可以创建不是来自我的网络服务器的QR码.那么无论如何要安全地存储[密码]在我的应用程序中,或者有人反编译.apk并在classes.dex中找到它?