web-dev-qa-db-ja.com

Androidで?attr /はどういう意味ですか?

私はサポートライブラリとツールバーに関する例に取り組んでいます。これはAndroidドキュメントのレイアウトのコードです

<Android.support.v7.widget.Toolbar
    Android:id="@+id/my_toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:background="?attr/colorPrimary"
    Android:elevation="4dp"
    Android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

初めて見たのは?attrと私はそれらが何を意味するのか、これらの値がどこに保存されるのかについての手がかりはありません。これらはカスタムですか、またはAndroidフレームワークで事前定義されていますか?

リファレンス: Android Toolbar Documentation

27
Julio Bastida

?attr/属性への参照。属性は、アプリのテーマで指定された値です。例の属性は、サポートライブラリによって提供されるテーマで指定されたすべての値です。 Androidには、?android:attr/で使用できる独自の属性もあります。

最後に使用される実際の値は、上記のレイアウトを膨らませるのに使用されるテーマによって異なります。このテーマは、アプリ全体のテーマの場合は<application/>ブロックのマニフェストで、特定のアクティビティの場合は<activity/>ブロックで指定できます。別のコンテキストを使用して、ランタイム中にこのテーマをオーバーライドすることもできます( ContextThemeWrapper および LayoutInflater を参照)

簡単にカスタマイズできるため、レイアウトでハードコードされた値の代わりにテーマ属性を使用することをお勧めします。たとえば、カスタムビューを作成する場合、?attr/colorAccentを使用して、ビューのユーザーが色を提供する必要がないようにし、アプリで使用されるcolorAccentを使用することができます代わりにテーマ。

Android Qでのダークテーマの導入と同様に、レイアウトは属性を指定する必要があるため、ライトテーマとダークテーマを使用するときに終了値が異なるように、これは今日さらに重要になります。

23
Alex Styl

スタイル属性リソースを使用すると、現在適用されているテーマの属性の値を参照できます。

https://developer.Android.com/guide/topics/resources/accessing-resources.html#ReferencesToThemeAttributes

5
Sharj