2012-05-22 10 views
23

Ich mache eine Layer-Liste für Zeichen. Ich habe mein Hintergrundbild, und ich möchte, dass die zweite Schicht kleiner, aber es scheint, dass egal, was ich in meinem android ich schreibe: layer_width \ Höhe Die zweite Schicht Größe gleich bleiben ..android So ändern Sie <item> Breite und Höhe

dies ist mein 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> 

Antwort

16

ich das Sie auf die richtige Richtung setzen Hoffnung:

<?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> 

Wie Sie here<item> nicht Breite/Höhe sehen hat Attribute. ..

+2

Ja, ich habe es gesehen, aber gibt es keine Möglichkeit, die Größe jeder Ebene zu definieren? es ist wirklich wichtig .. –

+7

Seit API 23 gibt es Attribute Breite, Höhe, Schwerkraft auf Artikel – Pauland

+11

bitte geben Sie die Lösung, nicht nur Nein sagen. – User9527

25

Diese Art von workaounrd ist, aber es funktionierte für mich, Sie padding verwenden können, und es wird die zweite ziehbar kleiner

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

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

2

Ich habe versucht, eine Menge zu machen, habe keinen guten Weg gefunden, das Logo-Center einfach per XML-Layout zu setzen. Zu guter Letzt muss ich fand eine Abhilfe wie folgt:

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

Von API Stufe 23 und höher, können Sie tatsächlich setzen die Breite & Höhe auf ein Element

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

HINWEIS: es ist android:width statt android:layout_width

1

Wirklich <item> hat width und height Attribute, anstelle von layout_width und layout_height Attribute, mit dem einzigartigen Unterschied der Unmöglichkeit, bekam sie zu match_parent oder wrap_content zu setzen, aber unglücklicherweise sind diese Attribute seit API 23.
Wie dem auch sei gerade eingeführt worden, Wenn Sie sie verwenden möchten, können Sie das Attribut gravity in verwenden, um match_parent für untergeordnete Elemente zu erreichen, indem Sie es auf left|right oder top|bottom setzen. Aber da diese Attribute für tatsächliche app zu neuer sind, schlage ich vor, diese Abhilfe zu verwenden:

<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> 

Nun beginnen voraussetzend, dass ein <bitmap> mit dem Trick in Mutter gefüllt werde ich oben mit dem Attribut gravity vorgeschlagen, und ein <shape> wissen kann ein <size> Kind seine Größe angeben mit den width und height Attribute ohne auf neuere API zu beschränken, können Sie eine <layer-list> verwenden, um einen ziehbar zu schaffen eine <item> mit einer Größe <shape> (mit den durchsichtigen <solid>) und ein anderes enthält <item> mit ein unsized <bitmap> mit gravity Attribut auf "left | right | top | bottom" gesetzt, füllt vollständig die übergeordnete <layer-list>, die die Größe der Größe <item> haben wird.

Alle Attribute I erwähnt sind, natürlich, enthalten in dem android: Namespace.

Verwandte Themen