17

giriş üzerinde büyüktür: Android 6.0.1 yeni sürümüyleSpinner iç dolgu Android 6.0.1

, Android gibi görünüyor çünkü varsayılan olarak Spinner bileşeni bazı değişiklikler etrafında iç dolgu yapılmış aşağı havuç biraz daha büyüktür.

Kodda hiçbir şeyi değiştirmediğim, ancak yalnızca aygıttaki işletim sistemini güncellediğim bir uygulamada fark ettim ancak iğneler farklı boyutlarda.

Durum:

Ben 2 iplikçiler biri (eğer düzen bu bölümünü görebilmek için her şeyi eklendi, bileşenlerin kalanını akla bir RelativeLayout diğer yanında var - Tamamen gereksiz özelliklere kaldırıldı

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:orientation="horizontal" 
    android:paddingLeft="8dp" 
    android:paddingRight="8dp"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:ellipsize="end" 
     android:gravity="center_vertical" 
     android:singleLine="true" 
     tools:text="Test" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="0" 
     android:gravity="center" 
     android:paddingLeft="4dp" 
     android:singleLine="true" 
     android:textColor="@color/text_primary" 
     android:textSize="@dimen/text_size_body" 
     tools:ignore="RtlHardcoded,RtlSymmetry" 
     tools:text="7%" /> 
</LinearLayout> 
: veya görünüm kimlikleri)

<RelativeLayout 
    android:id="@+id/header" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:id="@+id/container_for_buttons_on_the_right" 
     android:layout_width="wrap_content" 
     android:layout_height="48dp" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true"> 

     <!-- Buttons here--> 
    </LinearLayout> 

    <android.support.v7.widget.AppCompatSpinner 
     android:id="@+id/spinner_1" 
     android:layout_width="wrap_content" 
     android:layout_height="48dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <ViewSwitcher 
     android:id="@+id/spinner_switch" 
     android:layout_width="wrap_content" 
     android:layout_height="48dp" 
     android:layout_toEndOf="@id/spinner_1" 
     android:layout_toLeftOf="@id/container_for_buttons_on_the_right" 
     android:layout_toRightOf="@id/spinner_1" 
     android:layout_toStartOf="@id/container_for_buttons_on_the_right" 
     android:inAnimation="@anim/fade_in" 
     android:outAnimation="@anim/fade_out"> 

     <android.support.v7.widget.AppCompatSpinner 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" /> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
     <!-- ImageView properties are incomplete but I need it there.--> 
    </ViewSwitcher> 
</RelativeLayout> 

getView() yöntemi için Spinner bağdaştırıcı tarafından kullanılan düzeni bu

Örnek olarak: ekran alınan 2 ayrı ekran birleştirilmiştir

:

