是否可以在自定义View类中创建另一个控件?

时间:2016-03-19 08:55:11

标签: android android-layout

是否可以在自定义View类中创建另一个控件。

我想在自定义类中添加图像和进度条。

View类中没有addView方法。

ViewGroup是唯一的选择吗?

2 个答案:

答案 0 :(得分:0)

创建自定义View类时,您可以为布局充气。在自定义View类构造函数中,只需调用inflate(context, R.layout.custom_layout, this);,在custom_layout中放入ProgressBar和ImageView。执行此操作时,自定义View会扩展相同的View类,即custom_layout的根。例如,如果custom_layout的根是LinearLayout,则扩展LinearLayout。

答案 1 :(得分:0)

public class CustomClass extends FrameLayout {
    Context c;
    ProgressBar progressBar;
    ImageView imageView;
    public CustomClass(Context context) {
       super(context);
       loadControls(context);
    }
    public CustomClass(Context context, AttributeSet attrs) {
        super(context, attrs);
        loadControls(context);
    }
    public CustomClass(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        loadControls(context);
    }
    public void loadControls(Context context)
    {
        c = context;
        progressBar = new ProgressBar(c, null, android.R.attr.progressBarStyleInverse);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT, Gravity.TOP | Gravity.LEFT);

        imageView = new ImageView(c);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        //imageView.setBackgroundColor(color.darker_gray);
       addView(imageView, params);
       params = new FrameLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
    addView(progressBar, params);
    progressBar.setVisibility(View.VISIBLE);
   }}