我一直在使用复合组件成功。我面临一个小问题,并想知道是否有快速解决方案:
我需要一个自定义搜索栏,我已经把它作为一个样式/主题,它是一个非常详细的,所以我宁愿不通过代码复制它。所有搜索栏都是以编程方式创建的,作为更复杂块的一部分,并且不能更改此选项。
有没有办法,仅使用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);
}
}
答案 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"/>