android: caixa de diálogo AlertDialog

A implementação da caixa de diálogo Android precisa usar  o objeto de instância AlertDialog.Builder 

Então usamos o seguinte método deste objeto

Aqui estão alguns métodos comumente usados

setTitle(): Definir o título   
setview(): Definir uma página personalizada (a página personalizada será descrita em detalhes abaixo) 
setPositiveButton(): Geralmente usado para determinar a função 
setNegativeButton(): Geralmente usado para cancelar a função 
setOnShowListener(): A caixa de diálogo aparece 
setOnCancelListener( ): a caixa de diálogo desaparece

show(): Usado para exibir a caixa de diálogo   Nota: Sem esta frase sua caixa de diálogo não será exibida


Geralmente, quando personalizamos a página, não escrevemos tudo em uma página, resultando em confusão de código

Muitas vezes é necessário criar uma nova página. Aqui, não há necessidade de criar uma nova atividade, apenas uma página de layout de layout é necessária

Aqui simplesmente escreva um

 código mostra como abaixo:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/ed_ip"
        android:layout_width="269dp"
        android:layout_height="83dp"
        android:layout_marginTop="28dp"
        android:layout_marginEnd="68dp"
        android:ems="10"
        android:gravity="center"
        android:hint="请输入IP,例如192.168.1.1"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/ed_port"
        android:layout_width="261dp"
        android:layout_height="86dp"
        android:layout_marginTop="120dp"
        android:layout_marginEnd="72dp"
        android:ems="10"
        android:gravity="center"
        android:hint="请输入端口,例如8080"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Então, como adicionamos ao AlertDialog?

Defina uma página personalizada usando setview():

Exibir view=LayoutInflater.from(IntroductoryActivity.this).inflate(R.layout.ipconfig,null); 
ip = view .findViewById(R.id.edit_ip); 
port = view .findViewById(R.id.edit_port); 
setview(visualizar);

Nota: Isso é diferente do nosso método usual de assumir os controles, devemos adicionar os controles view.Plus

           Caso contrário, um erro de ponteiro nulo será relatado

Todos os exemplos de código estão anexados abaixo (este exemplo é uma página de guia, que envolve os pontos de conhecimento de armazenamento de dados, você pode ver meus outros blogs)

 

MainActivity: código padrão, sem função
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

Arquivo de layout correspondente a MainActivity: também o código padrão 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

GuideActivity : a interface principal da página do guia 

package com.example.myapplication;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import java.util.ArrayList;
import java.util.List;


public class GuideActivity extends AppCompatActivity {

    private ViewPager vp;
    private List<ImageView> imageViews;
    private int[] imgs = {R.drawable.y0, R.drawable.y1, R.drawable.y2, R.drawable.y3};
    private Button btn, btn2;
    private EditText ed_ip, ed_port;
    private ImageView[] dotViews;
    private GuideAdapter adapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_guide);
        vp = findViewById(R.id.guide_vp);
        btn = findViewById(R.id.guide_btn);
        btn2 = findViewById(R.id.guide_btn2);

        //初始化图片
        initImgs();
        //初始化底部圆点指示器
        initDots();
        adapter = new GuideAdapter(imageViews);
        vp.setAdapter(adapter);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
                editor.putString("isFirst", "1");
                editor.apply();
                Intent intent = new Intent(GuideActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                View view = LayoutInflater.from(GuideActivity.this).inflate(R.layout.ipconfig, null);
                ed_ip = view.findViewById(R.id.ed_ip);
                ed_port = view.findViewById(R.id.ed_port);

                AlertDialog.Builder builder = new AlertDialog.Builder(GuideActivity.this);
                SharedPreferences sp = getSharedPreferences("demo1", MODE_PRIVATE);
                ed_ip.setText(sp.getString("ip", ""));
                ed_port.setText(sp.getString("port", ""));
                builder.setTitle("端口设置")
                        .setView(view)

                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                SharedPreferences.Editor editor = sp.edit();
                                editor.putString("ip", ed_ip.getText().toString());
                                editor.putString("port", ed_port.getText().toString());
                                editor.apply();
                            }
                        })
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(GuideActivity.this, "取消端口设置", Toast.LENGTH_SHORT).show();
                            }
                        })
                        .show();


            }
        });
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                for (int i = 0; i < dotViews.length; i++) {
                    if (position == i) {
                        dotViews[i].setImageResource(R.drawable.guide_selector);
                    } else {
                        dotViews[i].setImageResource(R.drawable.guide_white);
                    }

                    if (position == dotViews.length - 1) {
                        btn.setVisibility(View.VISIBLE);
                        btn2.setVisibility(View.VISIBLE);
                    } else {
                        btn.setVisibility(View.GONE);
                        btn2.setVisibility(View.GONE);
                    }
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

    }

    /**
     * 初始化底部圆点指示器
     */
    private void initDots() {
        LinearLayout layout = findViewById(R.id.guide_ll);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20);
        params.setMargins(10, 0, 10, 0);
        dotViews = new ImageView[imgs.length];
        for (int i = 0; i < imageViews.size(); i++) {
            ImageView imageView = new ImageView(this);
            imageView.setLayoutParams(params);
            imageView.setImageResource(R.drawable.guide_white);
            if (i == 0) {
                imageView.setImageResource(R.drawable.guide_selector);
            } else {
                imageView.setImageResource(R.drawable.guide_white);
            }
            dotViews[i] = imageView;
            final int finalI = i;
            dotViews[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    vp.setCurrentItem(finalI);
                }
            });
            layout.addView(imageView);
        }
    }

    /**
     * 初始化图片
     */
    private void initImgs() {
        ViewPager.LayoutParams params = new ViewPager.LayoutParams();
        imageViews = new ArrayList<ImageView>();
        for (int i = 0; i < imgs.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setLayoutParams(params);
            imageView.setImageResource(imgs[i]);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageViews.add(imageView);
        }
    }


}

