ビュークラスを作成する

Compose を試す
Jetpack Compose は、Android に推奨される UI ツールキットです。Compose でレイアウトを操作する方法を学習します。
<ph type="x-smartling-placeholder"></ph> Compose のカスタム レイアウト →

適切に設計されたカスタムビューは、他の適切に設計されたクラスに似ています。Kubernetes は、 特定の シンプルなインターフェースを備え、CPU とメモリを効率的に使用できます。イン Google Cloud の カスタムビューでは、次のことを行う必要があります。

  • Android の標準に準拠する。
  • Android XML レイアウトと連携する、カスタムのスタイル可能な属性を提供します。
  • ユーザー補助イベントを送信する。
  • 複数の Android プラットフォームと互換性がある

Android フレームワークには、基本クラスと XML タグのセットが用意されており、 すべての要件を満たしています 提供します。このレッスンでは、Android フレームワークを使用して、 ビュー機能 クラスです。

その他の カスタムビュー コンポーネントをご覧ください。

ビューをサブクラス化する

Android フレームワークで定義されているすべてのビュークラスは、 View。お客様の カスタムビューでは View を直接拡張するか、 レイテンシの低減によって 既存のビュー Button などのサブクラスを使用します。

Android Studio でビューを操作できるようにするには、少なくとも パラメータとして ContextAttributeSet オブジェクトを指定します。 このコンストラクタにより、Layout Editor でビューのインスタンスを作成、編集することが可能になります。

Kotlin

class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)

Java

class PieChart extends View {
    public PieChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

カスタム属性を定義する

組み込みの View をユーザー インターフェースに追加するには、XML 要素で指定し、 制御する 要素の属性による外観と動作。カスタム ディメンションや 作成できます。宛先 カスタムビューでこの動作を有効にするには、次の操作を行います。

