Как вы делаете предупреждение с закругленными углами, используя Anko без использования XML?

1

Я хотел бы сделать предупреждение с закругленными углами, используя anko, без использования какого-либо XML. Я вставил мою текущую попытку ниже. Есть ли способ сделать прозрачное настраиваемое представление оповещения полностью прозрачным или сделать его округлым и изменить цвет фона?

Изображение 174551

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"
Теги:
kotlin
anko

1 ответ

0

Вы можете сделать следующее:

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()
/* ... */

Ещё вопросы

Сообщество Overcoder
Наверх
Меню