【问题标题】:Android : TabLayout not responding to clicksAndroid:TabLayout 不响应点击
【发布时间】:2016-02-05 15:38:33
【问题描述】:

我刚刚创建了一个具有 DrawerLayout 的布局,其中有工具栏、tablayout 和 viewpager。但是,在选项卡布局中,选项卡在单击它们时没有响应,但在滑动时会发生变化。代码如下:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".activities.HomeActivity">

<LinearLayout
    android:id="@+id/main_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">
    <!-- Content for screen without action bar-->

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="@color/theme_color"
        android:elevation="6dp"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

    <FrameLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/toolbar"
            android:background="@color/theme_color"
            android:elevation="6dp"
            android:minHeight="?attr/actionBarSize"
            app:tabIndicatorColor="@color/sub_theme_color"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="4dp"
            android:background="@drawable/toolbar_shadow" />

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:layout_below="@id/tab_layout"/>

    </FrameLayout>


</LinearLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/navigation_view"
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:layout_gravity="start"
    app:headerLayout="@layout/header_navigation_drawer"
    app:menu="@menu/menu_drawer_links"
    />

在 MainActivity.java 中

private Toolbar toolbar;
private NavigationView navigationView;
private DrawerLayout drawerLayout;

// Initializing Toolbar and setting it as the actionbar
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    //Intializing tab-layout and viewpager for tabs
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText("Tasks"));
    tabLayout.addTab(tabLayout.newTab().setText("Updates"));
    tabLayout.addTab(tabLayout.newTab().setText("Redeem"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    // Initializing viewpager to hold the tab-layout
    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    final PagerAdapter adapter = new PagerAdapter
            (getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));


    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

现在是奇怪的部分:它在 Lollipop 中是可点击的,但在棒棒糖之前的版本中不起作用。

【问题讨论】:

  • 考虑使用ViewPagerOnTabSelectedListener。它已经实现了使用 ViewPager 的所有回调。 tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager)).
  • 这条评论可以改进,因为tabLayout.setOnTabSelectedListener已被弃用。推荐的解决方案现在使用tabLayout.addOnTabSelectedListener

标签: android android-layout


【解决方案1】:

您可以通过检查 XML 页面的“设计”选项卡中的布局视图轻松解决此问题。最好将 tablayout 和 viewpager 放在 relativelayout 中。

活动很好。

这是更正后的 XML:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">


<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".activities.HomeActivity">

    <LinearLayout
        android:id="@+id/main_layout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:orientation="vertical">
        <!-- Content for screen without action bar-->

        <!-- Move toolbar above drawerlayout so that on opening drawer, it is visible -->
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:background="@color/theme_color"
            android:elevation="6dp"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

        <FrameLayout
            android:id="@+id/frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <android.support.v4.view.ViewPager
                        android:id="@+id/pager"
                        android:layout_width="match_parent"
                        android:layout_height="fill_parent"/>

                    <android.support.design.widget.TabLayout
                        android:id="@+id/tab_layout"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="@color/theme_color"
                        android:elevation="6dp"
                        android:minHeight="?attr/actionBarSize"
                        app:tabIndicatorColor="@color/sub_theme_color"
                        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

                    <View
                        android:id="@+id/shadow_toolbar"
                        android:layout_width="match_parent"
                        android:layout_height="4dp"
                        android:background="@drawable/toolbar_shadow" />

                </RelativeLayout>

        </FrameLayout>


    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        app:headerLayout="@layout/header_navigation_drawer"
        app:menu="@menu/menu_drawer_links"
        />
</android.support.v4.widget.DrawerLayout>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2013-05-03
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多