我想在我的项目中使用新的Design TabLayout.我希望布局适应每个屏幕尺寸和方向,但可以在一个方向上正确看到.
我正在处理重力和模式设置我的tabLayout为:
tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
Run Code Online (Sandbox Code Playgroud)
所以我希望如果没有空间,tabLayout是可滚动的,但是如果有空间,它就会居中.
从指南:
public static final int GRAVITY_CENTER Gravity用于布置TabLayout中心的选项卡.
public static final int GRAVITY_FILL Gravity用于尽可能多地填充TabLayout.此选项仅在与MODE_FIXED一起使用时生效.
public static final int MODE_FIXED固定选项卡同时显示所有选项卡,最适用于受益于选项卡之间快速枢轴的内容.选项卡的最大数量受视图宽度的限制.固定标签的宽度相等,基于最宽的标签标签.
public static final int MODE_SCROLLABLE可滚动选项卡在任何给定时刻显示选项卡的子集,并且可以包含更长的选项卡标签和更多数量的选项卡.当用户不需要直接比较标签标签时,它们最适合用于浏览触摸界面中的上下文.
所以GRAVITY_FILL只与MODE_FIXED兼容但是,at没有为GRAVITY_CENTER指定任何内容,我希望它与MODE_SCROLLABLE兼容,但这是我使用GRAVITY_CENTER和MODE_SCROLLABLE

因此它在两个方向都使用SCROLLABLE,但它没有使用GRAVITY_CENTER.
这就是我对景观的期望; 但要拥有这个,我需要设置MODE_FIXED,所以我得到的是肖像:

如果tabLayout适合屏幕,为什么GRAVITY_CENTER不能用于SCROLLABLE?有没有办法动态设置重力和模式(并看看我期待什么)?
非常感谢你!
编辑:这是我的TabLayout的布局:
<android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:background="@color/orange_pager"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud) 我已经TabLayout(从支持库v22.2.1)添加到我的片段:
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
style="@style/MyColorAccentTabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"/>
Run Code Online (Sandbox Code Playgroud)
问题是当片段的方向是横向时(在片段的初始创建之前或之后),TabLayout它与宽度不匹配Fragment(是的,父节点的宽度也设置match_parent为).
当屏幕宽度足够大以显示所有选项卡时(请参阅右侧的空白区域):

如果我更改tabMode为固定,则填充宽度但标签太小.那里有适当的解决方案吗?
我一直在研究android 2周.现在我正在开发我的第一个android项目.在我的项目中,我需要与Tabs一起使用操作栏.我知道这在android中很常见.对于操作栏,我使用工具栏和v7.我认真对待行动吧.但我有标签布局的问题.问题是我想在布局xml文件中添加选项卡到选项卡布局.
例如
<TabLayout>
//tab buttton goes here
<TabButton1></TabButton1>
<TabButton1></TabButton1>
.
.
<TabLayout>
Run Code Online (Sandbox Code Playgroud)
我搜索了很多关于tablayout的教程.但是所有教程都以编程方式定义选项卡布局的选项卡.那么请问如何在xml中为选项卡布局定义选项卡,并通过findViewById以编程方式为它们定义事件?我不想使用按钮视图而不是标签.请问我该如何实现?
在我的Android项目中,我使用Material-design进行选项卡视图.我有 :
tab_activity.xml
<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.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Run Code Online (Sandbox Code Playgroud)
和java类文件是:
public class SimpleTabsActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_activity);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); …Run Code Online (Sandbox Code Playgroud) 我想将标签文本(最多8个字符)放在一行中
我为TabLayout元素添加了自定义样式
<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
<item name="tabTextAppearance">@style/MyCustomTabTextAppearance</item>
</style>
<style name="MyCustomTabTextAppearance" parent="TextAppearance.Design.Tab">
<item name="android:maxLines">1</item>
<item name="android:singleLine">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)
仍然没有成功.我也试过了
<android.support.design.widget.TabLayout
app:tabTextAppearance="@style/MyCustomTabTextAppearance"
..
..
/>
Run Code Online (Sandbox Code Playgroud) android android-layout android-view android-viewpager android-tablayout
我找到了以下关于如何设置的文档customView.但是当我将id我的布局更改为"text1"和"icon"时,setText()并且setIcon()不起作用.
public TabLayout.Tab setCustomView(int layoutResId)
设置要用于此选项卡的自定义视图.
如果膨胀的布局包含一个
TextViewID为,text1那么将使用给定的值更新setText(CharSequence).同样,如果此布局包含ImageView带有ID的图标,则它将使用给定的值进行更新setIcon(Drawable).
(来源:http://developer.android.com/reference/android/support/design/widget/TabLayout.Tab.html#setCustomView(int))
谁能举个例子说明这是如何运作的?
Java代码:
TabLayout.Tab tabAdd = tabLayout.getTabAt(0);
tabAdd.setCustomView(R.layout.tab_layout_custom_view);
tabAdd.setText("Add");
tabAdd.setIcon(R.mipmap.add_tab).setText("Add");
Run Code Online (Sandbox Code Playgroud)
布局代码:
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/icon"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:id="@+id/text1"
android:gravity="center"
android:layout_below="@+id/icon" />
Run Code Online (Sandbox Code Playgroud)