在Android中显示自定义对话框的活动

时间:2016-09-07 06:35:17

标签: android dialog android-alertdialog

我正在开发一款Android应用。在我的应用程序中,我想在对话框中显示数据。基本上,我想在单击按钮时在对话框中显示Activity。我知道如何将Activity显示为对话框。请看下面我当前如何将对象显示为对话框。

我在Activity中设置了AndroidManifest

<activity
    android:configChanges="orientation|screenSize"
    android:name=".MakeCommentActivity"
    android:label="Comment"
    android:theme="@android:style/Theme.Holo.Light.Dialog" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

所以当我打开活动时。它显示为如下对话框。

enter image description here

正如您在屏幕截图中看到的,上面代码的问题是我无法完全控制设计。我的意思是我不能按我的意愿设置对话框的背景颜色。我会根据设备改变。我不能改变对话的主题。此外,我无法删除对话框的标题等。

请看一下

enter image description here

与上面的截图相似,我将完全控制设计。我可以在标题中添加图标。我可以设置我想要的任何主题等等。

所以我能想到的是使用带有自定义视图的警告对话框。但是如果我这样做,代码就不会干净整洁,因为所有的逻辑和代码都将放在父活动中。不在不同的活动中。

所以我的问题是如何打开Activity对话框,可以在设计中完全自定义?如果无法完全自定义,使用自定义视图的警告对话框是个好主意?因为我会在Facebook上显示评论。用户也可以发表评论。

5 个答案:

答案 0 :(得分:3)

您实际在做的是,您只是在改变活动的主题。 实现目标的最佳方法是创建custom view Dialog

//Here you inflate your design (xml layout)
View view = getLayoutInflater().inflate(R.layout.your_view, null);
//Here you can get any component of that layout (ex: textView)
TextView yourTextView = view.findViewById(R.id.your_textview_id);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(view);
    AlerdDialog alert = builder.create();
    alert.show();

这样你可以按照自己的意愿控制它

答案 1 :(得分:1)

除了具有透明背景的活动之外,这些看似美丽的警报对话通常不是警报性的。正确放置Onclicklisteners(例如,单击透明背景将关闭活动)。因此,与自定义alertdialog

相比,设计这些活动更容易

答案 2 :(得分:1)

我有一个主题类型为Dialog的{​​{1}}。它很容易定制,是的,当您将登录放在另一个类中时,代码变得更清晰。

所以我想建议你一些事情。首先要删除intent-filter。我实际上并不知道为什么使用intent-filter,但无论如何,看起来并不是非常必要。

<activity
    android:configChanges="orientation|screenSize"
    android:name=".MakeCommentActivity"
    android:label="Comment"
    android:theme="@android:style/Theme.Holo.Light.Dialog" >
</activity>

作为对话框的Activity的布局非常重要。您需要将layout_heightlayout_width设置为match_parent,以检查是否可以获得自定义行为。

您提到的关于Activity标签的另一件事,可以setTitle从您onCreate的{​​{1}}功能轻松更改Activity

这是我的DialogActivity例如

public class DialogActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);

        setTitle("My custom title");
    }
}

这里使用的布局是

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@android:color/white"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_margin="@dimen/activity_horizontal_margin"
        android:background="@android:color/black"
        android:layout_height="200dp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:background="@android:color/black" />

</LinearLayout>

答案 3 :(得分:0)

你可以使用AlertDialog基本上可以使用Android AlertDialog来显示带有OK和Cancel按钮的对话框消息。它可用于中断并询问用户他/她选择继续或停止。

Android AlertDialog由三个区域组成:标题内容区域操作按钮。如果您不需要,可以留下操作按钮。

AlertDialog.Builder builder = new AlertDialog.Builder(this);  
//Setting message manually and performing action on button click 

        builder.setMessage("Do you want to close this application ?")  
            .setCancelable(false)  
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int id) {  
                finish();  
                }  
            })  
            .setNegativeButton("No", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int id) {  
                //  Action for 'NO' Button  
                dialog.cancel();  
             }  
            });  

       //Creating dialog box  
        AlertDialog alert = builder.create();  
        //Setting the title manually  
        alert.setTitle("AlertDialogExample");  
        alert.show();  

这将以这种方式显示输出。 enter image description here

答案 4 :(得分:0)

最好使用AlertDialog。因为如果按主题完成,那么对于不同版本的设备,它的外观将会改变。