先上效果图:
项目主体:
只有3个类(自定义view,监听接口,调用)
监听接口(DialogListener):
public interface DialogListener {
/**
* 答案A点击事件
*/
public void onAClick();
/**
* 答案B点击事件
*/
public void onBClick();
/**
* 答案C点击事件
*/
public void onCClick();
/**
* 答案D点击事件
*/
public void onDClick();
}
继承dialog重写,自定义view
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.example.answergame.R;
/**
* 自定义答题dialog
* @author JZ
* @time 17/03/2021
*/
public class QuesDialog extends Dialog implements View.OnClickListener {
private DialogListener listener;
private TextView tv_question;
private TextView answer_A;
private TextView answer_B;
private TextView answer_C;
private TextView answer_D;
/**
* 赋值
*/
private String question;
private String answerA;
private String answerB;
private String answerC;
private String answerD;
public QuesDialog(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.question_dialog);
initDialog();
}
@Override
public void show() {
super.show();
setQuesAnsValues();
}
/**
* 设置监听
* @param listener
* @return
*/
public QuesDialog setOnDialogClickListener(DialogListener listener){
this.listener = listener;
return this;
}
/**
* 设置问题的值
* @param question
* @return
*/
public QuesDialog setQuestion(String question){
this.question = question;
return this;
}
/**
* 设置答案A的值
* @param answerA
* @return
*/
public QuesDialog setAnswerA(String answerA){
this.answerA = answerA;
return this;
}
/**
* 设置答案B的值
* @param answerB
* @return
*/
public QuesDialog setAnswerB(String answerB){
this.answerB = answerB;
return this;
}
/**
* 设置答案C的值
* @param answerC
* @return
*/
public QuesDialog setAnswerC(String answerC){
this.answerC = answerC;
return this;
}
/**
* 设置答案D的值
* @param answerD
* @return
*/
public QuesDialog setAnswerD(String answerD){
this.answerD = answerD;
return this;
}
/**
* 问题答案赋值
*/
private void setQuesAnsValues(){
//设置问题的值
if (!TextUtils.isEmpty(question)){
tv_question.setText(question);
}
//设置答案A的值
if (!TextUtils.isEmpty(answerA)){
answer_A.setText(answerA);
}
//设置答案B的值
if (!TextUtils.isEmpty(answerB)){
answer_B.setText(answerB);
}
//设置答案C的值
if (!TextUtils.isEmpty(answerC)){
answer_C.setText(answerC);
}
//设置答案D的值
if (!TextUtils.isEmpty(answerD)){
answer_D.setText(answerD);
}
}
/**
* 实例化view
*/
private void initDialog(){
tv_question = findViewById(R.id.tv_question);
answer_A = findViewById(R.id.answer_A);
answer_B = findViewById(R.id.answer_B);
answer_C = findViewById(R.id.answer_C);
answer_D = findViewById(R.id.answer_D);
answer_A.setOnClickListener(this);
answer_B.setOnClickListener(this);
answer_C.setOnClickListener(this);
answer_D.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id){
case R.id.answer_A:
if (listener != null){ listener.onAClick(); }
break;
case R.id.answer_B:
if (listener != null){ listener.onBClick(); }
break;
case R.id.answer_C:
if (listener != null){ listener.onCClick(); }
break;
case R.id.answer_D:
if (listener != null){ listener.onDClick(); }
break;
default:break;
}
}
}
最后就是调用:
public void showDialog(List<String> allData){
QuesDialog dialog = new QuesDialog(Jason.mainActivity);
dialog.setCanceledOnTouchOutside(false);//点击外部不消失
dialog.setQuestion(allData.get(4))
.setAnswerA(allData.get(0))
.setAnswerB(allData.get(1))
.setAnswerC(allData.get(2))
.setAnswerD(allData.get(3))
.setOnDialogClickListener(new DialogListener() {
@Override
public void onAClick() {
dialog.dismiss();//关闭dialog
}
@Override
public void onBClick() {
dialog.dismiss();
}
@Override
public void onCClick() {
dialog.dismiss();
}
@Override
public void onDClick() {
dialog.dismiss();
}
}).show();
}
就这样,一个简单的自定义答题dialog就完成了!
代码写得菜,请各位大佬见谅!!
最后,我是一个不断创造bug的菜鸟,谢谢大佬的浏览!biubiu~~~