Значок вкладки для изменения при нажатии - PullRequest
1 голос
/ 27 октября 2011

[Решение внизу]

Мне нужна вкладка, чтобы иметь следующее поведение, но я не уверен, как ее реализовать:

  • Вкладки должны быть внизу.
  • Для вкладок нужен значок и текст.
  • Каждый значок должен быть различным.
  • Значок должен изменить цвет при выборе, а вкладка нуждается в наложении.

Причина, по которой я так смутно спрашиваю, заключается в том, что я попытался реализовать один из способов, но нажалкирпичная стена, так что мне интересно, как это сделает более опытный.

Некий источник по запросу: CustomTabActivity.java

private TabHost mTabHost;
private Context ctx = this;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // construct the tabhost
    setContentView(R.layout.main);

    setupTabHost();
    mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);
    setupTab(new TextView(this), "t1", R.drawable.myimg1);
    setupTab(new TextView(this), "t2", R.drawable.myimg2);
    mTabHost.setOnTabChangedListener(new OnTabChangeListener(){

        @Override
        public void onTabChanged(String tabId) {
            Log.e("Simon", "Current tab - " + Integer.toString(mTabHost.getCurrentTab()));
            View currentView = mTabHost.getChildAt(mTabHost.getCurrentTab());
            currentView.getClass();
        }

    });
}

private void setupTabHost() {
    mTabHost = (TabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup();
}

private void setupTab(final View view, final String tag, int num) {
    View tabview = createTabView(mTabHost.getContext(), tag, num);

    TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(new TabContentFactory() {
        public View createTabContent(String tag) {return view;}
    });
    mTabHost.addTab(setContent);
}

private static View createTabView(final Context context, final String text, final int num) {
    View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
    TextView tv = (TextView) view.findViewById(R.id.tabsText);
    tv.setText(text);

    ImageView iv = (ImageView) view.findViewById(R.id.tabsImg);

    iv.setImageResource(num);
    return view;
}

main.xml

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

    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent">
        <LinearLayout android:orientation="vertical"
            android:layout_width="fill_parent" android:layout_height="fill_parent">
            <FrameLayout android:id="@android:id/tabcontent"
                android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
                <ViewStub android:id="@+id/stub1"
                   android:inflatedId="@+id/subTree"
                   android:layout="@layout/mylayout"
                   android:layout_width="fill_parent"
                   android:layout_height="fill_parent" />
            </FrameLayout>
            <TabWidget android:id="@android:id/tabs" 
                android:layout_width="fill_parent" android:background="@drawable/tabs_bg" android:layout_height="wrap_content"/>
        </LinearLayout>
    </TabHost>

</LinearLayout>

mylayout.xml

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
    <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
    <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleLarge" android:id="@+id/progressBar1"></ProgressBar>

</LinearLayout>

-------------- Решение -------------

Итак, проблема решена.Я заменил R.drawable.myimg1 статическим изображением в папках res / drawable- [hdpi | ldpi | mdpi] и заменил его новым xml-файлом в res / drawable, который выглядит следующим образом:

mydrawable1.xml

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true"
        android:drawable="@drawable/myimg1_selected"/>
    <item android:drawable="@drawable/myimg1"/>
</selector>

Где myimg1 и myimg1_selected - это изображения, которые я хочу показать в разных состояниях.

1 Ответ

1 голос
/ 28 октября 2011

Отметьте этот урок . Описывает, как изменить значок, если выбрана вкладка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...