The following code shows how to Create custom view from FrameLayout.
Main Activity Java code
import android.app.Activity; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; /*from w w w .j a va 2 s .c o m*/ import android.os.Bundle; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Point; import android.util.AttributeSet; import android.view.View; public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextImageButton myView = new TextImageButton(this); myView.setText("Text"); myView.setImageResource(); setContentView(myView); } } class TextImageButton extends FrameLayout { private ImageView imageView; private TextView textView; public TextImageButton(Context context) { this(context, null); } public TextImageButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TextImageButton(Context context, AttributeSet attrs, int defaultStyle) { super(context, attrs, android.R.attr.buttonStyle); imageView = new ImageView(context, attrs, defaultStyle); textView = new TextView(context, attrs, defaultStyle); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER); this.addView(imageView, params); this.addView(textView, params); if(imageView.getDrawable() != null) { textView.setVisibility(View.GONE); imageView.setVisibility(View.VISIBLE); } else { textView.setVisibility(View.VISIBLE); imageView.setVisibility(View.GONE); } } public void setText(CharSequence text) { textView.setVisibility(View.VISIBLE); imageView.setVisibility(View.GONE); textView.setText(text); } public void setImageResource(int resId) { textView.setVisibility(View.GONE); imageView.setVisibility(View.VISIBLE); imageView.setImageResource(resId); } public void setImageDrawable(Drawable drawable) { textView.setVisibility(View.GONE); imageView.setVisibility(View.VISIBLE); imageView.setImageDrawable(drawable); } }