2

メッセージとして 2 行のテキストを含む AlertDialog を表示したいと思います。2 行目のテキストは 1 行目よりもフォント サイズを小さくし、下線を付けて、クリックされたときに通知を受け取る必要があります。また、AlertDialog.Builder.setMessage を呼び出して構築されたものと同様に AlertDialog を表示したいと考えています。

カスタム レイアウトは以下のコードで実現できますが、結果は AlertDialog.Builder.setMessage を使用して作成されたダイアログとは大きく異なります。添付されている 2 つの画像は、このコードと AlertDialog.Builder.setMessage の呼び出しによってそれぞれ作成されたダイアログです。

AlertDialog のデフォルト テーマを維持しながらカスタム レイアウトを使用する方法について何か提案はありますか?

    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);

    TextView tv1 = new TextView(this);
    tv1.setText("first line");

    TextView tv2 = new TextView(this);
    tv2.setText("second line");
    tv2.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv1.getTextSize() * .8f);
    tv2.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
    tv2.setOnClickListener(this);

    layout.addView(tv1);
    layout.addView(tv2);
    builder.setView(layout);

    builder.show();

ここに画像の説明を入力

ここに画像の説明を入力

編集

OK、以下のコードでは妥当な結果を生成できませんでした。これに関する問題は、2 行目のテキストサイズが 12 ディップにハードコードされていることですが、実際には最初の行のテキストサイズよりも比例して小さくしたいと思います - おそらく最初の行のテキストサイズの 80% です。これを達成する方法について何か提案はありますか?

(また、テキストの下線部分がクリックされたタイミングを判断するのは少し見にくいですが、それを理解できると思います)

    String text1 = "First line\n\n";
    String text2 = "Second line";

    SpannableString content = new SpannableString(text1 + text2);
    content.setSpan(new UnderlineSpan(), text1.length(), text1.length() + text2.length(), 0);
    content.setSpan(new AbsoluteSizeSpan(12, true), text1.length(), text1.length() + text2.length(), 0);

    AlertDialog.Builder builder= new AlertDialog.Builder(this);
    builder.setMessage(content);
    builder.show();

ここに画像の説明を入力

4

1 に答える 1

1

マニフェストで、アクティビティをテーマ Dialog として定義すると、そのアクティビティが好きなように見えるように設計でき、ダイアログとして表示されます (必要に応じて、下のアクティビティがグレー表示されます)...

<activity
            android:name=".MyDialog"
            android:label="@string/app_name"                 
            android:theme="@android:style/Theme.Holo.Dialog"
            >
            <intent-filter>
                <action android:name="com.my.package.DIALOG" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

ここで追加する唯一のもので、マニフェストにまだ含まれていないものは、アクティビティ ノードのテーマ属性であることに注意してください。

于 2012-07-18T21:15:03.200 に答える