  • <declare-styleable> リソース要素でビューのカスタム属性を定義します。
  • XML レイアウトの属性の値を指定します。
  • 実行時に属性値を取得する。
  • 取得した属性値をビューに適用します。

このセクションでは、カスタム属性を定義して、その値を指定する方法について説明します。 次のセクションでは、 実行時に値を取得して適用できます

カスタム属性を定義するには、プロジェクトに <declare-styleable> リソースを追加します。通常、これらのリソースを単一の res/values/attrs.xml ファイル。こちらが attrs.xml ファイルの例を以下に示します。

<resources>
   <declare-styleable name="PieChart">
       <attr name="showText" format="boolean" />
       <attr name="labelPosition" format="enum">
           <enum name="left" value="0"/>
           <enum name="right" value="1"/>
       </attr>
   </declare-styleable>
</resources>

このコードは、showTextlabelPosition の 2 つのカスタム属性を宣言します。 属しており、 PieChartというエンティティがありますスタイル設定が可能なエンティティの名前は、慣例により、 [ クラスの名前 カスタムビューを定義します。この規則に従う必要はありませんが 多くの一般的なコードが エディタは、この命名規則に基づいてステートメントを補完します。

カスタム属性を定義したら、 属性です。唯一の 違いは、カスタム属性が異なる名前空間に属していることです。帰属意識を http://schemas.android.com/apk/res/android Namespace であり、http://schemas.android.com/apk/res/[your package name] に属します。たとえば、 属性の定義に PieChart:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res-auto">
 <com.example.customviews.charting.PieChart
     custom:showText="true"
     custom:labelPosition="left" />
</LinearLayout>

長い名前空間 URI を繰り返す必要をなくすために、このサンプルでは xmlns ディレクティブ。このディレクティブは、エイリアス custom を Namespace http://schemas.android.com/apk/res/com.example.customviews。 名前空間には任意のエイリアスを選択できます。

カスタムビューをレイアウトに追加する XML タグの名前にご注意ください。完全な リソースの修飾名を カスタムビュー クラスを使用します。ビュークラスが内部クラスの場合は、さらに修飾する をビューの外側クラスの名前に置き換えます。 たとえば、 PieChart クラスには PieView という内部クラスがあります。 カスタム属性を定義する場合、 com.example.customviews.charting.PieChart$PieView タグを使用します。

カスタム属性を適用する

XML レイアウトからビューを作成すると、XML タグ内のすべての属性が読み取られます。 リソースから ビューのコンストラクタに AttributeSet。 しかし、 AttributeSet から値を直接読み取ることができます。 デメリットがいくつかあります。

  • 属性値内のリソース参照は解決されません。
  • スタイルは適用されません。

代わりに、AttributeSetobtainStyledAttributes()。 このメソッドは TypedArray 次の配列 値の範囲が すでに間接参照とスタイル設定が行われています

Android リソース コンパイラは、関数を呼び出すためにさまざまな処理を行います。 obtainStyledAttributes() 簡単になります。各<declare-styleable> res/ ディレクトリにあるリソースの場合、生成された R.java は両方の属性の配列を定義します 一連の ID と、 配列内の各属性のインデックスを定義する定数。事前定義の 読み取る定数 TypedArray の属性。手順は次のとおりです。 PieChart クラス その属性を読み取ります。

Kotlin

init {
    context.theme.obtainStyledAttributes(
            attrs,
            R.styleable.PieChart,
            0, 0).apply {

        try {
            mShowText = getBoolean(R.styleable.PieChart_showText, false)
            textPos = getInteger(R.styleable.PieChart_labelPosition, 0)
        } finally {
            recycle()
        }
    }
}

Java

public PieChart(Context context, AttributeSet attrs) {
   super(context, attrs);
   TypedArray a = context.getTheme().obtainStyledAttributes(
        attrs,
        R.styleable.PieChart,
        0, 0);

   try {
       mShowText = a.getBoolean(R.styleable.PieChart_showText, false);
       textPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
   } finally {
       a.recycle();
   }
}

TypedArray オブジェクトは 共有リソースである 使用後はリサイクルする必要があります

プロパティとイベントを追加する

属性はビューの動作と外観を制御する優れた方法ですが、 読み取りのみ可能です。 ビューが初期化されたときにトリガーされます。動的な動作を実現するには、プロパティ ゲッターを公開し、 それぞれにセッターペア 指定します。次のスニペットは、PieChart がプロパティを公開する方法を示しています。 showText という名前にします。

Kotlin

fun isShowText(): Boolean {
    return mShowText
}

fun setShowText(showText: Boolean) {
    mShowText = showText
    invalidate()
    requestLayout()
}

Java

public boolean isShowText() {
   return mShowText;
}

public void setShowText(boolean showText) {
   mShowText = showText;
   invalidate();
   requestLayout();
}

setShowTextinvalidate() を呼び出します。 および requestLayout()。これらの呼び出しは ビューが確実に動作するかを確認します。必要な ビューを無効化する目的で、ビューのプロパティに変更が加えられると、ビュー 表示されるため、 再描画が必要だと認識したからです同様に、次の場合は新しいレイアウトをリクエストする必要があります。 変更されるとは限りません。 ビューのサイズや形状に影響することがあります。これらのメソッド呼び出しを削除すると、 見つけにくい 見つかるでしょう。

カスタムビューでは、重要なイベントを伝えるイベント リスナーもサポートする必要があります。対象 インスタンス、PieChart OnCurrentItemChanged というカスタム イベントを公開して、リスナーに以下を通知します。 ユーザーが 新しい円グラフのスライスをフォーカスします

特にユーザーが 1 人だけの場合は、プロパティとイベントの公開を忘れがちです。 クリックします 時間をかけてビューのインターフェースを慎重に定義することで、今後のメンテナンスを減らすことができる 費用が削減されます 表示に影響するプロパティは、常に公開することをおすすめします。 アプリケーションの外観や動作 カスタムビューを作成します

ユーザー補助を考慮した設計

カスタムビューは幅広いユーザーをサポートする必要があります。これには、 障がいのある人が タッチスクリーンを見たり使用したりできないようにします。障がいのあるユーザーをサポートするため 次の操作を行います。

  • android:contentDescription を使用して入力フィールドにラベルを付ける 属性です。
  • sendAccessibilityEvent() を呼び出してユーザー補助イベントを送信する できます。
  • D-pad やトラックボールなどの代替コントローラをサポートする。

アクセス可能なビューの作成について詳しくは、以下をご覧ください。 <ph type="x-smartling-placeholder"></ph> アプリのユーザー補助機能を強化する