Подтвердить что ты не робот

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);

}

однако, когда я скрываю логотип, панель действий сдвигается ниже моих вкладок так:

screen shot

но если я устанавливаю ab.setDisplayShowHomeEnabled(true), в правой части появляется панель действий (но с логотипом, который я не хочу):

enter image description here

Что я делаю неправильно?

4b9b3361

Ответ 1

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

используйте в методе onCreate следующее:

View homeIcon = findViewById(android.R.id.home);
((View) homeIcon.getParent()).setVisibility(View.GONE);

это полностью разрушает домашнюю кнопку.

PS: я использую стандартный 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);

Ответ 2

Стоит отметить, что выбранный ответ будет работать только с родным 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);

Ответ 3

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

actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT));

Ответ 4

После ответа @furyfred этот код можно использовать при использовании библиотеки ActionBar from 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);
}

Ответ 5

Все сообщения выше сворачивают значок дома, но оставляют пустое место. Чтобы избежать этого, вам необходимо установить размер логотипа равным нулю. Ниже добавлен мой код snippet.it может помочь другим, кто борется с той же проблемой .thanks

       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);

Ответ 6

Я использовал этот

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);

Ответ 7

просто удалите флаг DISPLAY_SHOW_HOME из вашего метода actionBar.setDisplayOptions().