Android генерировать представления без родителя - PullRequest
0 голосов
/ 10 января 2020

Все еще довольно плохо знаком с Android Я успешно собрал ImageView - расположенный в моей деятельности XML - для создания видео для целей тестирования. Теперь я хочу создать несколько видов программно, без привязки их к операции XML или к родительскому элементу, а возможно, позже в отдельном потоке.

Я пытаюсь сделать это следующим образом:

    val testView = View(requireContext())
    testView.setBackgroundColor(requireContext().getColor(R.color.blue))
    testView.layoutParams = ViewGroup.LayoutParams(480, 480)

Но, похоже, мои размеры просмотра 0: 0, и мой видео ассемблер падает. Как правильно создать мои представления?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Я предполагаю, что аскер уже понял это, но для справки, решение таково:

class MainActivity : AppCompatActivity() {
    private lateinit var testView: View

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        testView = View(this)
        testView.setBackgroundColor(Color.BLUE)
        val size = (480 * resources.displayMetrics.density).roundToInt()

        // Assign dimensions and position to view.
        testView.layout(0, 0, size, size)

        val bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(bitmap)

        // Render to canvas
        testView.draw(canvas)

        // Copy
        val targetView = findViewById<View>(R.id.target)
        val drawable = BitmapDrawable(resources, bitmap)
        targetView.background = drawable
    }
}

Результат:

enter image description here

0 голосов
/ 10 января 2020

Как вы проверили, что измерения вида 0: 0, если они не находятся в иерархии вида?

Используя ваш код:

val testView = View(this)
testView.setBackgroundColor(ContextCompat.getColor(this, R.color.colorPrimary))
testView.layoutParams = ViewGroup.LayoutParams(480, 480)

И просто добавив его к содержимому

findViewById<ConstraintLayout>(R.id.content).addView(testView)

Отображение квадрата с фоном размером 480x480

Даже если вы отлаживаете textView value

...