Android 创建可在多个活动之间共享的布局代码
这是用于确认的弹出窗口的屏幕截图。我以多种方式使用这种类型的弹出窗口,因此创建了关闭按钮Android 创建可在多个活动之间共享的布局代码,android,android-layout,popover,code-reuse,Android,Android Layout,Popover,Code Reuse,这是用于确认的弹出窗口的屏幕截图。我以多种方式使用这种类型的弹出窗口,因此创建了关闭按钮X。我在所有弹出窗口的布局中都包含close按钮xml,但我希望它能被重用(共享) 我不知道如何在android中通过编程创建按钮,这样我就可以保存到一个公共文件并用于所有活动。例如,我可以创建closeButton.java,然后在任何布局上包含close按钮,并在其上有一个公共单击侦听器。Android视图,即使是xml文件中提到的视图,也只是java类。您可以创建一个CloseButton.java类,
X
。我在所有弹出窗口的布局中都包含close按钮xml,但我希望它能被重用(共享)
我不知道如何在android中通过编程创建按钮,这样我就可以保存到一个公共文件并用于所有活动。例如,我可以创建closeButton.java,然后在任何布局上包含close按钮,并在其上有一个公共单击侦听器。Android
视图
,即使是xml文件中提到的视图,也只是java类。您可以创建一个CloseButton.java
类,该类扩展按钮
,将逻辑放入其中,然后在所有xml布局中使用该类,就像任何其他视图
:
<com.example.project.by.nicky.CloseButton
android:id="@+id/someId"
android:layout_width=""
android:layout_height="" />
解决这个问题的一个方法是创建一个服装视图,扩展android按钮或图像,这将是您的X按钮 而不是从视图的构造函数中注册click事件
class XButton extends ImageView{
public XButton(Context context) {
super(context);
init();
}
public XButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public XButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init(){
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do some thing
}
});
}
}
MyPopUpWindow类
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupWindow;
public class MyPopUpWindow extends PopupWindow {
private Button mCrossBtn;
private Button mConfirmationBtn;
private ConfirmationListener mConfirmationListener;
public MyPopUpWindow(Context ctx){
super(ctx);
}
@Override
public void setContentView(View contentView) {
super.setContentView(contentView);
mCrossBtn = contentView.findViewById(R.id.cross_button_id);
mCrossBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
MyPopUpWindow.this.dismiss();
}
});
mConfirmationBtn = contentView.findViewById(R.id.confirm_button_id);
mConfirmationBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(mConfirmationListener != null){
mConfirmationListener.onConfirm();
}
}
});
}
interface ConfirmationListener{
public void onConfirm();
}
public void setConfirmationListener(ConfirmationListener l) {
mConfirmationListener = l;
}
}
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupWindow;
public class MyPopUpWindow extends PopupWindow {
private Button mCrossBtn;
private Button mConfirmationBtn;
private ConfirmationListener mConfirmationListener;
public MyPopUpWindow(Context ctx){
super(ctx);
}
@Override
public void setContentView(View contentView) {
super.setContentView(contentView);
mCrossBtn = contentView.findViewById(R.id.cross_button_id);
mCrossBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
MyPopUpWindow.this.dismiss();
}
});
mConfirmationBtn = contentView.findViewById(R.id.confirm_button_id);
mConfirmationBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(mConfirmationListener != null){
mConfirmationListener.onConfirm();
}
}
});
}
interface ConfirmationListener{
public void onConfirm();
}
public void setConfirmationListener(ConfirmationListener l) {
mConfirmationListener = l;
}
}