2

我想显示一个带有 2 行文本的 AlertDialog 作为其消息。第二行文本的字体应该比第一行小,加下划线,我希望在点击时收到通知。此外,我希望 AlertDialog 看起来类似于通过调用 AlertDialog.Builder.setMessage 构建的。

自定义布局可以使用下面的代码完成,但结果看起来与使用 AlertDialog.Builder.setMessage 创建的对话框非常不同。附加的两个图像是由此代码创建的对话框,并分别通过调用 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();

在此处输入图像描述

在此处输入图像描述

编辑

好的,我无法使用以下代码产生合理的结果。问题在于第二行的文本大小被硬编码为 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

在您的清单中将一个活动定义为主题对话框,然后您可以将该活动设计为看起来像您想要的任何内容,它将显示为一个对话框(正如您所愿,活动下方为灰色)...

<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 回答