2015-01-25 12 views
6

Araç çubuğunu kullandım, bu yüzden şimdi logo üzerinde tıklama etkinliğini uygulamak istiyorum. Bu etkinliği nasıl alabilirim? Burada Araç çubuğunun logo icon tıklanabilir mi?

mümkündür, nasıl ben burada
Toolbar toolbar = null; 
toolbar = (Toolbar) findViewById(R.id.actionToolbar); 
setSupportActionBar(toolbar); 
setTitle(null); 
toolbar.setNavigationIcon(R.drawable.back); 
toolbar.setNavigationContentDescription("BACK"); 
toolbar.setLogo(R.drawable.ic_launcher); 
toolbar.setLogoDescription("LOGO"); 

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(MainActivity.this, "Nav", Toast.LENGTH_SHORT).show(); 
    } 
}); 

yapmış i logosu simgesinin click olayını istiyorum şimdi navigasyon simge ve logo simgesi ayarlamış bazı kodlama şeyler nedir?

cevap

21

Sence View referans alabilirsiniz içerik açıklamaları kullanarak bunu

View logoView = getToolbarLogoView(toolbar); 
logoView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //logo clicked 
    } 
}); 

ilk referans almak gerekiyor. Yorumları inline bakın.

public static View getToolbarLogoIcon(Toolbar toolbar){ 
     //check if contentDescription previously was set 
     boolean hadContentDescription = android.text.TextUtils.isEmpty(toolbar.getLogoDescription()); 
     String contentDescription = String.valueOf(!hadContentDescription ? toolbar.getLogoDescription() : "logoContentDescription"); 
     toolbar.setLogoDescription(contentDescription); 
     ArrayList<View> potentialViews = new ArrayList<View>(); 
     //find the view based on it's content description, set programatically or with android:contentDescription 
     toolbar.findViewsWithText(potentialViews,contentDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 
     //Nav icon is always instantiated at this point because calling setLogoDescription ensures its existence 
     View logoIcon = null; 
     if(potentialViews.size() > 0){ 
      logoIcon = potentialViews.get(0); 
     } 
     //Clear content description if not previously present 
     if(hadContentDescription) 
      toolbar.setLogoDescription(null); 
     return logoIcon; 
    } 
+0

Harika! teşekkürler Nikola – Rajan

+0

getLogoContentDescription/setLogoContentDescription –

+1

@MinaGabriel Cevabımı düzenledim. GetLogoDescription ve setLogoDescription olmalıdır. Afedersiniz. –

11

Kendime aynı soruyu sordum ve buna rastladım. Nikola Despotoski'ye benzer bir yaklaşım benimsedim ama farklı bir uygulama ile. Bunun yerine yöntemin

, ne yaptığım:

// Set drawable 
toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo)); 

// Find logo 
View view = toolbar.getChildAt(1); 
view.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // Perform actions 
    } 
    }); 

Biraz tarzı bir kesmek, ama geri gelmek biraz sonra inceleyeceğiz. Tartışma amaçlı paylaşım.

+2

Bunun için teşekkürler. Benim için childAt (0) logo. çocuk 1 başlığı – code511788465541441

+0

Bu benim için çalışır, ama indeksi değişeceğini buldum, 0 ya da 1 olabilir. Ben faaliyetleri arasındaki fark ne olduğundan emin değilim. –

+0

Fark, logonun açık olduğu ve başlığın açık olduğu sıradır. Etkin olduklarında görüntüleme grubuna eklenen gizli öğelere sahiptir; bu, ilk öğenin ilk olarak çevrilen öğedir. – Tatarize