2013-02-14 280 views
4

我在编辑我的问题,以便更好地理解我需要的内容,因为下面的回答并未给出适当的解决方案。所以,我必须做的是在底部使用中性按钮进行自定义警报对话框。这里是例如,它应该是什么样子:Android:带有自定义对话框和中性按钮的警报对话框

I have to make a dialog which looks like this

直到现在我一直在使用XML和改变活动android:theme="@android:style/Theme.Holo.Light.Dialog"使用的自定义对话框,这样我就可以得到的外观和感觉一样。这里是我的XML代码:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/dialog" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/login_prompt_header" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="15dp" 
     android:text="@string/login_prompt_rewards_header" 
     android:textSize="17sp" 
     android:textStyle="bold" > 
    </TextView> 

    <TextView 
     android:id="@+id/login_prompt_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/login_prompt_header" 
     android:layout_marginTop="5dp" 
     android:gravity="center_vertical|center_horizontal" 
     android:paddingLeft="18dp" 
     android:paddingRight="18dp" 
     android:text="@string/login_prompt_rewards_text" 
     android:textSize="15sp" > 
    </TextView> 

    <Button 
     android:id="@+id/log_in" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/login_prompt_text" 
     android:layout_centerHorizontal="true" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginTop="15dp" 
     android:background="@drawable/log_in" 
     android:contentDescription="@string/none" > 
    </Button> 

    <Button 
     android:id="@+id/create_account" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/log_in" 
     android:layout_centerHorizontal="true" 
     android:layout_gravity="center_horizontal" 
     android:layout_marginTop="10dp" 
     android:background="@drawable/create_account" 
     android:contentDescription="@string/none" > 
    </Button> 

</RelativeLayout> 

通过上述布局,我发现了以下结果:

Till now implemented

我现在面临的问题是:如何设置中性按钮自定义对话?我对此没有任何想法。如果您对我的问题有疑问,或者您无法理解该语言,请发表评论,以便我再次给您一个清晰的想法。帮助将不胜感激。

+0

你是如何能得到它绿色的按钮,使它看起来3D? – Si8 2013-08-15 13:57:41

+0

@ SiKni8我为此使用了自定义drawable。 – Anupam 2013-08-15 18:31:23

回答

11

创建自定义警告对话框像

public void messageDialog(String title, String message, final Context activity) { 

     final Dialog myDialog = new Dialog(activity); 
     myDialog.setContentView(R.layout.messagescreen); 
     myDialog.setTitle(title); 
     myDialog.setCancelable(false); 

     TextView text = (TextView) myDialog.findViewById(R.id.bidmessage); 
     text.setMovementMethod(ScrollingMovementMethod.getInstance()); 
     text.setText(message); 

     Button login = (Button) myDialog.findViewById(R.id.buttonlogin); 
     login.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

       myDialog.dismiss(); 


      } 
     }); 

     Button createAccount= (Button) myDialog.findViewById(R.id.buttoncreateaccount); 
     createAccount.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

       myDialog.dismiss(); 


      } 
     }); 


     myDialog.show(); 

    } 

其中R.layout.messagescreen是您的自定义创建的布局,为您在图像显示。试试这个,让我知道你是否面临任何问题。

+0

此解决方案不帮助我。我想要一个中性按钮也使用自定义布局来提醒对话框。你有什么想法吗? – Anupam 2013-02-15 05:58:48

+0

好朋友,您可以在此警报对话框中放置尽可能多的按钮。这些按钮可以在您的布局中实现 – 2013-02-15 06:05:35

+0

请参阅编辑的问题,我在问什么。顺便说一句,谢谢你的努力的朋友。 – Anupam 2013-02-15 06:07:53

2

Anupam,我知道你已经选择了一个答案,但我虽然可能会在我的2分钱中添加我如何做类似的事情。

我已经使用了AlertDialog而不是Dialog,它在被调用时浮在应用程序之上。

private void showLoginDialog() {   
    // layout and inflater 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View content = inflater.inflate(R.layout.dialog_settings, null); 

    AlertDialog.Builder dialog = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Light)); 
    dialog.setTitle(getString(R.string.title_settings_dialog)); 
    dialog.setView(content); 

    Button butLogin = (Button) content.findViewById(R.id.log_in); 
    butLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Do your Login stuff here or all another method 
      // does not close dialog 
     } 
    }); 

    Button butAccount = (Button) content.findViewById(R.id.create_account); 
    butAccount.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Do your Create Account stuff here or all another method 
      // does not close dialog 
     } 
    }); 

    dialog.setNegativeButton(R.string.skip, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // do nothing, just allow dialog to close 
     } 
    }); 

    dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 
     @Override 
     public void onCancel(DialogInterface dialog) { 
      // do nothing, just allow dialog to close 
      // this happens on back button getting hit 
     } 
    }); 

    dialog.show(); 
} 
+0

这是一个更正确的答案! - 但是,最好将Builder内的DialogFragment正确覆盖'onCreateDialog'方法。 使对话框成为一个单独的对象,并从活动中调用YourDialog.newInstance()。show(getFragmentManager(),YourDialog。标签); – Davidea 2015-06-08 08:36:13

+0

干杯,我会注意到,当我再次使用Davidea。 – Talung 2015-06-08 14:20:19

0

,你可以简单地设置这样的:

dialog.setNeutralButton("skip", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       //Your code 
      } 
     });