web-dev-qa-db-ja.com

Android API10でのグリッドレイアウトのサポート

ターゲットAPIを15としてアプリを開発しました。レイアウトにはグリッドレイアウトが含まれています。ターゲットAPIを10に変更すると、グリッドレイアウトと別の要素「スペース」で問題が発生します。 Eclipseは、2.3.3のサポートライブラリをダウンロードするように要求します。これは私が行いました...しかし、まだ問題があります。

26
Madhav Kishore

GridLayoutは、APIレベル7以上と互換性があるように実際にバックポートされています。これは(一種の)サポートライブラリの一部です。サポートライブラリをダウンロードすると、次の場所にあるローカルSDKフォルダーにAndroidライブラリプロジェクトがあります。

<sdk_folder>\extras\Android\compatibility\v7\gridlayout

作業中のプロジェクトの依存関係として設定します。その後、ICS以前のデバイスをサポートするために、プロジェクト全体の参照をレベル15バージョンからこの互換性バージョンに変更する必要があります。レイアウトファイルで、xmlをGridLayoutからAndroid.support.v7.widget.GridLayoutに変更します。使用法は、同一ではないにしても、類似している必要があります。

Space ウィジェットについて:これは(まだ)実際には使用していませんが、既存のビューにマージン/パディングを設定するか、追加することで置き換えることができるようです。完全に透過的な独自の汎用Viewで。

36
MH.

Android Studioの場合、サポートライブラリをダウンロードしたら(@MH。で説明)、File->Import Module...を使用して、GridLayoutサポートの場所を選択する必要があります。ここにあります:<sdk_folder>\extras\Android\support\v7\gridlayout

次に、xmlレイアウトファイルで<Gridlayout>を使用する代わりに、<Android.support.v7.widget.GridLayout>を使用します。次に例を示します。

<Android.support.v7.widget.GridLayout
    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"
    app:useDefaultMargins="true"
    app:alignmentMode="alignBounds"
    app:columnOrderPreserved="false"
    app:columnCount="4"
>

レイアウト内の要素は、上記および子要素で見られるように、GridLayoutプロパティに対してappではなくAndroidを参照します。

    <TextView
        Android:textSize="32dip"
        app:layout_columnSpan="4"
        app:layout_gravity="center_horizontal"
    />

最後に、GridLayoutサポートライブラリ参照を\src\build.gradledependenciesセクションに追加する必要があります。

dependencies {
    compile 'com.Android.support:appcompat-v7:+'
    compile 'com.Android.support:gridlayout-v7:+'
}
18
Jason Hartley

または別の代替手段はこれです サードパーティの下位互換性のある実装:

これは、APIレベル3に戻る必要がある場合は互換性があり、Spaceウィジェットも含まれています。

4
kingraam