activity_guide.xml: arquivo de layout de página de guia 

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


    <androidx.viewpager.widget.ViewPager
        android:id="@+id/guide_vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <LinearLayout
        android:id="@+id/guide_ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="100dp"
        android:orientation="horizontal" />

    <Button
        android:id="@+id/guide_btn"
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:layout_above="@id/guide_ll"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:background="#2990E3"
        android:text="开始体验"
        android:textColor="#ffffff"
        android:visibility="invisible" />
    <Button
        android:id="@+id/guide_btn2"
        android:layout_width="100dp"
        android:layout_height="40dp"
      android:layout_alignRight="@id/guide_vp"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:background="#2990E3"
        android:text="端口设置"
        android:textColor="#ffffff"
        android:visibility="invisible"/>

</RelativeLayout>

GuideAdapter: adaptador de página de guia 

package com.example.myapplication;



import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;

import java.util.List;

public class GuideAdapter extends PagerAdapter {

    private final List<ImageView> imageViews;

    public GuideAdapter(List<ImageView> imageViews) {
        this.imageViews= imageViews;
    }

    /**
     * 获取当前要显示对象的数量
     */
    @Override
    public int getCount() {
        return imageViews.size();
    }

    /**
     * 判断是否用对象生成界面
     */
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
        return view== o;
    }

    /**
     * 从ViewGroup中移除当前对象
     */
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView(imageViews.get(position));

    }
    /**
     * 当前要显示的对象
     */
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        container.addView(imageViews.get(position));
        return imageViews.get(position);
    }

}


ipconfig.xml: interface de configuração de IP 

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/ed_ip"
        android:layout_width="269dp"
        android:layout_height="83dp"
        android:layout_marginTop="28dp"
        android:layout_marginEnd="68dp"
        android:ems="10"
        android:gravity="center"
        android:hint="请输入IP,例如192.168.1.1"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/ed_port"
        android:layout_width="261dp"
        android:layout_height="86dp"
        android:layout_marginTop="120dp"
        android:layout_marginEnd="72dp"
        android:ems="10"
        android:gravity="center"
        android:hint="请输入端口,例如8080"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 guide_white.xml: ponto branco não selecionado

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size android:height="20dp" android:width="20dp"/>
    <solid android:color="#fff"/>
</shape>

guide_selector.xml : selecione o ponto azul

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size android:height="20dp" android:width="20dp"/>
    <solid android:color="#0687ED"/>
</shape>

As 4 fotos na página do guia podem ser adicionadas por você 

Acho que você gosta

Origin blog.csdn.net/weixin_63987141/article/details/129715660
Recomendado
Clasificación