Intereting Posts
В чем разница между ANR и сбоем в Android? Удаление значка приложения и текста из ActionBar Цепь двух модифицированных наблюдаемых ж / RxJava Конвертировать ArrayList <MyCustomClass> в JSONArray Android: TextInputLayout скрывает drawableRight дочернего EditText Эквивалент addJavascriptInterface от Android в iOS Внедрение JPA для разработки Android Ошибка запроса графа 500 Почему код загрузки blobstore имеет URL перенаправления Уведомление о брандмауэре Android запускает новое приложение, хотя оно уже запущено. Как синхронизировать запуск приложения со значком приложения и уведомлением staus bar? Начните две анимации в одном макете Facebook AccessToken.getAccessToken имеет значение null при открытии приложения даже после первого входа Android Studio 2.0 – плагин слишком стар, обновите его до более поздней версии или установите переменную окружения ANDROID_DAILY_OVERRIDE в Адаптировать макет к платформе Android или API Скрыть / показать fab с анимацией масштаба

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), панель действий появится в нужном месте (но с логотипом, который я не хочу):

Введите описание изображения здесь

Что я делаю не так?

Solutions Collecting From Web of "ActionBarSherlock – вкладки, отображающие верхнюю панель действий с пользовательским представлением"

Вот простой способ:

Используйте в методе 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. То есть, на устройствах pre-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); 

Это тоже отлично! (Читайте комментарии к bugreport;))

 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 ().