扩展AlertDialogs在Android中(在哪里可以找到例子,如何获得称号和按钮)可以找到、如何获得、称号、按钮

2023-09-05 10:00:34 作者:古风

我一直在寻找了很多关于如何正确地延长AlertDialogs并获得预期的行为的例子,但我很难找到。

在谷歌犯规的文档真的说多任。

是的,我知道我可以使用一个AlertDialog.Builder致力打造最公共的事情,但由于某些原因,我想创建自己的AlertDialogs(我有,我想包含在单独的Java文件,其中一个原因code )。

我创建了我PausDialog.java(见下文code),它显示了,但我无法得到的标题的或任何的按钮的(正,负等),以显示在对话。看到这样的画面:

所以, 问题1:我在哪里可以找到关于如何正确扩展AlertDialogs以及如何使用它们此后好,干净,有用的例子

问题2:为什么我不能看到标题,或使用自定义AlertDialog以下任何按钮

PausDialog.java

 封装测试;

进口android.app.Activity;
进口android.app.AlertDialog;
进口android.content.Context;
进口android.content.DialogInterface;
进口android.os.Handler;
进口android.os.SystemClock;
进口android.text.Editable;
进口android.text.TextWatcher;
进口android.view.Gravity;
进口android.view.MotionEvent;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.view.Window;
进口android.view.WindowManager;
进口android.view.inputmethod.InputMethodManager;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.TextView;
进口android.widget.Toast;

公共类PausDialog扩展AlertDialog
{

    保护PausDialog(上下文的背景下)
    {
        超(背景下,R.style.DialogTheme);

    }

    @覆盖
    保护无效的onCreate(android.os.Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        的setContentView(R.layout.paus);
        WindowManager.LayoutParams PARAMS = getWindow()的getAttributes()。
        params.gravity = Gravity.TOP;

        最后的EditText ED1 =(EditText上)findViewById(R.id.editTextPausArea);
        最后的EditText ED2 =(EditText上)findViewById(R.id.EditTextPausTimeFrom);
        最后的EditText ED3 =(EditText上)findViewById(R.id.EditTextPausTimeTo);

        TextView的TV1 =(TextView中)findViewById(R.id.textViewPausArea);
        tv1.setText(LanguageHandler.GetString(区域));
        TV1 =(TextView中)findViewById(R.id.textViewPausTime);
        tv1.setText(LanguageHandler.GetString(时间));

        SET按钮(DialogInterface.BUTTON_POSITIVE,积极,
            新OnClickListener(){
                @覆盖
                公共无效的onClick(DialogInterface对话,诠释它){

                    INT fromArea = 0;
                    INT放在fromtime = 0;
                    INT TOTIME = 0;

                    尝试
                    {
                        fromArea =的Integer.parseInt(ed1.getText()的toString());
                        放在fromtime =的Integer.parseInt(ed2.getText()的toString());
                        TOTIME =的Integer.parseInt(ed3.getText()的toString());

                    }
                    赶上(例外五)
                    {
                        // TODO失败
                    }
                }
            });

        SET按钮(DialogInterface.BUTTON_NEGATIVE,消极,
                新OnClickListener(){
                    @覆盖
                    公共无效的onClick(DialogInterface对话,诠释它){
                        // 做一点事
                    }
                });
    }
}
 

MainActivity.java ,调用PausDialog:

  PausDialog PD =新PausDialog(MainActivity.this);
pd.show();
 

我PausDialog,paus.xml布局:

 < XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout
  的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
  机器人:layout_width =FILL_PARENT
  机器人:layout_height =FILL_PARENT
  机器人:weightSum =1>
    < RelativeLayout的安卓重力=顶机器人:layout_height =200dp机器人:layout_weight =0.11机器人:layout_width =304dp>
        < TextView的Andr​​oid的:机器人:ATTR / textAppearanceMediumlayout_alignParentLeft =真正的机器人:文本=Område机器人:layout_width =WRAP_CONTENT机器人textAppearance =机器人:ID =@ + ID / textViewPausArea机器人:layout_height =WRAP_CONTENT机器人:layout_alignParentTop =真正的机器人:layout_marginLeft =17dp机器人:layout_marginTop =18dp>< / TextView的>
        < EditText上安卓layout_alignBaseline =@ + ID / textViewPausArea机器人:ID =@ + ID / editTextPausArea机器人:layout_width =80dp机器人:layout_alignBottom =@ + ID / textViewPausArea机器人:inputType =数字机器人:layout_height =WRAP_CONTENT机器人:layout_toRightOf =@ + ID / textViewPausArea机器人:layout_marginLeft =17dp>
            < requestFocus的>< / requestFocus的>
        < /的EditText>
        < TextView的Andr​​oid的:机器人:ATTR / textAppearanceMedium文本=TID的android:layout_width =WRAP_CONTENT机器人textAppearance =机器人:layout_below =@ + ID / editTextPausArea机器人:ID =@ + ID / textViewPausTime 机器人:layout_height =WRAP_CONTENT机器人:layout_marginTop =30dp机器人:layout_alignLeft =@ + ID / textViewPausArea>< / TextView的>
        < EditText上安卓layout_alignBaseline =@ + ID / textViewPausTime机器人:ID =@ + ID / EditTextPausTimeFrom机器人:layout_width =80dp机器人:layout_alignBottom =@ + ID / textViewPausTime机器人:inputType =时间机器人:layout_height =WRAP_CONTENT机器人:layout_alignLeft =@ + ID / editTextPausArea>< /的EditText>
        < TextView的Andr​​oid版本:文本= - 机器人:layout_width =WRAP_CONTENT机器人:textAppearance =:机器人:ID =@ + ID / textView3机器人:layout_height =WRAP_CONTENT机器人:layout_alignBaseline机器人ATTR / textAppearanceMedium? =@ + ID / EditTextPausTimeFrom机器人:layout_alignBottom =@ + ID / EditTextPausTimeFrom机器人:layout_toRightOf =@ + ID / EditTextPausTimeFrom>< / TextView的>
        < EditText上机器人:ID =@ + ID / EditTextPausTimeTo机器人:layout_width =80dp机器人:inputType =时间的Andr​​oid版本:layout_height =WRAP_CONTENT机器人:layout_alignBaseline =@ + ID / textView3机器人:layout_alignBottom = @ + ID / textView3机器人:layout_toRightOf =@ + ID / textView3>< /的EditText>

    < / RelativeLayout的>

