Виджет вкладки не отображается правильно onResume()

Я использую пользовательский TabWidget для отображения своих вкладок. Вкладки прекрасно работают, когда я впервые запускаю программу. Все выглядит красиво. Однако, когда я перезагружаю программу и, в соответствии с logcat, метод onResume() вызывается в моем виджете Tab, TabWidget отображает только верхнюю половину виджета. Вот XML для моего TabWidget.

<?xml version="1.0" encoding="utf-8"?>
<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" >

    <RelativeLayout
        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_above="@android:id/tabs"/>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="55dp"
            android:layout_alignParentBottom="true" />

    </RelativeLayout>

</TabHost>

Здесь все довольно просто. Изменение layout_height не помогает.

В настоящее время я не реализую onResume в моем TabWidget.java. Но вот код в любом случае.

public class TabWidget extends TabActivity {

    private TabHost mTabHost;

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

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.tabs);

        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); // The
                                                                        // activity
                                                                        // TabHost

        TabHost.TabSpec spec; // Resusable TabSpec for each tab
        Intent intent; // Reusable Intent for each tab

        setupTabHost();
        // mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);

        // Dealer tab
        Intent intentDealer = new Intent().setClass(this, DealerActivity.class);
        int iconDealer = (R.drawable.ic_tab_dealer);
        setupTab("Dealer", intentDealer, iconDealer);

        // Department tab
        Intent intentDept = new Intent().setClass(this, DeptActivity.class);
        int iconDept = R.drawable.ic_tab_dept;
        setupTab("Departments", intentDept, iconDept);

        // PostBoard Activity
        Intent intentBoard = new Intent().setClass(this, BoardActivity.class);
        int iconBoard = R.drawable.ic_tab_board;
        setupTab("Postboard", intentBoard, iconBoard);

        // Social Network connection
        // Check first to see if there are Social Network links if not don't
        // show tab.
        if (Startup.msMain.locations[Startup.nChosenLocation].social_media_feeds.length == 0) {

        } else {
            Intent intentSocial = new Intent().setClass(this,
                    SocialActivity.class);
            int iconSocial = R.drawable.ic_tab_social;
            setupTab("Social Media", intentSocial, iconSocial);
        }

        // Links Activity
        Intent intentLinks = new Intent().setClass(this, LinksActivity.class);
        int iconLinks = R.drawable.ic_tab_link;
        setupTab("Links", intentLinks, iconLinks);

        // set startup tab
        tabHost.setCurrentTab(0);
    }

    private void setupTab(final String tag, Intent intent, int img) {
        View tabview = createTabView(mTabHost.getContext(), tag, img);

        TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview)
                .setContent(intent);

        mTabHost.addTab(setContent);

    }

    private static View createTabView(final Context context, final String text,
            int img) {
        View view = LayoutInflater.from(context)
                .inflate(R.layout.tabs_bg, null);
        TextView tv = (TextView) view.findViewById(R.id.tabsText);
        tv.setText(text);
        ImageView icon = (ImageView) view.findViewById(R.id.tabsIcon);
        icon.setBackgroundDrawable(context.getResources().getDrawable(img));
        return view;
    }
}

И для тщательности вот мой logcat, когда появляется ошибка.

   12-28 10:10:00.963: I/ActivityManager(1305): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zocalolabs.demo/.SplashScreen } from pid 1470
   12-28 10:10:01.034: W/InputManagerService(1305): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@40777988 (uid=10001 pid=1470)
   12-28 10:10:01.073: I/ActivityManager(1305): Resumed Activity: com.zocalolabs.demo/.TabWidget totalTime: 110 ms

Есть ли способ заставить мою активность виджета перерисовать на onResume() или onPause() заставить его полностью завершиться при уничтожении Activity, таким образом снова вызывая метод onCreate? Или есть другой способ решить эту проблему? Спасибо за любые идеи!

1 ответ

Решение

Проблема заключалась в том, что

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

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

   getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

Надеюсь, это поможет кому-то еще.

Другие вопросы по тегам