#android #kotlin #anko
#Android #kotlin #anko
Вопрос:
Я хотел бы создать оповещение со скругленными углами с помощью anko, без использования какого-либо XML. Я вставил свою текущую попытку ниже. Есть ли какой-либо способ сделать пользовательский вид оповещения полностью прозрачным или сделать его закругленным и изменить цвет фона?
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
alert {
customView {
verticalLayout {
backgroundDrawable = GradientDrawable().apply {
shape = GradientDrawable.RECTANGLE
cornerRadius = 15f
setColor(Color.BLACK)
}
for(i in 0..5){
textView("Hello World") {
textColor = Color.WHITE
gravity = Gravity.CENTER
}.lparams(matchParent,dip(50))
}
}
}
}.show()
}
}
Зависимости
ext.kotlin_version = '1.3.21'
ext.anko_version='0.10.8'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0-alpha03'
implementation 'androidx.core:core-ktx:1.1.0-alpha05'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.2-alpha02'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha02'
// Anko Commons
implementation "org.jetbrains.anko:anko-commons:$anko_version"
// Anko Layouts
implementation "org.jetbrains.anko:anko-sdk15:$anko_version"
// sdk15, sdk19, sdk21, sdk23 are also available
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
Редактировать:
var alertDialog: Dialog? = null
alertDialog = alert {
customView {
verticalLayout {
backgroundDrawable = GradientDrawable().apply {
shape = GradientDrawable.RECTANGLE
cornerRadius = 15f
setColor(Color.BLACK)
}
for(i in 0..5){
textView("Hello World") {
textColor = Color.WHITE
gravity = Gravity.CENTER
}.lparams(matchParent,dip(50))
}
button {
text = "Cancel"
setOnClickListener {
alertDialog?.dismiss()
}
}
}
}
}.show() as? Dialog
// This right here does the trick
alertDialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
alertDialog?.show()
делает то, что я хочу. Спасибо, blastervla
Ответ №1:
Вы можете сделать следующее:
val alertDialog: Dialog = alert {
customView {
/* Your custom view DSL */
}
}.build() as Dialog // You can use conditional as? syntax for extra safety
// This right here does the trick
alertDialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
alertDialog.show()
Обратите внимание, что при этом вам нужно будет самостоятельно устанавливать заголовки и кнопки внутри contentView, поскольку в противном случае они будут отображаться на прозрачном фоне. Если вам нужна кнопка «отклонить», вы можете внести следующие изменения в объявление диалогового окна:
var alertDialog: Dialog? = null
alertDialog = alert {
customView {
/* ... */
button {
text = "Cancel"
setOnClickListener {
alertDialog?.dismiss()
}
}
}
}.build()
/* ... */