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

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

White corners

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()

делает то, что я хочу.Спасибо, бластервла

1 Ответ

1 голос
/ 17 апреля 2019

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

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