Võ Quang Hoa
Yo tengo un ImageButton
y quiero mostrar un texto y una imagen en él. Pero cuando pruebo el emulador:
<ImageButton
android:text="OK"
android:id="@+id/buttonok"
android:src="https://stackoverflow.com/questions/4457030/@drawable/buttonok"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Obtengo la imagen pero sin el texto. ¿Cómo puedo mostrar el texto? ¡Por favor, ayúdame!
Cristian
Como no puedes usar android:text
Te recomiendo usar un botón normal y usar uno de los dibujables compuestos. Por ejemplo:
<Button
android:id="@+id/buttonok"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="https://stackoverflow.com/questions/4457030/@drawable/buttonok"
android:text="OK"/>
Puedes poner el dibujable donde quieras usando: drawableTop
, drawableBottom
, drawableLeft
o drawableRight
.
ACTUALIZAR
Para un botón, esto también funciona bastante bien. Poniendo android:background
¡está bien!
<Button
android:id="@+id/fragment_left_menu_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_bg"
android:text="@string/login_string" />
Acabo de tener este problema y está funcionando perfectamente.
-
Esta opción funciona mejor, a menos que necesite algún tipo de diseño de botón de aspecto loco, como una imagen intercalada por dos vistas de texto. Originalmente probé un objeto de diseño definido como widget.button, luego puse una vista de imagen y una vista de texto en él, pero después de perfilar eso y el diseño del botón anterior, ahorré casi un 30% en tiempo de medición, 50% en tiempo de diseño y 15 -20 % en el tiempo de dibujo en mi FramLayout, y pasé de 38 objetos a 26. Eso es un ahorro bastante sustancial.
– Evan R.
12/09/2012 a las 20:49
-
@shim drawableTop colocará el dibujable en la parte superior del botón, drawableRight en la parte inferior, etc.
– Cristian
25 de octubre de 2012 a las 12:11
-
@RenanBandeira sí, uset
setCompoundDrawables*()
métodos– Cristian
16 de enero de 2014 a las 5:21
-
¿Cómo puedo escalar la imagen para que se ajuste al botón? O ajustaría automáticamente la imagen para que encaje con el botón.
– Alston
25 de abril de 2014 a las 6:54
-
La misma pregunta que @Stallman, ¿cómo ajustar la imagen con el botón y configurarlo a la izquierda?
– Khuong
21 de septiembre de 2015 a las 11:11
tíoIstvan
Es técnicamente posible poner un título en un ImageButton
si realmente quieres hacerlo. Solo pon un TextView
sobre el ImageButton
usando FrameLayout
. Sólo recuerda no hacer el Textview
se puede hacer clic
Ejemplo:
<FrameLayout>
<ImageButton
android:id="@+id/button_x"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@null"
android:scaleType="fitXY"
android:src="https://stackoverflow.com/questions/4457030/@drawable/button_graphic" >
</ImageButton>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clickable="false"
android:text="TEST TEST" >
</TextView>
</FrameLayout>
-
Esto no parece funcionar en Lollipop, aunque funciona perfectamente en otros.
– Hong
18 de julio de 2015 a las 15:37
-
El problema con este enfoque es que el texto no se ve afectado por el estado del botón (deshabilitado, etc.)… a menos que lo haga manualmente.
– El operador
13 de julio de 2016 a las 12:56
Chicos, necesito desarrollar la configuración y el botón de cierre de sesión, utilicé el siguiente código.
<Button
android:id="@+id/imageViewLogout"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_margin="@dimen/size_30dp"
android:layout_alignParentLeft="true"
android:text="Settings"
android:drawablePadding="10dp"
android:background="@android:color/transparent"
android:layout_alignParentBottom="true"
android:drawableTop="@drawable/logout" />
Samuel
Realmente, android:text
no es un argumento aceptado por ImageButton
pero, si está tratando de obtener un botón con un fondo específico (no el predeterminado de Android), use el android:background
atributo xml, o declararlo desde la clase con .setBackground();
Puedes usar un LinearLayout
En lugar de usar Button
es un arreglo que usé en mi aplicación
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:background="@color/mainColor"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/ic_cv"
android:textColor="@color/offBack"
android:textSize="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="@string/cartyCv"
android:textColor="@color/offBack"
android:textSize="25dp" />
</LinearLayout>
-
¡Gran solución! onClick también funciona perfectamente en LinearLayout. No veo una razón por la que deberíamos usar un botón o un botón de imagen
– sam
17 de junio de 2017 a las 15:03
Nathan Schwermann
puedes usar uno normal Button
y el atributo android:drawableTop (o izquierda, derecha, abajo) en su lugar.
-
¡Gran solución! onClick también funciona perfectamente en LinearLayout. No veo una razón por la que deberíamos usar un botón o un botón de imagen
– sam
17 de junio de 2017 a las 15:03
ByteHamster
Resolví esto poniendo el ImageButton
y TextView
dentro de una LinearLayout
con orientación vertical. ¡Funciona genial!
<LinearLayout
android:id="@+id/linLayout"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageButton
android:id="@+id/camera_ibtn"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:background="@drawable/camera" />
<TextView
android:id="@+id/textView2"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/take_pic"
android:textColor="#FFFFFF"
android:textStyle="bold" />
</LinearLayout>