1

2 つのレイアウト間でレイアウトの一貫性の問題が検出されました。それらの 1 つでタブ ナビゲーションを使用して ViewPager を使用している場合です。FragmentActivity (viewpager を使用) と通常のアクティビティ用に、次の 2 つの非常によく似た XML レイアウトがあります。

FragmentActivity レイアウト

<?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>

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;
    }
}

ベース レイアウト フォーマットでは完全に同じですが、同じウェイト プロパティを持ち、同じタイプのレイアウトを使用しているため、これら 2 つのアクティビティは、Eclipse WYSIWYG 上でも実行時でも、画面下部の 1 ピクセルだけ異なります。通常のアクティビティは期待どおりに動作しますが、FragmentActivity は最後の LinearLayout を下に揃えることはありません。マージン プロパティが 0 で強制された場合でも同様です。結果は、以下のリンクの写真のようなものです (私は写真に定評がありません)。

レイアウトエラー

全体として、viewpager を使用すると、画面の下部に予期しない不適切な位置合わせが発生します。私は最初にルート RelativeLayout を使用してビューページャーと LinearLayout を含め、マージンは問題なく、ビューページャーでも下に揃えました。

問題は、ウェイトを使用して 2 つの子を比例的にスケーリングするために、これを LinearLayout として必要とすることです

  1. 絶対傾斜高の使用;
  2. 異なる画面密度用に複数のレイアウト ファイルを作成する。
  3. レイアウトの問題を解決するために、レイアウトの動作をプログラムおよび実行時に変更します。

問題は、ViewPager を使用してこの不一致を防止し、アクティビティを切り替えても変化しない静的 LinearLayout をアプリで使用できるようにする方法です。

4

0 に答える 0