0

次のような単純なテーマを作成します

 <style name='one'>
    <item name='android:textColor'>#eea</item>
    <item name='android:textSize'>20sp</item>
    </style>

ただし、エミュレーターで表示すると、画面が黒くなります。テーマを適用しないと、画面の背景が白くなります。ここで実際に何が起こるか.私はアンドロイドから始めたばかりです. さらに、アクティビティにテーマを適用すると、テーマの属性がアクティビティのすべてのコンポーネント (button、textfields、edittexts など) に適用されます。なぜ私は次に書くのでしょうか

android:textSize=?android:textSize 

同じ値がすでに適用されている場合に、レイアウト内の任意のボタンのテーマから値を参照します。

上記の構文は、テーマから属性を参照して、レイアウト内の任意のビューの属性に割り当てる正しい方法です。ありがとうテジンダー

4

1 に答える 1

1

ええ、それで、もう少し読む必要があります。

基本から始めましょう。

属性、スタイル、テーマの違いを理解する必要があります。

属性は、スタイルを設定できるものです。例:android:textSizeは、任意の値を持つことができる属性です。

スタイルは、ウィジェットに適用される特定の属性のセットです。それらはあなたの/values/styles.xml

例えば:

<style name="normalTextThin" parent="android:Widget.Holo.Light.TextView">
    <item name="android:gravity">left|center_vertical</item>
    <item name="android:padding">8dp</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:textSize">16sp</item>
</style>

スタイルは、テーマの一部として適用することも、テーマに依存しないものとして直接適用することもできます。

テーマに依存しないウィジェットのスタイリングは次のようになります。

 <TextView
    android:id="@+id/text"
    style="@style/normalTextThin"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

次に、その 1 つの TextViewのみをテーマにしています。

テーマは、アクティビティ全体やアプリケーション全体など、UI の一部に適用できるスタイルのコレクションです。

例えば:

<style name="AppTheme" parent="android:Theme.Light">
    <item name="android:editTextStyle">@style/EditTextAppTheme</item>
    <item name="android:buttonStyle">@style/ButtonAppTheme</item>
    <item name="android:imageButtonStyle">@style/ImageButtonAppTheme</item>
</style>

ここでは、アプリケーション内のすべてのEditText がという名前のスタイルEditTextAppThemeを使用することを宣言しています。このようにすると、実際にテーマをアクティブにするために、マニフェストで宣言します。

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

つまり、作成する各ウィジェットでスタイルを宣言する必要はありません。

<EditText
    android:id="@+id/input"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/hint_search">
    <requestFocus />
</EditText>

EditTextAppThemeそのウィジェットは、明示的に宣言しなくても、使用してすでにスタイル設定されています。

どの属性をスタイルできるか、どのようにスタイルを設定するかなどについて読んでみることをお勧めします。

そうしたくない場合でも、次のスタイリング ツールを使用して多くのことを行うことができます。

それが役立つことを願っています。

追加情報

全体的に明らかにしよう?attr/attributeName

これは、システムが現在の構成に対して特定の値を?選択することを意味します(異なるテーマに固有のものではありません)。これは、異なる構成で異なる値が必要な場合にのみ使用してください。例えば:attributeName

?android:attr/actionBarSize

この線は寸法であり、現在のテーマではなく、現在のデバイスの画面サイズと向き (values、values-land、values-sw600dp) によって異なります。

指定するということは、自分?android:のではなく、あらかじめ設定された Android の値にアクセスしていることを意味することを知っておくことが重要です。特定の構成に対して独自の属性値を作成して使用する場合、または使用したい場合は、次の手順を実行する必要があります。

attrs.xml/values/ フォルダーにという名前のファイルを作成します。

目的のカスタム属性を宣言します。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <attr name="my_custom_attr" format="reference" />
</resources>

カスタム属性の値を宣言します。たとえば、独自のテーマについて考えてみましょう。

<style name="AppTheme" parent="android:Theme.Light">
    <item name="my_custom_attr">@resource_type/resource_name</item>
    <item name="android:editTextStyle">@style/EditTextAppTheme</item>
    <item name="android:buttonStyle">@style/ButtonAppTheme</item>
    <item name="android:imageButtonStyle">@style/ImageButtonAppTheme</item>
</style>

そして、あなたが望むウィジェットでそれを使うことができます:

問題が解決することを願っています。

編集2

質問に対するより良い回答を得るには、質問を更新してください。そして、私が言ったように、スタイルを適切に作成する方法についてもっと読んでください.

  1. 「one」という名前のテーマ、何に適用しますか? アクティビティ、ウィジェット、アプリケーション全体?
  2. どのようにテーマを適用していますか? テーマ「one」の使用法を指定するコード行を表示します。

あなたが指定したテーマは、適切に構築されたテーマ/スタイルではありません。

<style name='one'>
<item name='android:textColor'>#eea</item>
<item name='android:textSize'>20sp</item>
</style>

これはまったく何も言っておらず、Activity レベルのテーマにはまったく適していません。を指定する理由は、テーマが親からすべての属性を継承できるようにするためです。その後、どの属性を変更するかを指定します。

たとえば、テーマを使用して背景を明るくしたい場合は、次のようにします。

<style name='one' parent="android:Theme.Holo.Light>
    <item name='android:textColor'>#eea</item>
    <item name='android:textSize'>20sp</item>
</style>

しかし、ここでも、適用されるという事実にもかかわらず、アプリケーション全体で同じテキストの色とサイズを使用したくありませんか? それはナンセンスです。さまざまなテキストの色とサイズがユーザー エクスペリエンスの大部分を占めているため、メインスタイルとして参照できるものからこれらの値を設定するのではなく、サブスタイルを作成して特定のウィジェットに適用できます。

すでに持っているものについてこれ以上詳しく説明することはできません。上記では、ウィジェット固有のスタイル設定とアクティビティ/アプリケーション レベルのテーマ設定を実現する方法について説明しています。

完全なスタートアップ ガイドについては、Android Developer Siteを読み、そこで宣言されているテスト スタイルを試して、それらがどのように機能するかを確認してください。それまでは独自のスタイルを作成してみてください。作る。

于 2013-06-02T11:30:45.393 に答える