Выровнять значки вкладки навигации ActionBar над текстом вкладки?

В приложении есть ActionBar, а в ActionBar есть вкладки навигации, каждая из которых содержит текст. Мне нужно добавить значки на вкладки в дополнение к тексту.

Я успешно добавил значки с помощью ActionBar.Tab.setIcon(drawable), но значок отображается слева от текста вкладки.

Как переместить значок вкладки так, чтобы он находился НАД текстом вкладки навигации?

(Я использую ActionBarSherlock, но полагаю, что решение этой проблемы будет работать в нативных реализациях и реализациях ABS)


person Ollie C    schedule 16.04.2012    source источник


Ответы (3)


Вы можете установить индивидуальный вид для каждой вкладки.

https://gist.github.com/3167287

PropositionListActivity.java

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockActivity;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ImageView;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.NavUtils;

public class PropositionListActivity extends SherlockActivity implements ActionBar.TabListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 

        setContentView(R.layout.proposition_list);

        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        createTab(R.layout.tab_to_opine, R.id.tab_to_opine_title, "Vou Opinar");
        createTab(R.layout.tab_opined, R.id.tab_opined_title, "Já Opinei");
        createTab(R.layout.tab_feedback, R.id.tab_feedback_title, "Feedback");
    }

    public void createTab(int view, int titleView, String title) {
        ActionBar.Tab tab = getSupportActionBar().newTab();
        tab.setTabListener(this);
        tab.setCustomView(view);
        getSupportActionBar().addTab(tab);

        ((TextView) findViewById(titleView)).setText(title);
    }
}

tab_to_opine.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/tab_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/tab_to_opine"
        android:background="@android:color/transparent" />

    <TextView
        android:id="@+id/tab_to_opine_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
person irio    schedule 24.07.2012
comment
Было бы неплохо, если бы вы разместили здесь код на случай, если ссылка оборвется. - person Joony; 19.09.2012
comment
Готово, Джунни. Stack Overflow не является идеальным заполнителем для более чем пары строк кода, поэтому я все же сохранил главную ссылку. - person irio; 20.09.2012
comment
Вот ссылка на vogella.com, где он показывает, как добавить настраиваемое представление на панель действий без actionBarSherlock. vogella.com/articles/AndroidActionBar/ - person Someone Somewhere; 10.11.2013

В файле styles.xml вы можете добавить <item name="android:drawableTop">@drawable/your_image.</item>. Это сработает, если вы хотите, чтобы все изображения были одинаковыми сверху. Я, к сожалению, не совсем знаю, как это сделать для вкладок, которые используют разные изображения.

person chuckliddell0    schedule 20.04.2012

это очень просто, просто добавьте android: drawableTop = "@ drawable / your_image" в свой Textview и удалите ImageView

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

<TextView
    android:id="@+id/tab_to_opine_title"
    android:layout_width="wrap_content"
    android:drawableTop="@drawable/your_image" 
    android:layout_height="wrap_content" />

</LinearLayout>
person Sujiz    schedule 14.05.2014