创建可在许多活动之间共享的布局代码

时间:2015-12-16 08:29:13

标签: android android-layout popover code-reuse

1

这是用于确认的弹出窗口的屏幕截图。我在很多方面使用这种类型的弹出窗口,因此创建了关闭按钮X。我在所有弹出窗口的布局中都包含了关闭按钮xml,但我希望它可以重复使用(共享)。

我不知道如何在android中以编程方式创建按钮,因此我可以保存到一个公共文件并用于所有活动。例如,我可以创建closeButton.java,然后在任意布局上包含关闭按钮,其上有一个常见的点击监听器。

3 个答案:

答案 0 :(得分:1)

Android Views,即使是xml文件中提到的那些,也只是Java类。您可以创建CloseButton.javaextends Button,将逻辑放在那里,然后在所有xml布局中使用此类,就像任何其他View一样:

<com.example.project.by.nicky.CloseButton
    android:id="@+id/someId"
    android:layout_width=""
    android:layout_height="" />

答案 1 :(得分:1)

解决这个问题的一种方法是创建一个扩展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
            }
        });
    }
}

答案 2 :(得分:0)

public class MainActivity extends Activity {

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



    // use MyPopUpWindow as below no need to create layout in each activity
    MyPopUpWindow popup = new MyPopUpWindow(this);
    popup.setContentView(your_layout);
    popup.setConfirmationListener(new ConfirmationListener() {

        @Override
        public void onConfirm() {
            // TODO Auto-generated method stub

        }
    });
}

}

MyPopUpWindow Class

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;
}
}