Виджет вкладки не отображается правильно onResume () - PullRequest
0 голосов
/ 28 декабря 2011

Я использую собственный 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 Ответ

2 голосов
/ 23 января 2012

Проблема была в том, что

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

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

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

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

...