我在其中一个布局上使用带有选项卡导航的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;
}
}
即使它们
总而言之,使用viewpager会产生与屏幕底部意外的错误对齐。我最初使用根RelativeLayout来包含viewpager,并且LinearLayout和边距都可以,即使使用viewpager也可以与底部对齐。
问题是我需要将它作为LinearLayout,以便按比例缩放2个孩子的体重,这样我避免:
接下来的问题是如何使用ViewPager防止这种不一致,这样我可以在我的应用程序中使用静态LinearLayout,底部静态栏,当我切换活动时不会改变?