0

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

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

有没有办法只使用 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);
    }
}
4

1 回答 1

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"/>
于 2013-06-19T05:58:00.317 回答