1. ホーム
  2. アンドロイド

[解決済み】Android:タイトルのないダイアログを作成する方法は?

2022-04-02 09:46:48

質問

Androidでカスタムダイアログを生成しようとしています。 このようなダイアログを作成します。

dialog = new Dialog(this);
dialog.setContentView(R.layout.my_dialog);

ダイアログのタイトルを除いてはすべてうまくいきます。 ダイアログのタイトルを設定しなくても、ダイアログのポップアップにはダイアログの位置に空白のスペースがあります。

ダイアログのこの部分を隠す方法はないでしょうか?

AlertDialogで試したのですが、レイアウトがうまく設定されていないようです。

LayoutInflater inflater = 
    (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.map_dialog, null);

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);

// dialog = new Dialog(this);
// dialog.setContentView(R.layout.map_dialog);

dialog = builder.create();

((TextView) dialog.findViewById(R.id.nr)).setText(number);

このコードを使用すると、最後の行でnull Pointer Exceptionが発生します。 ダイアログはnullではないので、取得しようとしたTextViewは存在しません。

ダイアログのコンストラクタを使用する部分のコメントを解除すると、すべてがうまくいきますが、ダイアログレイアウトの上のタイトルがうまくいきません。

どうすればいいですか?

ダイアログのタイトルを隠すことができます。

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);


この回答の以前のバージョン、複雑になりすぎている。

を使用する必要があります。 AlertDialog . については、Android Developer's サイトに良い解説があります。 カスタムダイアログ .

簡単にまとめると、公式サイトからコピーした以下のようなコードでこれを行うのです。これは、カスタムレイアウトファイルを受け取り、それを膨らませ、基本的なテキストとアイコンを与えて、それを作成します。そして、それを次のように表示します。 alertDialog.show() .

AlertDialog.Builder builder;
AlertDialog alertDialog;

Context mContext = getApplicationContext();
LayoutInflater inflater = (LayoutInflater)
        mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog,
        (ViewGroup) findViewById(R.id.layout_root));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);

builder = new AlertDialog.Builder(mContext);
builder.setView(layout);
alertDialog = builder.create();

コメントを受けて

というIDのTextViewを想定しています。 nr で膨らませているViewの中に View view = inflater.... . もしそうなら、ほんの少し変更する必要があります。 dialog.findView... それを view.findView... . そうしたら、dialog.show()を使うか、あるいはわざわざbuilder.create()をしなくてもbuilder.show()を使うのを忘れないようにしましょう。