< / LinearLayout中>
 
Android studio怎么怎能代码模块中查找内容

解决方案

我得到了我的自定义AlertDialog使用一些工作类同此code。

首先让你的构造公开访问

 公共PausDialog(上下文的背景下)
 

然后你可以简单地实例并显示为这样:

  PauseDialog newDialog =新PauseDialog(本);
newDialog.setTitle(我的对话);
newDialog.setButton(OK,..​​.); //插入您的onClick实现
newDialog.setButton2(取消,...); //插入您的onClick实现
newDialog.Show();
 

I have been looking a lot for examples on how to correctly extend AlertDialogs and get the expected behaviour, but I can hardly find any.

The docs on google doesnt really say much either.

Yes, I know I can use a AlertDialog.Builder to build the most commons things, but for some reasons I want to create my own AlertDialogs (I have code that I want contained in separate java files for one reason).

I have created my PausDialog.java (see code below), it shows up but I am unable to get the title or any of the buttons (positive, negative etc) to show in the Dialog. See this picture:

So, question 1: where can I find good, clean and useful examples on how to correctly extend AlertDialogs and how to use them thereafter

question 2: why can I not see the title or any buttons using the custom AlertDialog below?

PausDialog.java

package Test;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.SystemClock;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class PausDialog extends AlertDialog 
{

    protected PausDialog(Context context) 
    {
        super(context, R.style.DialogTheme);

    }

    @Override
    protected void onCreate(android.os.Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.paus);
        WindowManager.LayoutParams params = getWindow().getAttributes();  
        params.gravity = Gravity.TOP;

        final EditText ed1= (EditText) findViewById(R.id.editTextPausArea);
        final EditText ed2= (EditText) findViewById(R.id.EditTextPausTimeFrom);
        final EditText ed3= (EditText) findViewById(R.id.EditTextPausTimeTo);

        TextView tv1 = (TextView)findViewById(R.id.textViewPausArea);
        tv1.setText(LanguageHandler.GetString("AREA"));
        tv1 = (TextView)findViewById(R.id.textViewPausTime);
        tv1.setText(LanguageHandler.GetString("TIME"));

        setButton(DialogInterface.BUTTON_POSITIVE, "Positive",
            new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                    int fromArea = 0;
                    int fromTime = 0;
                    int toTime = 0;

                    try
                    {
                        fromArea = Integer.parseInt(ed1.getText().toString());
                        fromTime = Integer.parseInt(ed2.getText().toString());
                        toTime = Integer.parseInt(ed3.getText().toString());

                    }
                    catch(Exception e)
                    {
                        // TODO fail
                    }                       
                }
            });

        setButton(DialogInterface.BUTTON_NEGATIVE, "Negative",
                new OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // Do something
                    }
                });
    }
}

MainActivity.java, calling the PausDialog:

PausDialog pd = new PausDialog(MainActivity.this);
pd.show();

The layout for my PausDialog, paus.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:weightSum="1">
    <RelativeLayout android:gravity="top" android:layout_height="200dp" android:layout_weight="0.11" android:layout_width="304dp">
        <TextView android:layout_alignParentLeft="true" android:text="Område" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/textViewPausArea" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginLeft="17dp" android:layout_marginTop="18dp"></TextView>
        <EditText android:layout_alignBaseline="@+id/textViewPausArea" android:id="@+id/editTextPausArea" android:layout_width="80dp" android:layout_alignBottom="@+id/textViewPausArea" android:inputType="number" android:layout_height="wrap_content" android:layout_toRightOf="@+id/textViewPausArea" android:layout_marginLeft="17dp">
            <requestFocus></requestFocus>
        </EditText>
        <TextView android:text="Tid" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_below="@+id/editTextPausArea" android:id="@+id/textViewPausTime" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:layout_alignLeft="@+id/textViewPausArea"></TextView>
        <EditText android:layout_alignBaseline="@+id/textViewPausTime" android:id="@+id/EditTextPausTimeFrom" android:layout_width="80dp" android:layout_alignBottom="@+id/textViewPausTime" android:inputType="time" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editTextPausArea"></EditText>
        <TextView android:text=" - " android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/textView3" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/EditTextPausTimeFrom" android:layout_alignBottom="@+id/EditTextPausTimeFrom" android:layout_toRightOf="@+id/EditTextPausTimeFrom"></TextView>
        <EditText android:id="@+id/EditTextPausTimeTo" android:layout_width="80dp" android:inputType="time" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textView3" android:layout_alignBottom="@+id/textView3" android:layout_toRightOf="@+id/textView3"></EditText>    

    </RelativeLayout>

</LinearLayout>

解决方案

I got my custom AlertDialog to work using something similiar to this code.

First make your constructor publicly accessible

public PausDialog(Context context)

Then you can simply instantiate and show it as so:

PauseDialog newDialog = new PauseDialog(this);
newDialog.setTitle("My Dialog");
newDialog.setButton("OK", ...); // Insert your onClick implementation
newDialog.setButton2("Cancel", ...); // Insert your onClick implementation
newDialog.Show();