üstüne bir Android 6.0
  • The üzerinde çalışan bir Nexus 5 cihazda alınır
    1. aşağıdaki gibi bir Nexus 5 cihazında AMA ALINMIŞTIRILMIŞ AMA Android 6.0.1davranışını değiştirmez destek kütüphanesinden AppCompatSpinner kullanma

    screenshot

    • DÜZENLEME 1

    . Kullanılan destek kitaplığı sürümü 23.1.1

  • +0

    Dalgalanma efektini görüntülerken bir hatayı önlemek için aşağı karetin etrafına daha fazla dolgu eklememiz gerekti. Sabit bir boyuta ihtiyacınız varsa, çerçeveyi arka plandan kopyalayın ve bunu kullanın ya da AppCompat kullanın. – alanv

    +0

    AppCompat kullanıyorum :). O dolgu maddesinin tam boyutunun ne olduğunu söyleyebilir misiniz? Bana 8 ya da 10 gibi mi geliyor? – Mike

    +0

    12dp uç dolgu ve sabit bir 48dp son hizalama boşluğu, etkin bir şekilde başlangıç ​​yastığının 12dp'si. Doğrudan Android SDK dizininde 'platformlar/android-23/data/res/drawable/spinner_background_material.xml' altından kontrol edebilirsiniz. – alanv

    cevap

    7

    En az çaba harcayarak, iplikçi için özel bir arka plan oluşturarak bunu düzeltebiliyordum.

    İlki drawable klasöre gider ve şöyle 1. spinner_background.xml:

    <?xml version="1.0" encoding="utf-8"?> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" 
        android:opacity="transparent"> 
        <item 
         android:width="24dp" 
         android:height="24dp" 
         android:drawable="@drawable/selector_background_borderless" 
         android:gravity="end|center_vertical" /> 
        <item android:drawable="@drawable/bg_spinner_anchor" /> 
    </layer-list> 
    

    AppCompatSpinner Kullanılması Ben en bu spinner_background.xml diyelim, arka plan için 2 XMLs oluşturmak zorunda

    selector_background_borderless, gibi düz bir seçici gibi (ihtiyacınız olan en az öğeleri ekledim, v21 + için dalgalanma alternatifini keşfedebilirsiniz.Aslında ben) bunu yapmanızı öneriyoruz:

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
        <item android:drawable="#19000000" android:state_pressed="true" /> 
        <item android:drawable="@android:color/transparent" /> 
    </selector> 
    

    Ve bg_spinner_anchor şapka için 9patch PNG olduğunu. bg_spinner_anchor

    2. ikincisi düzgün dalgalanma desteklemek için drawable-v23 klasöre gider ve şöyle görünür, spinner_background.xml:

    <?xml version="1.0" encoding="utf-8"?> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" 
        android:paddingEnd="16dp" 
        android:paddingLeft="0dp" 
        android:paddingMode="stack" 
        android:paddingRight="0dp" 
        android:paddingStart="0dp"> 
        <item 
         android:width="24dp" 
         android:height="24dp" 
         android:drawable="@drawable/selector_background_borderless" 
         android:gravity="end|center_vertical" /> 
    
        <item 
         android:width="24dp" 
         android:height="24dp" 
         android:drawable="@drawable/ic_spinner_caret" 
         android:gravity="end|center_vertical" /> 
    </layer-list> 
    

    ic_spinner_caret Android kaynağından kullanılan bir vektör Bunları varlıkları kullanılan kod böyle görünüyor. Ayrıca eklemek için drawable-v23 klasörüne bu eklemek gerekir:

    <?xml version="1.0" encoding="utf-8"?> 
    <vector xmlns:android="http://schemas.android.com/apk/res/android" 
        android:width="24dp" 
        android:height="24dp" 
        android:viewportWidth="24.0" 
        android:viewportHeight="24.0" 
        android:tint="?attr/colorControlNormal"> 
        <path 
         android:pathData="M7,10l5,5,5-5z" 
         android:fillColor="#524e4a"/> 
    </vector> 
    

    Kredi Rehberlik için Android UI araç seti gelen alanv gidin!

    +1

    'bg_spinner_assets' bağlantısı' Backstreet_Boys' mp3 dosyasını indirmek için yönlendiriyor. Buna bakar mısınız lütfen? Teşekkürler –

    +0

    Github bağlantımın çalışıp çalışmadığını bana bildirin. – Mike

    +0

    Bağlantı şu anda çalışıyor. Teşekkürler. –

    3

    Aynı sorunu yaşadım ve planım geri dönüşümü yalnızca v23 için 6.0.1 güncelleştirmesiydi.

    ===

    1. emin olun sizin Spinner ona bağlı bir tarzı vardır. Aşağıdaki örnekte Widget.Spinner olarak adlandırılan örnek stil için:
    <Spinner 
        android:id="@+id/spinner_1" 
        style="@style/Widget.Spinner" 
        android:layout_width="64dp" 
        android:layout_height="64dp"/> 
    
    (zaten yoksa) değişiklikler API V23 sadece uygulanacaktır için
  • (values-v23 dizin altında styles.xml oluştur
      ). Örneğin, aşağıda Widget.Spinner stil tanımı örneğe bakın:
    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <style name="Widget.Spinner" parent="Widget.AppCompat.Spinner"> 
         <item name="android:background">@drawable/spinner_background_material</item> 
        </style> 
    </resources> 
    

    stilin ana Widget.AppCompat.Spinner ve buna 6.0.1 kaynağından geri haddeleme biz olacak biriyle android:background var yeniden tanımlıyor. Eğer çok diğer sürümleri hedefliyorsanız, giriş

    <style name="Widget.Spinner" parent="Widget.AppCompat.Spinner"/> 
    

    farklı düzen xml yerine başka jenerik tarzını tanımlamak daha kolaydır için birlikte values dizin altında bir varsayılan styles.xml eklemek gerektiğini

    Not dosyalar ve projeniz zaten values dizininin altında bir jenerik styles.xml olmalıdır, değil mi?

    1. https://android.googlesource.com/platform/frameworks/base.git/+/android-6.0.1_r3/core/res/res/drawable/'dan spinner_background_material.xml numaralı telefonu getirin. Tekrar drawable-v23'un altına kaydedin, yalnızca API v23'ü değiştirdiğimizden emin olacağız.

    Dosyanın varsayılan içeriği:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" 
         android:paddingMode="stack" 
         android:paddingStart="0dp" 
         android:paddingEnd="48dp" 
         android:paddingLeft="0dp" 
         android:paddingRight="0dp"> 
    <item 
        android:gravity="end|fill_vertical" 
        android:width="48dp" 
        android:drawable="@drawable/control_background_40dp_material" /> 
    <item 
        android:drawable="@drawable/ic_spinner_caret" 
        android:gravity="end|center_vertical" 
        android:width="24dp" 
        android:height="24dp" 
        android:end="12dp" /> 
    </layer-list> 
    

    Şimdi, bu sen ince ayar yapmak isteyebilirsin dosyasıdır.Ben şapka konumunu verdiği için bu dosyada değişiklikler: İkinci öğenin android:end nitelik kaldırıldı a) layer-list 'ın android:paddingEnd eşit b
    0dp kadar) ilk öğenin android:width
    24dp için c yarıya set
    )

    değişiklikler arka tarafın tiner yaptığını, kenarlarını soyarak yaptı, ancak yaklaşım dalgalanma etkilerini korudu. Gerekirse kendi özel değerlerinizle oynamaktan çekinmeyin.

    1. Yukarıdaki değişiklikler, dosyalar tarafından yeniden oluşturulacakları için daha fazla dosyaya ihtiyaç duyulduğu için derlenmeyecektir.

    İndir drawable-v23 içine (yukarıdaki bağlantıya bakın):
    a) control_background_40dp_material.xml
    b) ic_spinner_caret.xml

    İndir color-v23 içine:
    a) control_highlight_material.xmlhttps://android.googlesource.com/platform/frameworks/base.git/+/android-6.0.1_r3/core/res/res/color/ den (bu dosya muhtemelen drawable-v23 altında bulunabilir ayrıca, şimdilik orijinal kaynak konumlarının modelini takip edelim). Eğer :) birini kullanmak, bunu ondan değerdir reffer eğer bu dosya en @dimen/highlight_alpha_material_colored, appcompat-v7 alıp edilir Not:

    <item format="float" name="highlight_alpha_material_colored" type="dimen">0.26</item> 
    

    === çözüm senin kadar iyi değil

    orijinal olarak sahip olmadığınız dosyaları getirmeniz gerekir. Ayrıca, gelecekteki değişiklikler için olası güncellemeleri v23'te izlemek isteyebilirsiniz. Ama en azından değişiklikler sadece v23'te yer alıyor.

  • +0

    Detaylı cevap için teşekkürler. Eserleri! –

    +0

    Bu svennu yayınladığınız için teşekkür ederiz. Faydalı açıklamalarla bana bir sürü zaman kazandırdın! – JPM

    +0

    2. Düşüncede. Bu, belleği 24 saklamaya çalışırken API 24'te işe yaramıyor. – JPM