Я использовал панель инструментов, так что теперь я хочу применить событие click на значке логотипа, как я могу получить это событие?
Вот некоторые материалы кодирования, которые я сделал
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(); } });
Здесь я установил значок навигации и логотип, так что теперь я хочу, чтобы событие щелчка значка логотипа, как это возможно?
Вам нужно сначала обратиться к нему
View logoView = getToolbarLogoView(toolbar); logoView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //logo clicked } });
Используя описание содержимого, мы можем получить ссылку View
. См. Комментарии в строке.
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; }
Я задавал себе тот же вопрос и наткнулся на это. Я применил аналогичный подход к Николау Деспотоски, но с другой реализацией.
Вместо метода я сделал следующее:
// 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 } });
Немного хак-иш, но вернемся немного позже. Совместное использование для обсуждения.