ActionBarSherlock - вкладки появляются над панелью действий с пользовательским представлением
Я пытаюсь создать панель действий без логотипа / текста приложения и с централизованным изображением, и я знаю, что это возможно с помощью пользовательского представления, вот мой код:
protected void initActionBar()
{
RelativeLayout custom = new RelativeLayout(getApplicationContext());
ActionBar.LayoutParams params = new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
custom.setLayoutParams(params);
custom.setGravity(Gravity.CENTER);
custom.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_grad_grey_rounded));
ImageView image =new ImageView(getApplicationContext());
image.setBackgroundResource(R.drawable.ic_launcher);
custom.addView(image);
ab = getSupportActionBar();
ab.setDisplayShowCustomEnabled(true);
ab.setCustomView(custom);
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
tab_connect = ab.newTab();
tab_connect.setText("CONNECT");
tab_connect.setTabListener(this);
tab_discover = ab.newTab();
tab_discover.setText("DISCOVER");
tab_discover.setTabListener(this);
tab_simplify= ab.newTab();
tab_simplify.setText("SIMPLIFY");
tab_simplify.setTabListener(this);
ab.addTab(tab_simplify);
ab.addTab(tab_discover);
ab.addTab(tab_connect);
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayShowHomeEnabled(false);
}
однако когда я скрываю логотип, панель действий смещается под моими вкладками так:
но если я установил ab.setDisplayShowHomeEnabled(true), панель действий появится в правильном месте (но с логотипом, который мне не нужен):
Что я делаю неправильно?
7 ответов
Вот простой обходной путь:
используйте следующее в вашем методе onCreate:
View homeIcon = findViewById(android.R.id.home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
это сворачивает кнопку домой полностью.
PS: я использую стандартный ActionBar, но это должно работать так же
Или же
если вы хотите поддержать в Sherlock Actionbar, чем вы должны использовать это
actionBar.setLogo(null); // forgot why this one but it helped
View homeIcon = findViewById(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
((View) homeIcon).setVisibility(View.GONE);
actionBar.setDisplayShowTitleEnabled(false);
Стоит отметить, что выбранный ответ будет работать только с родным ActionBar, потому что элемент android.R.id.home не существует в pre-hc. То есть, на устройствах до hc вы получите NPE.
Поскольку вы используете ActionBarSherlock, я предполагаю, что вы хотите поддерживать устройства pre-hc, поэтому вы должны использовать правильный идентификатор в зависимости от версии платформы. ABS представит эквивалент android.R.id.home через R.id.abs__home для реализации ActionBar.
Таким образом, мы можем настроить предложенный обходной путь как:
View homeIcon = findViewById(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
Это тоже прекрасно работает! (читайте комментарии об ошибках;))
actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT));
После ответа @furyfred этот код можно использовать при ActionBar
от AppCompat
библиотека:
View homeIcon = findViewById(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : android.support.v7.appcompat.R.id.home);
if (null != homeIcon && null != homeIcon.getParent())
{
((View) homeIcon.getParent()).setVisibility(View.GONE);
}
Все посты выше сворачиваются в иконку дома, но остаются пустые места. Во избежание этого вам нужно установить размер логотипа на ноль. Ниже добавлен мой код snippet.it может помочь другим, кто борется с той же проблемой. Спасибо
actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT));
View homeIcon = findViewById(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setLayoutParams(new LinearLayout.LayoutParams(0, 0));
((View) homeIcon).setVisibility(View.GONE);
Я использовал это
ActionBar ab = getSupportActionBar();
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayHomeAsUpEnabled(false);
ab.setHomeButtonEnabled(false);
ab.setLogo(null);
View homeIcon = findViewById(
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.id.home : R.id.abs__home);
((View) homeIcon.getParent()).setVisibility(View.GONE);
((View) homeIcon).setVisibility(View.GONE);
ab.setDisplayShowTitleEnabled(false);
Просто удалите флаг DISPLAY_SHOW_HOME из вашего метода actionBar.setDisplayOptions().