底部TabLayout在底部留下空间

时间:2017-12-06 09:41:50

标签: android android-layout android-tablayout android-tabs android-design-library

我遇到了问题。我有工具栏的自定义布局和我的活动xml,我包括这个工具栏。我活动的结构是:

  1. 使用include标记位于顶部的工具栏布局。
  2. ViewPager
  3. TabLayout位于底部以获得底部标签。
  4. 我面临的问题是,在某些设备上,它是完美的,但在少数设备中(在moto G系列设备上测试),底部标签是留空间。

    请参阅下面的图片:

    在普通电话中显示预期的用户界面

    enter image description here

    在MOTO G系列中

    enter image description here

    xml代码如下

    <?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="#efeded"
    android:weightSum="11"
    android:orientation="vertical">
    
    <include layout="@layout/custom_tool_bar" />
    
    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
    
        android:layout_height="0dp"
    
        android:layout_weight="10" />
    
    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        style="@style/BottomTabLayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#fff"
        android:layout_weight="1"
        app:tabIndicatorColor="@color/colorPrimaryDark"
        app:tabSelectedTextColor="@color/colorPrimaryDark"
        />
    
    </LinearLayout>
    

3 个答案:

答案 0 :(得分:2)

  1. 删除父级LinearLayout中的android:weightSum=11属性;
  2. 将ViewPager的android:layout_weight=10属性更改为android:layout_weight=1;
  3. 删除TabLayout的android:layout_weight=1属性
  4. 再试一次。

答案 1 :(得分:1)

对于底部标签,您可以使用 bottomnavigationview ,它可以提供更好的性能,并且可以在MOTO设备中运行而不会出现任何问题。检查一下

https://developer.android.com/reference/android/support/design/widget/BottomNavigationView.html

答案 2 :(得分:0)

我发现问题为什么会发生。我在我的Activity中使用了一个库ResideMenu,它有一个功能来检测设备是否有硬件后退和菜单按钮或数字按钮。

@HystrixCommand(fallbackMethod = "fallBackMethod", groupKey = "CircuitBreaker", commandKey = "somekey", threadPoolKey = "somekey",
        commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "10000"),
            @HystrixProperty(name = "execution.timeout.enabled", value = "false"),
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "20"),
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "1200000"),
        },
        threadPoolProperties = {
            @HystrixProperty(name = "coreSize", value = "30"),
            @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "180000")
        })
    public void someMethod(....){
             try {
               // Call external service
             } catch(Exception e) {
               if(exception to be ignored)
                 throw new HystrixBadRequestException("Some message", e);
               else
                  throw e
             } 
    }

这不能正常工作。对于某些设备,它工作正常,但对于某些设备,它无法确定按钮。因此,在某些设备中,它会为数字按钮留出空间。 无论如何,我找不到一个解决方案,尝试了一些StackOverflow,但它没有成功,如果有人发现了什么,请发帖。