Android 膨胀xml以替换非视图组

Android 膨胀xml以替换非视图组,android,layout,widget,custom-controls,inflate,Android,Layout,Widget,Custom Controls,Inflate,我已经成功地使用复合组件一段时间了。我面临一个小问题,不知道是否有一个快速的解决方案: 我需要一个定制的seekbar,我已经把它作为一个样式/主题,它是一个非常精细的样式/主题,所以我不想通过代码复制它。所有seekbar都是作为更复杂的块的一部分以编程方式创建的,不能更改这一点 有没有一种方法可以创建一个只使用Seekbar的XML,并应用这种样式,将这个XML“膨胀”成一个只扩展Seekbar的复合类 膨胀函数只接受视图组,但它们的“replaceroot”版本也可以很好地用于普通视图,这

我已经成功地使用复合组件一段时间了。我面临一个小问题,不知道是否有一个快速的解决方案:

我需要一个定制的seekbar,我已经把它作为一个样式/主题,它是一个非常精细的样式/主题,所以我不想通过代码复制它。所有seekbar都是作为更复杂的块的一部分以编程方式创建的,不能更改这一点

有没有一种方法可以创建一个只使用Seekbar的XML,并应用这种样式,将这个XML“膨胀”成一个只扩展Seekbar的复合类

膨胀函数只接受视图组,但它们的“replaceroot”版本也可以很好地用于普通视图,这正是我所需要的

提前谢谢

public class SeekBarYellow extends SeekBar {

    public SeekBarYellow(Context context) {
        super(context);
        construct_programmatically(context);
    }
    private void construct_inflating(Context context) {
        // how do I inflate a <SeekBar android:style=xxxx android ...>
        // into here? (R.layout.seekbar_yellow)
    }

    // i'd like to avoid this, by inflating R.layout.seekbar_yellow
    private void construct_programmatically(Context context) {
        Resources r=context.getResources();
        this.setThumb(r.getDrawable(R.drawable.scrubber_control_selector_holo_dark));
        this.setProgressDrawable(r.getDrawable(R.drawable.scrubber_progress_horizontal_holo_dark));
        this.setIndeterminateDrawable(r.getDrawable(R.drawable.scrubber_progress_horizontal_holo_dark));
        this.setMinimumHeight(13);
        this.setMinimumWidth(13);
        this.setThumbOffset(16);
        this.setPadding(16,0,16,0);
    }
}
public类SeekBarYellow扩展了SeekBar{
公共SeekBarYellow(上下文){
超级(上下文);
以编程方式构造_(上下文);
}
私有void构造\u膨胀(上下文){
//如何给汽车充气
//进入这里?(右布局,黄色)
}
//我想通过放大R.layout.seekbar_黄色来避免这种情况
以编程方式构造私有void_(上下文){
Resources r=context.getResources();
this.setThumb(r.getDrawable(r.drawable.scruber\u control\u selector\u holo\u dark));
这个.setProgressDrawable(r.getDrawable(r.drawable.Scruber_progress_horizontal_holo_dark));
这个.setUndeterminatedRavable(r.getDrawable(r.drawable.Scruber\u progress\u horizontal\u holo\u dark));
此设置的最小高度(13);
此设置最小宽度(13);
这是设置拇指偏移量(16);
这个.setPadding(16,0,16,0);
}
}

将其放入布局文件夹中的seekbar_yellow.xml文件中,并使用
充气器充气(R.layout.seekbar_yellow,null)


如果您的seekbar覆盖了一个“onDraw”方法,并且其所有功能都正常工作,那么您可以创建一个XML视图,方法是创建一个XML文件,并将“com.yourpack.yourapp.yoursekbar”作为视图的类:然后膨胀XML seekbar seekbar只是股票seekbar,但我希望它具有不同的资产集(主题)。我可以(并且已经)扩展Seekbar,将只包含Seekbar和Style属性的布局膨胀到自身中,但是失败了,因为膨胀函数只接受视图组:(你能为你的seekbar发布代码吗?谢谢你的回答!但是,很遗憾,我不能使用Inflater.inflate,因为它需要一个视图组作为目标,seekbar不是视图组而是普通视图。在这种情况下,用线性布局包装它。布局包装并不便宜,你要添加3000行代码和一个附加层。这个问题是为了发现是否有可能膨胀非视图组!有可能,我试过了,我不知道你为什么说不可能,你可以从它的父布局膨胀seekbar,这很好,但是如果你扩展类,我找不到一种方法来膨胀视图,替换它本身,我的意思是,使扩展类如此自包含它将负责膨胀布局,而不是它的父级。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  //<--- add this part
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation = "vertical">   
    <SeekBar 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminateDrawable="@drawable/scrubber_progress_horizontal_holo_dark"
        android:minHeight="13dp"
        android:minWidth="13dp"
        android:paddingBottom="0dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="0dp"
        android:progressDrawable="@drawable/scrubber_progress_horizontal_holo_dark"
        android:thumb="@drawable/scrubber_control_selector_holo_dark"
        android:thumbOffset="16dp" />

</LinearLayout>
<include layout="@layout/seekbar_yellow"/>