膨胀xml以替换非视图组

时间:2013-06-18 01:36:53

标签: android layout widget custom-controls inflate

我一直在使用复合组件成功。我面临一个小问题,并想知道是否有快速解决方案:

我需要一个自定义搜索栏,我已经把它作为一个样式/主题,它是一个非常详细的,所以我宁愿不通过代码复制它。所有搜索栏都是以编程方式创建的,作为更复杂块的一部分,并且不能更改此选项。

有没有办法,仅使用Seekbar创建XML并应用此样式,将此xml“膨胀”为仅扩展Seekbar的复合类?

inflate函数只接受视图组,但它们的“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);
    }
}

1 个答案:

答案 0 :(得分:1)

将其放入布局文件夹中的seekbar_yellow.xml文件中,并使用inflater.inflate(R.layout.seekbar_yellow,null);

对其进行充气
<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>

所有这一切假设drawables在你的drawable文件夹中,如果它们在android drawable文件夹中你用@ android / drawable / nameofdrawable访问它们

您还可以使用

将此文件包含在其他xml文件中
<include layout="@layout/seekbar_yellow"/>