Common Clickable Header for All Activities in Android

后端 未结 2 2049
面向向阳花
面向向阳花 2020-12-09 13:13

I have an application with a common Header in all layouts. I want that whenever the user clicks at the the ImageView with id btn_home, the app will go back to a

2条回答
  •  醉梦人生
    2020-12-09 13:37

    You can make a custom component out of your header and define 'onClick()' in it. For example, make a new class Header that would extend a RelativeLayout and inflate your header.xml there. Then, instead of tag you would use . No code duplication and the header becomes totally reusable.

    UPD: Here's some code examples

    header.xml:

    
        
        
        

    activity_with_header.xml:

    
        
        
    
    

    Header.java:

    public class Header extends RelativeLayout {
    public static final String TAG = Header.class.getSimpleName();
    
    protected ImageView logo;
    private TextView label;
    private Button loginButton;
    
    public Header(Context context) {
        super(context);
    }
    
    public Header(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    public Header(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    
    public void initHeader() {
            inflateHeader();
    }
    
    private void inflateHeader() {
        LayoutInflater inflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.header, this);
        logo = (ImageView) findViewById(R.id.logo);
        label = (TextView) findViewById(R.id.label);
        loginButton = (Button) findViewById(R.id.login);
    }
    

    ActivityWithHeader.java:

    public class ActivityWithHeader extends Activity {
    private View mCreate;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_with_header);
    
        Header header = (Header) findViewById(R.id.header);
        header.initHeader();
        // and so on
    }
    }
    

    In this example, Header.initHeader() can be moved inside Header's constructor, but generally this method provides a nice way to pass on some useful listeners. Hope this will help.

提交回复
热议问题