标签: android-tablayout

为平板电脑设置标签布局选项卡的最佳方法是什么?

我正在使用Android Design支持库中的TabLayout.如何将MODE_SCROLLABLE与GRAVITY_FILL一起使用,以使其在所有设备和方向上看起来相同?

目前,如果我使用MODE_SCROLLABLE,它在7英寸平板电脑上看起来不错,但在10英寸平板电脑上,标签在左侧对齐.我希望能够为所有尺寸使用GRAVITY_FILL.

这是我的tablayout:

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="72dp"            
/>
Run Code Online (Sandbox Code Playgroud)

我在代码中设置模式

 tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
Run Code Online (Sandbox Code Playgroud)

android android-design-library android-tablayout

8
推荐指数
2
解决办法
1万
查看次数

更新设计支持库后缺少TabLayout

我昨天将设计支持库从版本22.2.0更新到22.2.1,我遇到了一个奇怪的行为TabLayout.在版本22.2.0上,TabLayout工作得很好,但现在它没有显示在我的碎片中,除非我旋转手机(然后它出现).我没有改变我的代码,它只是停止了工作.

以下是片段:

public class FriendFragment extends Fragment {
  @Bind(R.id.friendPager)
  ViewPager viewPager;
  @Bind(R.id.friendSlideTab)
  TabLayout tabLayout;
  ...
  @Override
  public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   View v = inflater.inflate(R.layout.fragment_friend,container,false);
   ButterKnife.bind(this,v);

   return v;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    list.add(new SlideFragment(getString(R.string.my_friends), new MyFriendsFragment()));
    list.add(new SlideFragment(getString(R.string.add_friend), new SearchFriendFragment()));

    adapter = new FragmentSliderAdapter(list, getChildFragmentManager());
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);
}


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

    <android.support.design.widget.TabLayout
        android:id="@+id/friendSlideTab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/friendPager"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1" /> …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-support-library butterknife android-tablayout

8
推荐指数
1
解决办法
2280
查看次数

为什么在页面之间滑动时TabLayout的选项卡的图标/文本会闪烁?

背景

我已经使用了PagerSlidingTabStrip库很长一段时间,在ViewPager上方显示标签.

最近,我的任务是设置图标(使用选择器,选择与未选择状态)而不是选项卡的文本,所以我做了.然而,似乎图书馆无法很好地处理它,有时显示空标签,所以我已经转移到TabLayout,这是谷歌设计库的一部分

问题

我注意到了一些如何向TabLayout添加图标的解决方案,但每个解决方案都有一个或多个问题:

  1. 没有显示图标
  2. 显示图标,但可以不时闪烁,特别是在设置了"exitFadeDuration"或快速滑动时使用选择器时
  3. 单击选项卡不会更改viewPager的当前页面.

代码

我使用的代码来自于MainActivity.java文件中的cheesesquare示例.这很基本:

      final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
      ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
      ...
      tabLayout.setupWithViewPager(viewPager);
Run Code Online (Sandbox Code Playgroud)

