Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Expandir imagem em Alert Dialog para ocupar quase toda a tela

Bom dia a todos

Estava seguindo o projeto do curso,mas tinha uma coisa que me incomodava, que era o fato da imagem no DetalhesProdutoActivity não poder ser extendida e ser vista de forma melhor.

Entao para resolver esse problema, eu fiz um código no qual ao clicar na imagem em DetalhesProdutoActivity ele abre um Alert Dialog mostrando a imagem inteira:

Código arquivo dialog e do DetalhesProdutoActivity:

class ImageExtendDialog(private val context:Context) {
    fun mostra(
        urlPadrao: String? = null
    ){
        DescricaoProdutoImagemExtendidaBinding.inflate(LayoutInflater.from(context)).apply {
            urlPadrao?.let {
                descricaoProdutoImagemImageview.tentaCarregarImagem(it)
            }
            AlertDialog.Builder(context)
                .setView(root)
                .show()
        }
    }
}
class DetalhesProdutoActivity :
    AppCompatActivity(R.layout.activity_descricao_produto) {
// outras properties ocultas
    private var url: String? = null
    private var produtoId: Long = 0L
    private var produto: Produto? = null
    private val produtoDao by lazy {
        AppDatabase.instanciaBanco(this).produtoDao()
    }
//outras funcoes ocultas
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        tentaBuscarId()
        abreImagemDialog()
    }
    override fun onResume() {
        super.onResume()
        buscaProdutoNoDB()
    }

    private fun abreImagemDialog() {
        binding.descricaoProdutoImagem.setOnClickListener {
            ImageExtendDialog(this).mostra(url)
        }
    }

    private fun buscaProdutoNoDB() {
        lifecycleScope.launch {
            produtoDao.buscaPorId(produtoId).collect {
                it?.let {
                    preencheCampos(it)
                    title = it.nome
                    url = it.imagem
                } ?: finish()
            }
        }
    }

A minha dúvida é: Ao fazer o arquivo de layout, eu tentei configurar com que a imagem ocupasse quase toda o eixo horizontal da imagem (com a magem de 16dp para não ocupar toda tela), e na vertical ela respeitasse a proporção da imagem, mas o que aconteceu é que o layout ficou desse jeito, mas a imagem não, ela ficou no tamanho dela, se ela fosse menor, ela ia ocupar só uma parte da tela e ia ficar quase tudo do lado direito em branco.

Como eu faço para resolver isso? Código do layout no arquivo xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent">

        <ImageView
            android:id="@+id/descricao_produto_imagem_imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            android:layout_centerInParent="true"
            android:layout_margin="16dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:srcCompat="@drawable/imagem_padrao" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

Exemplo em imagem pequena:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Exemplo em imagem de tamanho médio

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

exemplo em tamanho grande (eu queria que todos ficassem assim, ou pelo menos alinhado no centro, sem a margem branca enorme):

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Fala Murilo! Que legal ver novas ideias surgindo nos projetos que já fizemos, parabéns pela iniciativa.

Para obter o resultado que você precisa, você pode fazer com que o ConstraintLayout ocupe todo espaço disponível horizontalmente, trocando:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="wrap_content"
    ...
    />
    

Para ficar assim:

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent" 
        ...
        />

Como era antes:

Print do app com a imgame alinhada a esquerda

Como fica agora:

Print do app com a imgame alinhada ao meio

Deu certo, muito obrigado