2012-05-22 15 views
23

Estoy haciendo una lista de capas para drawable. tengo mi imagen de fondo, y quiero que la segunda capa sea más pequeño, pero parece que no importa lo que yo estoy escribiendo en mi android: layer_width \ altura La segunda capa de tamaño siguen siendo los mismos ..android cómo cambiar <item> ancho y alto

este es mi xml:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

<item android:drawable="@drawable/picuser" 
android:layout_width="50dp" 
android:layout_height="50dp"/> 

<item android:drawable="@drawable/ic_launcher" 
android:layout_width="10dp" 
android:layout_height="10dp"/> 

</layer-list> 

Respuesta

16

espero que esto le puso en la dirección correcta:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:drawable="@drawable/picuser"/> 

<item> 
     <bitmap android:src="@drawable/ic_launcher" 
     android:gravity="center" /> 
    </item> 

</layer-list> 

Como se puede ver here<item> no tiene los atributos de anchura/altura. ..

+2

Sí, lo he visto, pero ¿no hay una forma de definir el tamaño de cada capa? es realmente importante .. –

+7

Desde API 23, hay atributos de ancho, altura, gravedad en el artículo – Pauland

+11

por favor, da la solución, no solo di no. – User9527

25

Esta es una especie de workaounrd pero funcionó para mí, se puede utilizar el relleno y se hará la segunda más pequeña dibujable

<item android:drawable="@drawable/circyle"/> 

<item android:drawable="@drawable/plus" 
     android:top="10dp" android:bottom="10dp" 
     android:right="10dp" android:left="10dp"/> 

2

traté mucho, no he encontrado una buena manera de configurar el centro del logotipo solo mediante el diseño xml. Conviene por último garantizar encontré una solución de la siguiente manera:

mToolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      ImageView imageView = (ImageView)mToolbar.findViewById(R.id.logo); 
      if(mToolbar == null){ 
       return; 
      } 
      int toolbarWidth = mToolbar.getWidth(); 
      int imageWidth = imageView.getWidth(); 
      imageView.setX((toolbarWidth-imageWidth)/2); 
     } 
    }); 

layout_toolbar.xml:

<android.support.v7.widget.Toolbar 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/toolbar" 
     style="@style/Toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/toolbar_height"                 
     android:background="@drawable/toolbar_background" 
     android:focusable="false"         
     app:titleTextAppearance="@style/AppTheme.Toolbar.Title"> 
     <ImageView 
      android:id="@+id/logo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/toolbar_logo"/> 
    </android.support.v7.widget.Toolbar> 
4

De API de nivel 23 y superior, en realidad se puede establecer el ancho & altura en un elemento

<item 
    android:drawable="@drawable/splash_logo" 
    android:height="100dp" 
    android:width="100dp"/> 

NOTA: es android:width en lugar de android:layout_width

1

Realmente ha conseguido <item>width y height atributos, en lugar de layout_width y layout_height atributos, con la única diferencia de la imposibilidad de establecer a match_parent o wrap_content, pero por desgracia estos atributos se han introducido ya solo API 23.
De todos modos, si desea utilizarlos, puede utilizar el atributo gravity para obtener match_parent para niños, configurándolo en left|right o top|bottom. Pero ya que estos atributos son demasiado nuevos para cualquier aplicación real, sugiero utilizar esta solución:

<layer-list> 

    <item> 

     <shape 
      android:shape="rectangle"> 

      <size 
       android:width="152dp" 
       android:height="152dp"/> 

      <solid 
       android:color="#00FFFFFF"/> 
     </shape> 
    </item> 

    <item> 

     <bitmap 
      android:gravity="left|right|top|bottom" 
      android:src="@mipmap/ic_launcher"/> 
    </item> 
</layer-list> 

Ahora, a partir presuponer que un <bitmap> puede conseguir rellenado padre con el truco he sugerido más arriba usando el atributo gravity, y conocer un <shape> puede tener un hijo <size> para especificar su tamaño utilizando los width y height atributos sin restringir al nuevo API, se puede utilizar un <layer-list> para crear un estirable que contiene un <item> con un tamaño <shape> (con transparente <solid>) y otro <item> con unno clasificadocon el atributo gravity establecido en "left | right | top | bottom", completando por completo el elemento principal <layer-list>, que tendrá el tamaño del tamaño <item>.

Todos los atributos que he mencionado son, por supuesto, contenida en el espacio de nombres android:.

Cuestiones relacionadas