如何自定义不同样式的alertDialog按钮

时间:2014-07-18 11:01:14

标签: android dialog alertdialog

我试图以不同方式自定义警报对话框的两个按钮。通过在样式中使用android:layout,我更改了对话框的默认布局。我将此参数重定向到我的项目中的布局,其中包含与AlertDialog布局完全相同的源代码。但是在执行应用程序时,由于NullPointerExceptoin

,应用程序崩溃了

Style.xml

<style name="AppTheme" parent="android:Theme.Holo">
    <!-- Customize your theme here. -->
    <item name="android:alertDialogStyle">@style/test_style</item>
    <item name="android:alertDialogTheme">@style/test_style</item>
</style>

<style name="test_style" >
    <item name="android:layout">@layout/view_dialog_base</item>
</style>

view_dialog_base.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
/*
** Copyright 2010, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->

<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:orientation="vertical">

<LinearLayout android:id="@+id/topPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <View android:id="@+id/titleDividerTop"
        android:layout_width="match_parent"
        android:layout_height="2dip"
        android:visibility="gone"
        android:background="@android:color/holo_blue_light" />
    <LinearLayout android:id="@+id/title_template"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical|start"
        android:minHeight="@dimen/alert_dialog_title_height"
        android:layout_marginStart="16dip"
        android:layout_marginEnd="16dip">
        <ImageView android:id="@+id/icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingEnd="8dip"
            android:src="@null" />
        <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
            style="?android:attr/windowTitleStyle"
            android:singleLine="true"
            android:ellipsize="end"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAlignment="viewStart" />
    </LinearLayout>
    <View android:id="@+id/titleDivider"
        android:layout_width="match_parent"
        android:layout_height="2dip"
        android:visibility="gone"
        android:background="@android:color/holo_blue_light" />
    <!-- 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"
    android:minHeight="64dp">
    <ScrollView android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipToPadding="false">
        <TextView android:id="@+id/message"
            style="?android:attr/textAppearanceMedium"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingStart="16dip"
            android:paddingEnd="16dip"
            android:paddingTop="8dip"
            android:paddingBottom="8dip"/>
    </ScrollView>
</LinearLayout>

<FrameLayout android:id="@+id/customPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:minHeight="64dp">
    <FrameLayout android:id="@+android:id/custom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</FrameLayout>

<LinearLayout android:id="@+id/buttonPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="@dimen/alert_dialog_button_bar_height"
    android:orientation="vertical"
    android:divider="?android:attr/dividerHorizontal"
    android:showDividers="beginning"
    android:dividerPadding="0dip">
    <LinearLayout
        style="?android:attr/buttonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layoutDirection="locale"
        android:measureWithLargestChild="true">
        <Button android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_gravity="start"
            android:layout_weight="1"
            android:maxLines="2"
            style="?android:attr/buttonBarButtonStyle"
            android:textSize="14sp"
            android:minHeight="@dimen/alert_dialog_button_bar_height"
            android:layout_height="wrap_content" />
        <Button android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"
            android:maxLines="2"
            style="?android:attr/buttonBarButtonStyle"
            android:textSize="14sp"
            android:minHeight="@dimen/alert_dialog_button_bar_height"
            android:layout_height="wrap_content" />
        <Button android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_gravity="end"
            android:layout_weight="1"
            android:maxLines="2"
            android:minHeight="@dimen/alert_dialog_button_bar_height"
            style="?android:attr/buttonBarButtonStyle"
            android:textSize="14sp"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

崩溃时获得的logcat消息是

java.lang.NullPointerException
        at     com.android.internal.app.AlertController.setupContent(AlertController.java:502)
        at com.android.internal.app.AlertController.setupView(AlertController.java:395)
        at com.android.internal.app.AlertController.installContent(AlertController.java:241)
        at android.app.AlertDialog.onCreate(AlertDialog.java:337)
        at android.app.Dialog.dispatchOnCreate(Dialog.java:361)
        at android.app.Dialog.show(Dialog.java:262)

0 个答案:

没有答案