9

SDK 14 以降、優先される順序は、以前の OK / キャンセルではなく、キャンセル / OK です。それが良いアイデアか悪いアイデアかという議論には参加しません。これは私の質問の主題ではありません。

問題は、ADK が次の Lint を提供することで、SDK >= 14 のデバイスに新しい順序を使用することを推奨していることです。

レイアウトは、API >= 14 に対して間違ったボタン順序を使用します: 反対の順序で layout-v14/layout.xml ファイルを作成します: キャンセル ボタンは左側にある必要があります (以前は「@string/send | キャンセル」でしたが、「キャンセル | @」にする必要があります)。文字列/送信")

OK、私はそれに固執します。これは私にとって問題ではありません。ユーザーの迷惑にならないように、アドバイスに従わなければならないことを理解しています。

しかし、ここに問題があります... ICSで実行されている私のSamsung Galaxy S IIでは、システムインターフェイス自体が新しい順序に従っていないようです。いくつかのスクリーンショットの例を次に示します。

ここに画像の説明を入力

順番は古いです。私は自分の電話に公式の ICS バージョンを使用していることに注意してください (カスタム ROM ではありません)。そして、順序は私のGalaxy Tab 2(公式のICSも実行しています)でも同じです。一部のダイアログでは、順序が正しい (キャンセル/OK) 唯一の違いはテーマです (Holo テーマを使用するダイアログには新しい順序があり、その他のダイアログには古い順序があります)。これは、設定 (システム日付を設定するため) と Holo を使用したアプリからの DatePickerDialog のスクリーンショットです。

ここに画像の説明を入力

これはかなり気がかりです。ボタンの順序はテーマ関連であり、バージョン関連ではないようです。それとも、Samsung が Android のデザイン パターンに従っていないだけなのでしょうか?

アクティビティ(OK/キャンセルボタンがある場合)も同じ順序に従うべきだと思います。ここでも、私の携帯電話では、カレンダーのイベントの作成アクティビティの順序が間違っています (アクティビティは穴のテーマを使用していません)。

ここに画像の説明を入力

とにかく、Honeycomb のデバイス用のアプリで Holo テーマを使用するので、SDK>=14 の新しい順序を維持します。この問題を理解したいだけです。

ありがとう。

4

4 に答える 4

5

はい、ボタンの入れ替えは非常にいらいらし、OK ボタンよりもキャンセルを押してしまいます。しかし、これはあなたができることです。独自のカスタムダイアログボックスを作成して、どのボタンがどこに来るかを制御できるようにするか、ユーザーが読んで理解できるようにします。プログラマーとして私たちがしなければならない唯一のことは、キャンセルが押されたときに実際にキャンセルされ、OK ではありません! Ok-Cancel が交換された理由をさらに明らかにするために、これは、Apple も Ok-Cancel に従っているため、Apple との特許侵害を回避するためでした。したがって、Cancel-Ok を入れ替えても侵害にはなりません (ばかげていますが、Google Millions を節約できます!)

于 2012-10-03T09:04:15.060 に答える
3

Samsung は、Touchwiz のルック アンド フィールを Android 2 から Android 4.x デバイスに維持するという奇妙な考えを持っています。個人的には、Samsung 4.x ROM で最も厄介なのは、ICS/JB の UI の方がはるかに優れていることです。ダイアログ(あなたが述べたように2.xボタン配置を使用)とタブ(はるかに優れた4.xタブではなく2.xタブを使用)で最も顕著です。

SGS3 (リリースされたばかりの Note 2 も想定) のような新しい 4.x のみのデバイスでさえ、Android 2 UI コンポーネントのばかげた移植がまだ行われています。

これはエンド ユーザーにとっては問題ではなく、多くのデバイスを使用して違いに気付く開発者にとっては厄介なことだと思います。

于 2012-10-03T09:29:47.013 に答える
3

はい、ボタンの順序はバージョンではなくテーマに関連しているようです。レイアウト "alert_dialog.xml" との違いとして、"alert_dialog_holo.xml" は "button1" (正) を右に、"button2" (負) を左に配置します。

レイアウトは com.android.internal.app.AlertController によって決定されます。

public AlertController(Context context, DialogInterface di, Window window) {

    TypedArray a = context.obtainStyledAttributes(null,
            com.android.internal.R.styleable.AlertDialog,
            com.android.internal.R.attr.alertDialogStyle, 0);

    mAlertDialogLayout = a.getResourceId(com.android.internal.R.styleable.AlertDialog_layout,
            com.android.internal.R.layout.alert_dialog);

テーマの属性「alertDialogStyle」は、「AlertDialog」スタイルを参照します。これは、AlertDialog のテーマを記述する属性のセットです。属性「layout」は、レイアウト リソースを指すことができます。それ以外の場合は、layout/alert_dialog が使用されます。

Android ソースでは、「Theme.Holo」が「AlertDialog.Holo」を使用し、「AlertDialog.Holo」が「layout/alert_dialog_holo」を参照しているのに対し、「Theme」はレイアウトを含まず、コードの値にデフォルト設定されている「AlertDialog」を使用していることがわかります。

themes.xml:

<style name="Theme">
    <item name="alertDialogStyle">@android:style/AlertDialog</item>

<style name="Theme.Holo">
    <item name="alertDialogStyle">@android:style/AlertDialog.Holo</item>

スタイル.xml:

<style name="AlertDialog">
    …
</style>

<style name="AlertDialog.Holo" parent="AlertDialog">
    …
    <item name="layout">@android:layout/alert_dialog_holo</item>
    …
</style>

実際に使用されるテーマは、デバイスのデフォルトで定義されているようです。

themes_device_defaults.xml:

<style name="Theme.DeviceDefault" parent="Theme.Holo" >
    <item name="alertDialogStyle">@android:style/AlertDialog.DeviceDefault</item>

style_device_defaults.xml:

<style name="AlertDialog.DeviceDefault" parent="AlertDialog.Holo">
</style>

Philio が説明したように、Samsung は単にルック アンド フィールを維持するために、ここで何か他のものを設定していると思います。

于 2013-02-05T11:27:23.113 に答える
0

おそらく、GalaxyS2のROMに変更を加えたのはSamsungです。カスタマイズに関しては少し悪名高い気がします。過去には、SGS2、xCoverなどのROMのコアBluetooth操作でいくつかの問題が発生していました。したがって、Samsungデバイスでのみ発生しても驚かないでしょう:)

于 2012-10-03T09:20:59.940 に答える