2013-09-03 15 views
60

Android'de görüntü içeren ancak hiç metni olmayan bir geçiş düğmesi oluşturmak mümkün mü? Ive benzer mesajları görülenAndroid: Resim ve metin içermeyen bir geçiş düğmesi oluşturun

Toggle Button With Image

cevap arka planını değiştirmek için nerede ama Holo Işık düzenini korumak istiyor ve sadece bir resim ile metni takas: İdeal böyle görünürdü. Ben programaticallly görüntü kaynağını değiştirmek gerekiyor

,

ben bu hale nasıl Herhangi bir fikir?

Eğer bu yapılamazsa, normal bir düğme açıp kapatabileceğim bir yol var mı? Biz durumlu düğme varsayılan stili overiding metni gizleyebilirsiniz rağmen

+0

olabilir AFAIK, bir görüntü ile metni değiştirmenin kolay bir yoludur, ayrıca 2 durumlu arkaplan görüntüsünün tamamını istediğinizyle değiştirir. Resmi, metni http://stackoverflow.com/ adresinde olduğu gibi [ImageSpan] (http://developer.android.com/reference/android/text/style/ImageSpan.html) aracılığıyla ayarlayabiliyorsanız deneyebilirsiniz. sorular/7616437/imagespan-in-a-widget'ı – zapl

cevap

86
  1. Ben, yapamayız bir resmin

    No ile geçiş metnini değiştirebilir miyim, ama yine de o olmaz Metni bir görüntü ile değiştiremeyeceğimiz, istediğiniz bir geçiş butonu.

  2. nasıl İşte

    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    
        <item android:state_checked="false" 
          android:drawable="@drawable/ic_slide_switch_off" /> 
    
        <item android:state_checked="true" 
          android:drawable="@drawable/ic_slide_switch_on" /> 
    
    </selector> 
    

    @drawable/ic_slide_switch_on & @drawable/ic_slide_switch_off Oluşturduğunuz görüntülerdir

    sizin res/drawable klasördeki bir dosyayı ic_toggle oluşturma normal geçiş düğmesine yapabilirsiniz. (Eğer kimse res/values/ klasördeki bir styles.xml dosyası oluşturmak yoksa)

    Sonra bunun adı,

    <?xml version="1.0" encoding="utf-8"?> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    
        <item android:id="@+android:id/background" 
          android:drawable="@android:color/transparent" /> 
    
        <item android:id="@+android:id/toggle" 
          android:drawable="@drawable/ic_toggle" /> 
    
    </layer-list> 
    

    Şimdi özel tema eklemek ic_toggle_bg aynı klasörde başka dosya oluşturmak

    <style name="Widget.Button.Toggle" parent="android:Widget"> 
        <item name="android:background">@drawable/ic_toggle_bg</item> 
        <item name="android:disabledAlpha">?android:attr/disabledAlpha</item> 
    </style> 
    
    <style name="toggleButton" parent="@android:Theme.Black"> 
        <item name="android:buttonStyleToggle">@style/Widget.Button.Toggle</item> 
        <item name="android:textOn"></item> 
        <item name="android:textOff"></item> 
    </style> 
    

    Bu, sizin için özel bir geçiş düğmesi oluşturur.

  3. o

    senin görünümünde özel stili ve arka plan kullanın nasıl kullanılacağı. TextView den

    <ToggleButton 
         android:id="@+id/toggleButton" 
         android:layout_width="wrap_content" 
         android:layout_height="match_parent" 
         android:layout_gravity="right" 
         style="@style/toggleButton" 
         android:background="@drawable/ic_toggle_bg"/> 
    
+1

Bu müthiş bir teşekkür. Holo Işık Geçiş Düğmeleri için kullanılan @ drawable/ic_slide_switch_on ve kapalı görüntüleri bulabileceğim bir yer var mı? – Edd

+2

"sdk \ platforms \ android-17 \ data \ res \ drawable-hdpi" btn_toggle dosyalarındadırlar, ayrıca bu android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html dosyasını da görebilirsiniz. –

+1

Çok teşekkürler! Eğer bir kez daha oy verebilecek olsaydım :) – Edd

52

ToggleButton devralır böylece drawables metnin 4 sınırlarda görüntülenecek şekilde ayarlayabilirsiniz.Eğer metnin üstüne istediğiniz simgeyi görüntülemek için kullanabilirsiniz ve saniye seçenek kullanmaktır

enter image description here

gibi düzenli ToggleButton kıyasla

<ToggleButton 
    android:id="@+id/toggleButton1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:drawableTop="@android:drawable/ic_menu_info_details" 
    android:gravity="center" 
    android:textOff="" 
    android:textOn="" 
    android:textSize="0dp" /> 

sonuç görünüyor gerçek metni gizleyebilir metni bir görüntü ile değiştirmek için bir ImageSpan. Simge doğru konumda olduğundan biraz daha iyi görünüyor, ancak doğrudan xml düzeni ile yapılamıyor. metnin gerçekleşir çünkü simge biraz daha düşük yerleştirilir -

Sen programmatially

ToggleButton button = (ToggleButton) findViewById(R.id.toggleButton3); 
ImageSpan imageSpan = new ImageSpan(this, android.R.drawable.ic_menu_info_details); 
SpannableString content = new SpannableString("X"); 
content.setSpan(imageSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
button.setText(content); 
button.setTextOn(content); 
button.setTextOff(content); 

burada ortada sonuç düz ToggleButton

<ToggleButton 
    android:id="@+id/toggleButton3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:checked="false" /> 

Sonra set "text" oluşturmak . Yukarıdaki kodda aşağıdaki i kullanılan metni kaldırmak için:

enter image description here

+0

Güzel fikir, togglebutton – Edd

+1

@clairharrison üzerinde çekilebilir seçenekleri hiç görmedim Eğer bir 'TextView' ve bir 'ImageView' varsa sık sık bunu alırsınız: http://stackoverflow.com/questions/8318765/how-do-i-use-a-compound-drawable-instead-of-a-linearlayout-that-contains-an-imag - İşte ben Bu fikirle geldi :) – zapl

+0

ImageSpan benim için harika çalıştı. Ben aslında farklı bir açma/kapama görüntüleri ile normal 'Button' (mavi çubuk olmadan) benzeyen bir' ToggleButton' istedim, bu yüzden 'isChecked()' tabanlı yeni bir görüntü ile düğme tıklatıldığında ImageSpan yenilemek. – Josh

43

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/toggle_on" android:state_checked="true"/> 
    <item android:drawable="@drawable/toggle_off" android:state_checked="false"/> 
</selector> 

sizin geçiş düğmesine

<ToggleButton 
      android:id="@+id/chkState" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/toggle_selector" 
      android:textOff="" 
      android:textOn=""/> 

Not seçici uygulamak çekilebilir res toggle_selector.xml oluşturmak/

textOff="" 
textOn="" 
+1

Sanırım bunu yapmak kolay bir şey. Çalıştı, teşekkürler! – Daniel

+1

Mükemmel! Bu daha basit bir yol .. –

+4

Temiz ve basit!Bu cevabın daha fazla değeri olmalı! – Swayam

İlgili konular