Eu tenho 6 ImageButton em minha atividade, defino imagens através do meu código nelas (não usando xml).
Quero que eles cubram 75% da área dos botões. Mas onde algumas imagens cobrem menos área, outras são grandes demais para caber no botão image. Como redimensionar programaticamente e mostrá-los? Abaixo está a captura de tela
abaixo está o arquivo xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp" >
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_topleft"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_topright"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_repeat"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_next"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_bottomleft"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_bottomright"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
</LinearLayout>
e um trecho de myClass.java:
public void addImageButtons()
{
iB_topleft = (ImageButton) findViewById(R.id.button_topleft);
iB_topright = (ImageButton) findViewById(R.id.button_topright);
iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft);
iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright);
iB_next = (ImageButton) findViewById(R.id.button_next);
iB_repeat = (ImageButton) findViewById(R.id.button_repeat);
}
public void setImageNextAndRepeat()
{
iB_topleft .setImageResource(R.drawable.aa);
iB_topright.setImageResource(R.drawable.bb);
iB_bottomleft.setImageResource(R.drawable.cc);
iB_bottomright.setImageResource(R.drawable.dd);
iB_next.setImageResource(R.drawable.next);
iB_repeat.setImageResource(R.drawable.repeat);
}
Respostas:
Use
android:padding="20dp"
(ajuste o preenchimento conforme necessário) para controlar o quanto a imagem ocupa no botão.Use a
android:scaleType="fitCenter"
para que o Android dimensione as imagens e façaandroid:adjustViewBounds="true"
com que elas ajustem seus limites devido ao dimensionamento.Todos esses atributos podem ser definidos no código em cada um
ImageButton
em tempo de execução. No entanto, é muito mais fácil definir e visualizar em xml na minha opinião.Além disso, não use
sp
para nada que não seja o tamanho do texto, pois ele é redimensionado dependendo da preferência de tamanho do texto que o usuário definir, para que suassp
dimensões sejam maiores que as pretendidas se o usuário tiver uma configuração de texto "grande". Use emdp
vez disso, pois não é dimensionado pela preferência do tamanho do texto do usuário.Aqui está um trecho da aparência de cada botão:
fonte
ImageButton
métodossetScaleType(ImageView.ScaleType.CENTER)
setAdjustViewBounds(true)
fazem isso programaticamente.Estou usando o seguinte código em
xml
fonte
Tente usar
android:scaleType="fitXY"
no i-Imagebutton xmlfonte
Estou usando
android:scaleType="fitCenter"
com satisfação.fonte
Consulte o link abaixo e tente encontrar o que você realmente deseja:
https://developer.android.com/reference/android/widget/ImageView.ScaleType.html
fonte
Recentemente, descobri por acidente que, como você tem mais controle sobre um ImageView, pode definir um onclicklistener para uma imagem. Aqui está uma amostra de um botão de imagem criado dinamicamente
fonte
Funcionou bem no meu caso. Primeiro, você baixa uma imagem e a renomeia como iconimage, localiza-a na pasta drawable. Você pode alterar o tamanho configurando
android:layout_width
ouandroid:layout_height
. Finalmente, temosfonte
Você pode criar seu widget ImageButton como eu fiz. No meu caso, eu precisava de um widget com um tamanho fixo de ícone. Vamos começar pelos atributos personalizados:
A classe Widget é bastante simples (o ponto principal é preencher os cálculos no método onLayout ):
E, finalmente, você deve usar seu widget assim:
fonte