2

4.0より前のスタイルにしようとしているFragmentDialogので、4.0 より後のように見えます。

私は使用してActionBarSherlockいますが、アイスクリームサンドイッチの前に自分でスタイリングする必要があります.

私は次のような外観を取得したい:

ここに画像の説明を入力

しかし、私はこれを得ています:

ここに画像の説明を入力

したがって、基本的には画面全体を埋めたくないのです。

私はさまざまなスタイリングを試みましたが、すべて成功しませんでした。私を助けてくれる、または正しい方向に導いてくれる専門家がいることを願っています。

私のDialogFragment:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //TODO Style 2.3 to look like 4.0
        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
            setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Pre_Honeycomb_Holo_Dialog);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = null;
        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            view = inflater.inflate(R.layout.info_dialog_view, container);
        } else {
            view = inflater.inflate(R.layout.info_dialog_view_content, container);
            this.getDialog().setTitle(R.string.info_dialog_title);
        }
...

基本的にIce Cream Sandwich以前のタイトルレイアウトを構築していますが、コンテンツエリアは同じです。

私のholo_dialog_style:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Pre.Honeycomb.Holo.Dialog" parent="Theme.Sherlock.Light">
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@drawable/panel_bg_holo_light</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>
</resources>
4

2 に答える 2

5

これは、図書館があなたの味方である多くのケースの 1 つです。

Styled Dialogs for Androidを使用することをお勧めします。

次のようなダイアログを生成できます。 ダイアログの例

それを使用するには、まず Maven に追加する必要があります (使用している場合)。

<dependency>
    <groupId>eu.inmite.android.lib</groupId>
    <artifactId>android-styled-dialogs</artifactId>
    <version>1.0.1</version>
    <type>apklib</type>
</dependency>

Ant を使用している場合は、最新の jarをダウンロードするだけです。

次に、必要なテーマを使用するようにテーマを設定するだけです。アプリケーションのテーマに以下を追加します。

ホロライト

<item name="sdlDialogStyle">@style/DialogStyleLight.Custom</item>

ホロダーク

<item name="sdlDialogStyle">@style/DialogStyleDark.Custom</item>

次のスタイルを追加して、必要に応じてカスタマイズすることもできます。

<style name="DialogStyleLight.Custom">
    <!-- anything can be left out: -->
    <item name="titleTextColor">@color/dialog_title_text</item>
    <item name="titleSeparatorColor">@color/dialog_title_separator</item>
    <item name="messageTextColor">@color/dialog_message_text</item>
    <item name="buttonTextColor">@color/dialog_button_text</item>
    <item name="buttonSeparatorColor">@color/dialog_button_separator</item>
    <item name="buttonBackgroundColorNormal">@color/dialog_button_normal</item>
    <item name="buttonBackgroundColorPressed">@color/dialog_button_pressed</item>
    <item name="buttonBackgroundColorFocused">@color/dialog_button_focused</item>
    <item name="dialogBackground">@drawable/dialog_background</item>
</style>

それができたら、使い方はとても簡単です。

シンプルなメッセージと閉じるボタンのあるダイアログ

SimpleDialogFragment.createBuilder(this, getSupportFragmentManager()).setMessage(R.string.message).show();

タイトル、メッセージ、閉じるボタンのあるダイアログ

SimpleDialogFragment.createBuilder(this, getSupportFragmentManager()).setTitle(R.string.title).setMessage(R.string.message).show();

タイトル、メッセージ、および 2 つのボタンを含むダイアログ

SimpleDialogFragment.createBuilder(this, getSupportFragmentManager()).setTitle(R.string.title).setMessage(R.string.message).setPositiveButtonText(R.string.positive_button).setNegativeButtonText(R.string.negative_button).show();

追加の例については、いくつかのデモも利用できます。

于 2013-10-03T13:18:37.663 に答える
2

画面全体がいっぱいになるのを避けるために、DialogFragment の onStart メソッドで次のコードを使用できます。

@Override
public void onStart() {
    super.onStart();

    // safety check
    if (getDialog() == null)
        return;

    getDialog().getWindow().setLayout(width, height);

}

getDialog().getWindow().setLayout(width, height); で、目的の幅と高さをプログラムで設定します。方法。

次に、インフレートする xml レイアウト ファイル (R.layout.info_dialog_view) で、幅と高さを親と一致するように設定します。

于 2013-10-04T21:03:03.357 に答える