我想定义一个客户搜索栏,如下所述,但是如何?

时间:2016-04-18 02:51:04

标签: android seekbar

我想自定义搜索栏以满足我的需求:

拇指只能放在四个固定位置。例如,如果我将搜索条的最大属性设置为120,则四个固定位置为0,40,80 120。 此外,我想要指示器告诉人们当前所选位置的方式。所以我这样做:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/ll_id"
        android:paddingLeft="10dp">
        <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="small"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="middle"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/tv3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="big"/>
        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/tv4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="extrabig"/>
    </LinearLayout>
    <SeekBar android:id="@+id/sk"
        android:layout_below="@+id/ll_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="120"
        android:paddingLeft="0dp"
        android:paddingRight="0dp"
        android:layout_marginRight="0dp"/>
</RelativeLayout>


public class CustomSeekBar extends FrameLayout {

    private SeekBar  sk;
    private OnWhichSelected selected;

    public CustomSeekBar(Context context) {  
        this(context, null);  
    }  

    public CustomSeekBar(Context context, AttributeSet attrs) {  
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.customseekbar_layout, this, true);
        sk  = (SeekBar)  this.findViewById(R.id.sk);
        sk.setProgress(0);
        callbackhelp(Which.SMALL);
        sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub
                int seekProgress = seekBar.getProgress();  
                if(seekProgress<seekBar.getMax()/6){
                    callbackhelp(Which.SMALL);
                    seekBar.setProgress(0);
                }else if(seekProgress>=seekBar.getMax()/6 && seekProgress<3*(seekBar.getMax()/6)){
                    callbackhelp(Which.MIDDLE);
                    seekBar.setProgress(seekBar.getMax()/3);
                }else if(seekProgress>=3*(seekBar.getMax()/6) && seekProgress<5*(seekBar.getMax()/6)){
                    callbackhelp(Which.LARGE);
                    seekBar.setProgress(4*(seekBar.getMax()/6));
                }else if(seekProgress>=5*(seekBar.getMax()/6)){
                    callbackhelp(Which.EX_LARGE);
                    seekBar.setProgress(seekBar.getMax());
                }
            }
        });
    }


    private void callbackhelp(Which which){
        if(selected!=null){
            selected.onSeleted(which);
        }
    }

    public enum Which{  
        SMALL,
        MIDDLE,
        LARGE,
        EX_LARGE
    }

    public interface OnWhichSelected{
        void onSeleted(Which which);
    }
}

现在的结果是这样的:
结果
enter image description here

你可以看到拇指没有对准中间位于&#34;中间&#34;指示器,如何解决这个问题,以便拇指可以在不同设备上的每个指示器下对齐中心?感谢

1 个答案:

答案 0 :(得分:0)

使用以下代码替换您的线性布局,它可能会对您有所帮助。

<LinearLayout
        android:id="@+id/ll_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="10dp">

        <TextView
            android:id="@+id/tv1"
            android:gravity="center"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="small" />

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tv2"
            android:gravity="center"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="middle" />

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tv3"
            android:layout_width="0dp"
            android:gravity="center"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="big" />

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tv4"
            android:gravity="center"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="extrabig" />
    </LinearLayout>