50

Jelly Bean を対象とした新しいアプリケーションを Eclipse で作成しました。これはすべて自動的に作成されたコードです。マニフェストは、アプリケーション テーマを AppName に設定します。

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

これは、値ディレクトリのスタイルの AppBaseTheme に変換されます。

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

</resources>

そして、values-v14/styles.xml は次のとおりです。

<resources>

    <!--
        Base application theme for API 14+. This theme completely replaces
        AppBaseTheme from BOTH res/values/styles.xml and
        res/values-v11/styles.xml on API 14+ devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <!-- API 14 theme customizations can go here. -->
    </style>

</resources>

次に、終了する前に確認ダイアログ ボックスを作成しました。

    case R.id.menu_quit:
        new AlertDialog.Builder(this)
        .setIcon(android.R.drawable.ic_dialog_alert)
        .setTitle(R.string.confirm_title)
        .setMessage(R.string.confirm_text)
        .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();    
            }

結果のダイアログ ボックスは次のようになります。

結果のダイアログ ボックス

ic_dialog_icon がとても軽いのはなぜですか? かろうじて見えます。私はすべてデフォルトを使用しています。テーマや色は変更していません。システムは背景とのコントラストが強いアイコンを選択するべきではありませんか? どうすれば修正できますか?

修正して編集
Tomik 情報に従って、android.R.attr.alertDialogIconのドキュメントを読み、この修正を行いました ( setIcon()setIconAttribute( ) に置き換えました) 。

        new AlertDialog.Builder(this)
        .setIconAttribute(android.R.attr.alertDialogIcon)
        .setTitle(R.string.confirm_title)
        .setMessage(R.string.confirm_text)
        .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

ダイアログは次のようになります。

ここに画像の説明を入力

4

2 に答える 2

56

問題は、プライベート リソースを使用していることですandroid.R.drawable.ic_dialog_alert

プライベート リソースの使用には問題があり、デバイスによって異なる可能性があり、それらがすべてのデバイスに存在することを確認することさえできません。最善の方法は、プライベート リソースの使用を避けることです。それらが必要な場合は、Android ソースからコピーして、プロジェクトのリソースに配置する必要があります。

リソースが白すぎる正確な理由はandroid.R.drawable.ic_dialog_alert、標準 (非ホロ) テーマに使用されるリソース ( ) を使用しているためです。
ただし、Android 4.x (API レベル 14) を実行しているデバイスの場合、android:Theme.Holo.Light.DarkActionBar通常は別のリソースを使用する Holo テーマ ( ) を使用しています。

Holo テーマでは、デフォルトのアラート アイコンはandroid.R.id.ic_dialog_alert_holo_darkダーク テーマまたはandroid.R.id.ic_dialog_alert_holo_lightライト テーマ用です (この場合は、代わりにこのリソースを使用する必要があります)。

注: API レベル 11 以降android.R.attr.alertDialogIcon、現在のテーマのデフォルトの警告ダイアログ アイコンを参照する属性があります。コードでは、次のように使用できます。

case R.id.menu_quit:
    new AlertDialog.Builder(this)
    .setIconAttribute(android.R.attr.alertDialogIcon)
    .setTitle(R.string.confirm_title)
    .setMessage(R.string.confirm_text)
    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();    
        }

それでも、リソースを Android ソースからプロジェクトのリソースにコピーすることをお勧めします。これが、アイコンが常に同じに見えることを確認できる唯一の方法だからです。

于 2013-02-16T13:42:07.573 に答える