更改自定义 AlertDialog 中的布局元素属性 Class
Changing layout element attributes in Custom AlertDialog Class
所以我正在构建一个非常基本的应用程序。我正在使用警告对话框向用户显示他们是否赢了。我所做的是我创建了这个 class :
public class WinLoseDialog {
Activity activity;
AlertDialog dialog;
TextView text;
public WinLoseDialog(Activity activity) {
this.activity = activity;
}
public void startDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
LayoutInflater inflater = activity.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.win_lose_layout, null));
builder.setCancelable(false);
dialog = builder.create();
dialog.show();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
public void dismissDialog() {
dialog.dismiss();
}
}
我想做的是使这个 class 尽可能可重用。对于我的所有游戏片段,我希望能够将其用于警告对话框,以防用户获胜或失败。
为此,我需要能够更改 textView 上的文本,定义如下(在 win_lose_layout 中):
<TextView
android:id="@+id/alertText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/alertDialogText"
tools:text="hi" />
我的 lottie 视图的 原始分辨率 定义为(在 win_lose_layout 中):
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
app:lottie_autoPlay="true" />
而且我需要才能从我使用此 WinLoseDialog class.
的片段 中更改以上两个
我坚持的事情 是我如何在其中使用 findViewById 之类的东西,以便我能够在我的 class 中附加 TextView 对象到 win_lose_layout 中的那个,这样我就可以为文本 (TextView) 创建一个 setter 并在我的片段中使用它。同样对于 lottie View
您必须像这样更改这 2 个视图。
public class WinLoseDialog {
Activity activity;
AlertDialog dialog;
TextView text;
LottieAnimationView lottieView;
public WinLoseDialog(Activity activity) {
this.activity = activity;
}
public WinLoseDialog startDialog(String textStr, String lottieFilePath) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
LayoutInflater inflater = activity.getLayoutInflater();
View view = inflater.inflate(R.layout.win_lose_layout, null);
builder.setView(view);
builder.setCancelable(false);
text = view.findViewById(R.id.alertText);
lottieView = view.findViewById(R.id.lottie);
//You can update your text & Lottie animation view here with the new string and new Lottie path you got from arguments.
if (!TextUtils.isEmpty(textStr))
text.settext(textStr);
if (!TextUtils.isEmpty(lottieFilePath))
//Set your animation file path here.
dialog = builder.create();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return this;
}
public void dismissDialog() {
dialog.dismiss();
}
}
现在,当您想在不进行更改的情况下起诉对话框时,只需:
WinLoseDialog dialog = new WinLoseDialog(activity);
dialog.startDialog(null, null);
dialog.show()
有了变化:
WinLoseDialog dialog = new WinLoseDialog(activity);
dialog.startDialog("This is new Text", lottiePath);
dialog.show()
所以我正在构建一个非常基本的应用程序。我正在使用警告对话框向用户显示他们是否赢了。我所做的是我创建了这个 class :
public class WinLoseDialog {
Activity activity;
AlertDialog dialog;
TextView text;
public WinLoseDialog(Activity activity) {
this.activity = activity;
}
public void startDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
LayoutInflater inflater = activity.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.win_lose_layout, null));
builder.setCancelable(false);
dialog = builder.create();
dialog.show();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
public void dismissDialog() {
dialog.dismiss();
}
}
我想做的是使这个 class 尽可能可重用。对于我的所有游戏片段,我希望能够将其用于警告对话框,以防用户获胜或失败。
为此,我需要能够更改 textView 上的文本,定义如下(在 win_lose_layout 中):
<TextView
android:id="@+id/alertText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/alertDialogText"
tools:text="hi" />
我的 lottie 视图的 原始分辨率 定义为(在 win_lose_layout 中):
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
app:lottie_autoPlay="true" />
而且我需要才能从我使用此 WinLoseDialog class.
的片段 中更改以上两个我坚持的事情 是我如何在其中使用 findViewById 之类的东西,以便我能够在我的 class 中附加 TextView 对象到 win_lose_layout 中的那个,这样我就可以为文本 (TextView) 创建一个 setter 并在我的片段中使用它。同样对于 lottie View
您必须像这样更改这 2 个视图。
public class WinLoseDialog {
Activity activity;
AlertDialog dialog;
TextView text;
LottieAnimationView lottieView;
public WinLoseDialog(Activity activity) {
this.activity = activity;
}
public WinLoseDialog startDialog(String textStr, String lottieFilePath) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
LayoutInflater inflater = activity.getLayoutInflater();
View view = inflater.inflate(R.layout.win_lose_layout, null);
builder.setView(view);
builder.setCancelable(false);
text = view.findViewById(R.id.alertText);
lottieView = view.findViewById(R.id.lottie);
//You can update your text & Lottie animation view here with the new string and new Lottie path you got from arguments.
if (!TextUtils.isEmpty(textStr))
text.settext(textStr);
if (!TextUtils.isEmpty(lottieFilePath))
//Set your animation file path here.
dialog = builder.create();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return this;
}
public void dismissDialog() {
dialog.dismiss();
}
}
现在,当您想在不进行更改的情况下起诉对话框时,只需:
WinLoseDialog dialog = new WinLoseDialog(activity);
dialog.startDialog(null, null);
dialog.show()
有了变化:
WinLoseDialog dialog = new WinLoseDialog(activity);
dialog.startDialog("This is new Text", lottiePath);
dialog.show()