影响父LinearLayout的ViewPager子元素(底部对齐错误)

时间:2013-03-14 11:02:55

标签: android xml user-interface android-viewpager android-linearlayout

我在其中一个布局上使用带有选项卡导航的ViewPager时,检测到两个布局之间的布局一致性问题。对于FragmentActivity(使用viewpager),我有以下2个非常相似的XML布局,而另一个用于正常活动:

FragmentActivity Layout

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

    <package.ui.tabs.CustomViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/pager"
        android:layout_width="match_parent"

        android:layout_height="0dp"
        android:layout_weight="0.84"
        tools:context=".MainActivity" >
    </package.ui.tabs.CustomViewPager>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.16"
        android:background="@drawable/gradient_menu_bottom"
        android:orientation="horizontal"
        android:weightSum="4" >

    <!-- ...other stuff... -->

    </LinearLayout>

</LinearLayout>

(正常)活动布局

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.84">

    <!-- ...other stuff... -->

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.16"
        android:background="@drawable/gradient_menu_bottom"
        android:orientation="horizontal"
        android:weightSum="4" >

    <!-- ...other stuff... -->

    </LinearLayout>

</LinearLayout>

Nota认为CustomViewPager是SDK通过创建新的TabsActivity eclipse项目提供的ViewPager实现。我将在下面添加代码,以便您可以放心,视图定位和测量不会以任何方式被覆盖:

CustomViewPager.java

public class CustomViewPager extends ViewPager {
    private boolean enabled;

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.enabled = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (this.enabled) {
            return super.onTouchEvent(event);
        }

        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (this.enabled) {
            return super.onInterceptTouchEvent(event);
        }

        return false;
    }

    public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}

即使它们在基本布局格式上完全相同,因为它们具有相同的权重属性并使用相同类型的布局,这两个活动在Eclipse WYSIWYG和在屏幕底部运行一个像素 - 即使强制使用0边距属性,FragmentActivity也不会将最后一个LinearLayout对齐到底部,而正常活动的行为与预期相同。结果类似于下面链接中的图片(我没有图片的声誉):

Layout error

总而言之,使用viewpager会产生与屏幕底部意外的错误对齐。我最初使用根RelativeLayout来包含viewpager,并且LinearLayout和边距都可以,即使使用viewpager也可以与底部对齐。

问题是我需要将它作为LinearLayout,以便按比例缩放2个孩子的体重,这样我避免

  1. 使用绝对倾角;
  2. 为不同的屏幕密度创建多个布局文件;
  3. 以编程方式和运行时更改布局行为以解决布局问题。
  4. 接下来的问题是如何使用ViewPager防止这种不一致,这样我可以在我的应用程序中使用静态LinearLayout,底部静态栏,当我切换活动时不会改变?

0 个答案:

没有答案