默认警告对话框按钮的高度和宽度

3

有没有办法在Android框架中更改默认警报对话框按钮(取消和保存)的高度和宽度。

我的意思是在路径

frameworks/base/core/res/res

我不是在寻找自定义警报对话框。 我只需要减少标准警报对话框按钮的宽度... 有办法吗?..我已经抓狂两天了 :(

我尝试修改frameworks/base/core/res/res/layout/alert_dialog.xml文件,但我所做的更改并没有起作用。

下面是alert_dialog.xml文件代码:

<com.android.internal.widget.WeightedLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parentPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingTop="9dip"
    android:paddingBottom="3dip"
    android:paddingLeft="3dip"
    android:paddingRight="1dip"
    android:majorWeight="0.65"
    android:minorWeight="0.9">

    <LinearLayout android:id="@+id/topPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="54dip"
        android:orientation="vertical">
        <LinearLayout android:id="@+id/title_template"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:layout_marginTop="6dip"
            android:layout_marginBottom="9dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip">
            <ImageView android:id="@+id/icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:paddingTop="6dip"
                android:paddingRight="10dip"
                android:src="@drawable/ic_dialog_info" />
            <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
                style="?android:attr/textAppearanceLarge"
                android:singleLine="true"
                android:ellipsize="end"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
        <ImageView android:id="@+id/titleDivider"
            android:layout_width="match_parent"
            android:layout_height="1dip"
            android:visibility="gone"
            android:scaleType="fitXY"
            android:gravity="fill_horizontal"
            android:src="@android:drawable/divider_horizontal_dark" />
        <!-- If the client uses a customTitle, it will be added here. -->
    </LinearLayout>

    <LinearLayout android:id="@+id/contentPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical">
        <ScrollView android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="2dip"
            android:paddingBottom="12dip"
            android:paddingLeft="14dip"
            android:paddingRight="10dip"
            android:overScrollMode="ifContentScrolls">
            <TextView android:id="@+id/message"
                style="?android:attr/textAppearanceMedium"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dip" />
        </ScrollView>
    </LinearLayout>

    <FrameLayout android:id="@+id/customPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">
        <FrameLayout android:id="@+android:id/custom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="5dip"
            android:paddingBottom="5dip" />
    </FrameLayout>

    <LinearLayout android:id="@+id/buttonPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="4dip"
        android:orientation="vertical" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingTop="4dip"
            android:paddingLeft="2dip"
            android:paddingRight="2dip"
            android:useLargestChild="true">
            <LinearLayout android:id="@+id/leftSpacer"
                android:layout_weight="0.25"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:visibility="gone" />
            <Button android:id="@+id/button1"
                android:layout_width="0dip"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:maxLines="2"
                android:layout_height="wrap_content" />
            <Button android:id="@+id/button3"
                android:layout_width="0dip"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1"
                android:maxLines="2"
                android:layout_height="wrap_content" />
            <Button android:id="@+id/button2"
                android:layout_width="0dip"
                android:layout_gravity="right"
                android:layout_weight="1"
                android:maxLines="2"
                android:layout_height="wrap_content" />
            <LinearLayout android:id="@+id/rightSpacer"
                android:layout_width="0dip"
                android:layout_weight="0.25"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:visibility="gone" />
        </LinearLayout>
     </LinearLayout>
</com.android.internal.widget.WeightedLinearLayout>

如果你想要做到这一点,你必须创建自定义对话框。 - Nirav Ranpara
有没有默认布局文件可以进行一些更改? - Balwinder SIngh
抱歉纠正一下,它是自定义对话框。 - Monty
考虑在GitHub上使用'Material Dialogs'库:https://github.com/afollestad/material-dialogs - Mr-IDE
3个回答

3

无需创建自定义布局,试试这个方法:

创建 res/values/dimens.xml 文件:

<resources>

<dimen name="alertdialog_button_width">150dp</dimen>
<dimen name="alertdialog_button_height">150dp</dimen>

请添加以下代码片段:

</资源>

private void setButtonSize(AlertDialog dialog) {
    Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
    int height = getResources().getDimensionPixelSize(R.dimen.alertdialog_button_height);
    int width  = getResources().getDimensionPixelSize(R.dimen.alertdialog_button_width);

    button.setHeight(height);
    button.setWidth(width);
}

如果您正在使用 DialogFragment,请将 getDialog() 强制转换为 AlertDialog,并将其传递到 setButtonSize 中。您还可以指定第三个参数来传递按钮的 id(BUTTON_NEGATIVE、BUTTON_NEUTRAL 等)。

请注意:setButtonSize() 必须在 dialog.show() 之后调用。另外,您还可以使用 button.setPadding() 来减少按钮内部的填充,从而使更多的文本适合其中,而不会被裁剪。 - Mr-IDE

0

只有使用自定义对话框才能实现。因为我们不能使用默认的对话框。在自定义对话框中,您可以拥有警报对话框和自定义大小。


0
尝试像这样创建自己的布局XML并将其传递给您的对话框。
AlertDialog dialog = new AlertDialog.Builder(context);
    dialog.setContentView(R.layout.custom);//put this layout here
    dialog.setTitle("Title...");

请阅读此链接 http://www.mkyong.com/android/android-custom-dialog-example/

更新:-

<Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:onClick="showOk"
        android:text="Ok" 
        android:scaleX=".5"
        android:scaleY=".5"/>

在我的应用程序中,我是这样做的

        android:scaleX=".5"
        android:scaleY=".5"

所以你可以像这样设置按钮大小..根据需要增加和减小大小。


实际上,我需要更改DatePickerDialog的按钮(取消和保存)的大小。由于DatePickerDialog扩展了AlertDialog,所以我只需更改AlertDialog的布局。 - Balwinder SIngh
如果您想更改按钮大小,可以在XML文件中设置它们的大小。请先阅读此内容。 - Monty
我试一下... android:scaleX 是什么意思? - Balwinder SIngh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接