我正在使用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) 我昨天将设计支持库从版本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
我已经使用了PagerSlidingTabStrip库很长一段时间,在ViewPager上方显示标签.
最近,我的任务是设置图标(使用选择器,选择与未选择状态)而不是选项卡的文本,所以我做了.然而,似乎图书馆无法很好地处理它,有时显示空标签,所以我已经转移到TabLayout,这是谷歌设计库的一部分
我注意到了一些如何向TabLayout添加图标的解决方案,但每个解决方案都有一个或多个问题:
我使用的代码来自于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)
我尝试过的解决方案是:
为每个选项卡设置一个图标(并删除适配器的"getPageTitle"代码):
for (int i = 0; i < tabLayout.getTabCount(); i++)
tabLayout.getTabAt(i).setIcon(...);
Run Code Online (Sandbox Code Playgroud)
当我没有使用选择器时,还尝试添加setOnTabSelectedListener.
该解决方案导致闪烁效果(问题#2).
扩展TabLayout支持图标或实施TabViewProvider,如图所示这里.
扩展TabLayout根本不显示图标(问题#1),实现TabViewProvider有闪烁图标的问题(尽管很少见).
对于getPageTitle,返回在它的图标,如图所示SpannableString 这里.这根本没有显示我的图标.
我记得我也尝试了其他解决方案,但他们也遇到了我提到过的问题.
为标签设置图标的正确方法是什么?
有没有官方的方法来实现这一目标?我想至少为每个标签选择一个和未选择的图像.选择时的过渡是一个很好的奖励,我希望通过这种方式看起来更好.
为什么图标会闪烁?我注意到它甚至出现在文本中......
可能有解决方法吗?
icons android android-viewpager android-design-library android-tablayout

] 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) 我有一个主要活动navigation drawer和container,navigation drawer具有options.the抽屉选项替换名单container有fragments.当我单击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
不幸的是,没有回答关于如何隐藏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) 我正在使用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中显示它?谢谢!
我的屏幕上有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) 我制作了一个应用程序,其中我在我的位置显示了带有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
我使用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)