Android-PickerViewカスタム使用記録

住所

英語の日付

Android-PickerView英語Issuesはその月のコントロールはありません、誰かがそれにメソッドを投稿しました。継承WheelView

public class EnglishMonthWheelView extends WheelView {
    
    
    public EnglishMonthWheelView(Context context) {
    
    
        super(context);
    }
    public EnglishMonthWheelView(Context context, AttributeSet attrs) {
    
    
        super(context, attrs);
    }
    @Override
    protected String getContentText(Object item) {
    
    
        if (item == null || TextUtils.isEmpty(item.toString())) {
    
    
            return "";
        } else if (item instanceof IPickerViewData) {
    
    
            return ((IPickerViewData) item).getPickerViewText();
        } else if (item instanceof Integer) {
    
    
            //如果为整形则最少保留两位数.
            int value = (int) item;
            String month = null;
            switch (value) {
    
    
                case 1:
                    month = "Jan";
                    break;
                case 2:
                    month = "Feb";
                    break;
                case 3:
                    month = "Mar";
                    break;
                case 4:
                    month = "Apr";
                    break;
                case 5:
                    month = "May";
                    break;
                case 6:
                    month = "Jun";
                    break;
                case 7:
                    month = "Jul";
                    break;
                case 8:
                    month = "Aug";
                    break;
                case 9:
                    month = "Sep";
                    break;
                case 10:
                    month = "Oct";
                    break;
                case 11:
                    month = "Nov";
                    break;
                case 12:
                    month = "Dec";
                    break;
            }
            return month;
        }
        return item.toString();
    }
}

使用したものは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:background="@color/white">

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="wrap_content"
            android:layout_height="44dp"
            android:layout_alignParentTop="true"
            android:background="@android:color/transparent"
            android:padding="8dp"
            android:text="@string/canceled"
            android:textAllCaps="false"
            android:textColor="@color/color_cancel"
            android:textSize="14sp" />

        <Button
            android:id="@+id/tv_title_desc"
            android:layout_width="wrap_content"
            android:layout_height="44dp"
            android:layout_centerInParent="true"
            android:background="@android:color/transparent"
            android:gravity="center"
            android:textAllCaps="false"
            android:textColor="@color/colorPrimary"
            android:textSize="14sp"
            tools:text="请选择" />

        <Button
            android:id="@+id/btn_confirm"
            android:layout_width="wrap_content"
            android:layout_height="44dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:background="@android:color/transparent"
            android:padding="8dp"
            android:text="@string/confirm"
            android:textAllCaps="false"
            android:textColor="@color/colorPrimary"
            android:textSize="14sp" />

    </RelativeLayout>

    <!--此部分需要完整复制过去,删减或者更改ID会导致初始化找不到内容而报空-->
    <LinearLayout
        android:id="@+id/timepicker"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:background="@android:color/white"
        android:gravity="center"
        android:orientation="horizontal">
        <!--该控件就是上面处理过的,专门用来展示英文月-->
        <com.bigkoo.pickerview.view.EnglishMonthWheelView
            android:id="@+id/month"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <com.contrarywind.view.WheelView
            android:id="@+id/day"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />


        <com.contrarywind.view.WheelView
            android:id="@+id/year"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
        ...
    </LinearLayout>
</LinearLayout>
fun ContactFragment.selectBirthDatePV(mTargetView: YSelectTextView) {
    
    
    activity?.apply {
    
    
        KeyboardUtils.hideSoftInput(this) //影藏软键盘
    }
    var btnCancel: Button? = null
    var btnConfirm: Button? = null
    val selectedDate = Calendar.getInstance();
    val startDate = Calendar.getInstance();
    val endDate = Calendar.getInstance();
    startDate.set(1965, 0, 1);
    endDate.set(2004, 11, 31);
    selectedDate.set(1990, 0, 1);
    val mBirthDateTPV = TimePickerBuilder(activity, object : OnTimeSelectListener {
    
    
        override fun onTimeSelect(date: Date?, p1: View?) {
    
    
            date?.apply {
    
    
                val mDisplayData = this.dateToEnglishDateStr()// 将Date日期转为英文Date日期
                mTargetView.content = mDisplayData
            }
        }
    })
        .setLayoutRes(R.layout.layout_pickerview_item_timer) {
    
    
            btnCancel = it.findViewById<Button>(R.id.btn_cancel)
            btnConfirm = it.findViewById<Button>(R.id.btn_confirm)
            it.findViewById<TextView>(R.id.tv_title_desc).text =
                resources.getString(R.string.date_of_birth)
        }
        .setRangDate(startDate, endDate)
        .setDate(selectedDate)
        .setTextXOffset(0, 0, 0, 40, 0, -40)
        .setLabel("", "", "", "", "", "")//默认设置为年月日时分秒
        .isDialog(true)
        .setItemVisibleCount(17)
        .build()
    mBirthDateTPV.show()
    btnConfirm?.setOnClickListener {
    
    
        mBirthDateTPV.returnData()
        mBirthDateTPV.dismiss()
    }
    btnCancel?.setOnClickListener {
    
    
        mBirthDateTPV.dismiss()
    }
}

位置を調整するためのダイアログモード

アクティビティによりリターンキー操作が書き換えられ、PVが異なるフラグメントでポップアップします。このとき、リターンキーが書き換えられます。リターンキーを押してもPVを非表示にすることはできません。現時点では、ダイアログモードでこの問題に対処できます。さて、しかし現在、PVでダイアログレイアウトを使用したい場合は、下部のソースコードを変更する必要があります。ソースコードを読んで、BasePickerView.createDialog()で作成されたダイアログを見つけます。以下は変更されたcreateDialog( ) 方法。

public void createDialog() {
    
    
    if (dialogView != null) {
    
    
        mDialog = new Dialog(context, R.style.custom_dialog2);
        mDialog.setCancelable(mPickerOptions.cancelable);//不能点外面取消,也不能点back取消
        mDialog.setContentView(dialogView);
        Window dialogWindow = mDialog.getWindow();
        if (dialogWindow != null) {
    
    
            dialogWindow.setWindowAnimations(R.style.picker_view_slide_anim);
            dialogWindow.setGravity(Gravity.CENTER);//可以改成Bottom
        }
        // 手动设置Dialog样式的PickerView在屏幕底部,并且宽度为屏幕宽度,这样可以PickerView可以自动接管返回按键事件
        WindowManager.LayoutParams attributes = dialogWindow.getAttributes();
        attributes.width = WindowManager.LayoutParams.MATCH_PARENT;
        attributes.gravity = Gravity.BOTTOM;
        dialogWindow.setAttributes(attributes);
        mDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
    
    
            @Override
            public void onDismiss(DialogInterface dialog) {
    
    
                if (onDismissListener != null) {
    
    
                    onDismissListener.onDismiss(BasePickerView.this);
                }
            }
        });
    }
}

おすすめ

転載: blog.csdn.net/MoLiao2046/article/details/108579559