我尝试过的解决方案是:

  1. 为每个选项卡设置一个图标(并删除适配器的"getPageTitle"代码):

    for (int i = 0; i < tabLayout.getTabCount(); i++) 
        tabLayout.getTabAt(i).setIcon(...);
    
    Run Code Online (Sandbox Code Playgroud)

    当我没有使用选择器时,还尝试添加setOnTabSelectedListener.

    该解决方案导致闪烁效果(问题#2).

  2. 扩展TabLayout支持图标或实施TabViewProvider,如图所示这里.

    扩展TabLayout根本不显示图标(问题#1),实现TabViewProvider有闪烁图标的问题(尽管很少见).

  3. 对于getPageTitle,返回在它的图标,如图所示SpannableString 这里.这根本没有显示我的图标.

我记得我也尝试了其他解决方案,但他们也遇到了我提到过的问题.

这个问题

为标签设置图标的正确方法是什么?

有没有官方的方法来实现这一目标?我想至少为每个标签选择一个和未选择的图像.选择时的过渡是一个很好的奖励,我希望通过这种方式看起来更好.

为什么图标会闪烁?我注意到它甚至出现在文本中......

可能有解决方法吗?

icons android android-viewpager android-design-library android-tablayout

8
推荐指数
1
解决办法
2182
查看次数

选项卡图标和文本均使用android设计支持库

在启动时,选项卡看起来像这样这是我在启动时的项目.所有选项卡都是黑色但我希望第一个是橙色(它的图标和文字)[![这是第二个选项卡,当我移动到这个工作正常[![当我回来到第一个选项卡它正在运行我想要的...主要的问题是应用程序何时启动] 1 ] 1我使用了android设计支持tablayout,我在选项卡上都有图标和文本..我使用customtabview垂直对齐图标和文本..我想在选择/取消选择时更改图标和文本的颜色.

我为不同的选项卡图标制作了选择器文件.但事情是当我运行项目时,第一个默认选项卡未被选中我希望它们默认被选中..如果我转到其他选项卡然后再刷回第一个选项卡它工作得很好..主要的问题是我不能让第一个选项卡片段被选中..请帮助我,因为我坚持过去2天..我不想使用任何来自github的库

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;



public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private int[] tabIcons = {
            R.drawable.image1, …
Run Code Online (Sandbox Code Playgroud)

android androiddesignsupport android-tablayout

8
推荐指数
1
解决办法
2万
查看次数

Fragment里面的Android Tab Layout没有加载标签内容

我有一个主要活动navigation drawercontainer,navigation drawer具有options.the抽屉选项替换名单containerfragments.当我单击fragtab选项时container加载tab布局fragment,但是当我尝试通过单击相同选项第二次加载它时,它不显示tab内容.

片段xml布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/card_search"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            card_view:cardBackgroundColor="@android:color/white"
            card_view:cardCornerRadius="2dp">


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


                <LinearLayout
                    android:id="@+id/linearLayout_search"
                    android:layout_width="match_parent"
                    android:layout_height="48dp">


                    <ImageView
                        android:id="@+id/image_search_back"
                        android:layout_width="48dp"
                        android:layout_height="48dp"
                        android:background="?android:attr/selectableItemBackground"
                        android:clickable="true"

                        android:padding="12dp"
                        android:src="@mipmap/ic_search_black_24dp" />


                    <EditText
                        android:id="@+id/edit_text_search"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:background="#fff"
                        android:gravity="center_vertical"
                        android:hint="Search"
                        android:imeOptions="actionSearch"
                        android:inputType="textCapWords"
                        android:paddingLeft="12dp"
                        android:paddingRight="8dp"
                        android:singleLine="true"
                        android:textColor="@color/colorAccent"
                        android:textColorHint="@color/colorAccent" />

                </LinearLayout>

            </RelativeLayout>
        </android.support.v7.widget.CardView>


        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager android-tabs material-design android-tablayout

8
推荐指数
1
解决办法
3925
查看次数

在Tablayout Android中隐藏选项卡

不幸的是,没有回答关于如何隐藏Tab的问题android.support.design.widget.TabLayout.其他问题都是用的TabHost,我不想改变我的代码.

我想隐藏"三个"标签.

在此输入图像描述


分段:

viewPager = (ViewPager) rootView.findViewById(R.id.search_viewPager);
viewPager.addOnPageChangeListener(viewPagerListener);
viewPager.setAdapter(adapter);
tabLayout = (TabLayout) rootView.findViewById(R.id.search_tabs);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setupWithViewPager(viewPager);
Run Code Online (Sandbox Code Playgroud)

布局:

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

    <android.support.design.widget.TabLayout
    android:id="@+id/search_tabs"
    style="@style/TabLayoutStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:elevation="1dp" />

    <android.support.v4.view.ViewPager
    android:id="@+id/search_viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

android android-tablayout

8
推荐指数
2
解决办法
9441
查看次数

在android TabLayout中显示虚拟键盘

我正在使用TabLayout来显示不同的输入方法.第一个选项卡包含按钮,第四个选项卡应显示此TabLayout中嵌入的标准键盘.这是截图应该是什么样的截图:

在此输入图像描述

TabLayout到目前为止工作.我尝试使用KeyboardView创建布局XML文件.但该应用程序没有显示键盘:

<?xml version="1.0" encoding="utf-8"?>
<android.inputmethodservice.KeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    />
Run Code Online (Sandbox Code Playgroud)

如果我使用简单的Textview,应用程序会显示文本...所以TabLayout本身正在工作:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="This is a tab layout"
        android:id="@+id/textView"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我的问题是如何创建一个简单的键盘并在TabLayout中显示它?谢谢!

android android-keypad android-tablayout

8
推荐指数
1
解决办法
461
查看次数

不允许用户单击其中一个选项卡

我的屏幕上有7个日期标签.但是,如果日期是另一个月,我不允许用户单击该选项卡.我想让它们可见但不可点击.

这是选项卡的外观

这是我的代码的一部分:

public void setupViewPager(ViewPager viewPager, ArrayList<String> id, ArrayList<String> tasks,
                           ArrayList<Double> mondayHours, ArrayList<Double> tuesdayHours,
                           ArrayList<Double> wednesdayHours, ArrayList<Double> thursdayHours,
                           ArrayList<Double> fridayHours, ArrayList<Double> saturdayHours,
                           ArrayList<Double> sundayHours) {
    Bundle bundle = new Bundle();
    bundle.putStringArrayList(EXTRA_CHECKED_TASK_ID, id);
    bundle.putStringArrayList(EXTRA_CHECKED_TASKS, tasks);
    bundle.putSerializable(EXTRA_MONDAY, mondayHours);
    bundle.putSerializable(EXTRA_TUESDAY, tuesdayHours);
    bundle.putSerializable(EXTRA_WEDNESDAY, wednesdayHours);
    bundle.putSerializable(EXTRA_THURSDAY, thursdayHours);
    bundle.putSerializable(EXTRA_FRIDAY, fridayHours);
    bundle.putSerializable(EXTRA_SATURDAY, saturdayHours);
    bundle.putSerializable(EXTRA_SUNDAY, sundayHours);

    final String MON = "MON" + "\n" + MainActivity.sevenDatesList.get(0);
    final String TUE = "TUE" + "\n" + MainActivity.sevenDatesList.get(1);
    final String WED = "WED" + "\n" + MainActivity.sevenDatesList.get(2);
    final String THU = "THU" …
Run Code Online (Sandbox Code Playgroud)

android android-tablayout

8
推荐指数
2
解决办法
2069
查看次数

使用TabLayout在ViewPager中的Google地图片段中夸大异常

我制作了一个应用程序,其中我在我的位置显示了带有GPS位置标记的Google地图.此地图位于第一个选项卡上,我还有另外两个选项卡,如下图所示

在此输入图像描述

现在我面临一个问题,即当我从选项卡1移动到选项卡2然后再转到选项卡1时它完美地工作,但是当我移动到选项卡3然后移回选项卡1或选项卡2时,应用程序崩溃并给出以下内容例外情况LogCat:

01-27 18:35:26.190 9414-9414/com.example.accurat.faisal E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.example.accurat.faisal, PID: 9414
  android.view.InflateException: Binary XML file line #26: Binary XML file line #26: Error inflating class fragment
      at android.view.LayoutInflater.inflate(LayoutInflater.java:551)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
      at com.example.accurat.faisal.MyLocation.onCreateView(MyLocation.java:62)
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2184)
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298)
      at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)
      at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)
      at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
      at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1969)
      at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620)
      at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
      at android.support.v4.view.ViewPager$3.run(ViewPager.java:273)
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
      at android.view.Choreographer.doCallbacks(Choreographer.java:686)
      at android.view.Choreographer.doFrame(Choreographer.java:619)
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
      at android.os.Handler.handleCallback(Handler.java:739)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:148)
      at android.app.ActivityThread.main(ActivityThread.java:7325)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
      at …
