我正在制作一个android应用程序,我想在应用程序的每个布局上都放一个设置按钮。当我按下设置按钮时,会弹出一个自定义对话框,我可以访问应用程序设置。我遇到的问题是,我想在某些类中引用1个方法(对我来说哪一个都无关紧要)。我已经在我的布局XML中使用了include,像这样:
<include android:id="@+id/settingsButton"
layout="@layout/settingsbuttonlayout"/>
settingsbuttonlayout.xml文件看起来像这样:
<?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="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/root_vg">
<ImageButton
android:layout_width="50dp"
android:layout_height="50dp" app:srcCompat="@drawable/settingsicon"
android:id="@+id/settings_dialog"
android:cropToPadding="true"
android:adjustViewBounds="false" android:scaleType="fitCenter"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.133"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_bias="0.123"
android:clickable="true"
android:focusable="true"
android:background="@drawable/customdialog" android:onClick= "showSettings"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
您可以看到在这个布局中定义了一个onclick。然而(据我所知)这意味着我需要相同的"showsettings"。方法在每个布局类中。我怎么能解决这个问题,所以我应该只写"showSettings"方法一次又可以参考一下吗?这是showSettings方法:
public void showSettings(View v){
Dialog dialog = new Dialog(this, R.style.DialogStyle);
dialog.setContentView(R.layout.settings_dialog);
dialog.getWindow().setBackgroundDrawableResource(R.drawable.dialogbackground);
Button btnClose = dialog.findViewById(R.id.close_settings);
btnClose.setOnClickListener(view -> dialog.dismiss());
dialog.show();}
PS:我是一个制作应用程序和GUI的新手。我还没有在学校里学过,我只是自己弄清楚一切,所以如果这是一些直接或愚蠢的问题,我很抱歉:)
您可以从调用showSettings的settings_dialog中删除onClick属性,接下来创建一个Utility.java文件,您可以在其中将函数设置为静态
public static void showSettings(View v){
Dialog dialog = new Dialog(this, R.style.DialogStyle);
dialog.setContentView(R.layout.settings_dialog);
dialog.getWindow().setBackgroundDrawableResource(R.drawable.dialogbackground);
Button btnClose = dialog.findViewById(R.id.close_settings);
btnClose.setOnClickListener(view -> dialog.dismiss());
dialog.show();}
现在,在你想调用这个方法的任何类中,只要写入
Button settingsButton = (Button) findViewById(R.id.settingsButton);
settingsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Utility.showSettings(v);
}
});
在搜索了更多之后,我发现了以下内容:无论我想从哪个类打开对话框,我都必须这样写:
SettingsDialog.showSettings(this);
在我的SettingsDialog类中,我有以下内容:
public class SettingsDialog {
static void showSettings(Context context) {
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.settings_dialog);
Dialog.getWindow().setBackgroundDrawableResource(R.drawable.dialogbackground);
}
dialog.show();}
}