Run Code Online (Sandbox Code Playgroud)

android google-maps inflate-exception google-maps-android-api-2 android-tablayout

8
推荐指数
1
解决办法
1431
查看次数

我需要为使用viewpager和tablayout创建的标签分配一个唯一的标签ID吗?

我使用viewpager和Tablayout创建了一个基于Tab的应用程序.当我单击一个按钮时,会创建带有子片段的新选项卡.

我需要的是为我的标签指定不同的标签ID,每个标签都应该不同.我试过我采取标签的位置但不幸的是,它不起作用.当我尝试使用下面的代码来烘烤位置时,它最初仅在创建第一个选项卡时起作用,并且对于创建的其他选项卡不起作用.我不知道为什么会这样.另外,如果我删除标签,则位置不正确.

所以我需要一个替代解决方案来为每个创建的新选项卡分配一个TAB ID(数字或名称),以便在创建每个选项卡时,我需要使用该ID调用对服务器的请求,并根据选项卡ID填充数据

tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                super.onTabSelected(tab);
                viewPager.setCurrentItem(tab.getPosition());
                selectedTabPosition = viewPager.getCurrentItem();
                Toast.makeText(getActivity(), "Selected " + tab.getPosition(), Toast.LENGTH_SHORT).show();
                Log.d("Selected", "Selected " + tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                super.onTabUnselected(tab);
                Log.d("Unselected", "Unselected " + tab.getPosition());
            }
        });
Run Code Online (Sandbox Code Playgroud)

我的ViewPageradapter是:

    public class ViewPagerAdapter extends FragmentStatePagerAdapter {
        private final ArrayList<Fragment> mFragmentList = new ArrayList<>();
        private final ArrayList<String> mFragmentTitleList = new ArrayList<>();
        Context context;
        ViewPager viewPager;
        TabLayout tabLayout;
        int selectedTabPosition;
        private boolean doNotifyDataSetChangedOnce = false;
        public ViewPagerAdapter(FragmentManager …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-tablayout

8
推荐指数
2
解决办法
1095
查看次数