1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| "ui";
function createElSwitch(checked, onChange) { var ctx = activity;
var TRACK_WIDTH = 150; var TRACK_HEIGHT = 80; var THUMB_DIAM = 76; var THUMB_MARGIN = (TRACK_HEIGHT - THUMB_DIAM) / 2; var thumbLeftClosed = THUMB_MARGIN; var thumbLeftOpened = TRACK_WIDTH - THUMB_MARGIN - THUMB_DIAM;
var container = new android.widget.FrameLayout(ctx); container.setLayoutParams( new android.view.ViewGroup.LayoutParams(TRACK_WIDTH, TRACK_HEIGHT) ); container.setClickable(true);
var track = new android.view.View(ctx); track.setLayoutParams(new android.widget.FrameLayout.LayoutParams(TRACK_WIDTH, TRACK_HEIGHT)); var trackBg = new android.graphics.drawable.GradientDrawable(); trackBg.setShape(android.graphics.drawable.GradientDrawable.RECTANGLE); trackBg.setCornerRadius(TRACK_HEIGHT / 2); if (checked) { trackBg.setColor(android.graphics.Color.parseColor("#409EFF")); } else { trackBg.setColor(android.graphics.Color.parseColor("#DCDFE6")); } track.setBackground(trackBg); container.addView(track);
var thumb = new android.view.View(ctx); var thumbParams = new android.widget.FrameLayout.LayoutParams(THUMB_DIAM, THUMB_DIAM); thumbParams.gravity = android.view.Gravity.CENTER_VERTICAL; if (checked) { thumbParams.leftMargin = thumbLeftOpened; } else { thumbParams.leftMargin = thumbLeftClosed; } thumb.setLayoutParams(thumbParams); var thumbBg = new android.graphics.drawable.GradientDrawable(); thumbBg.setShape(android.graphics.drawable.GradientDrawable.OVAL); thumbBg.setColor(android.graphics.Color.parseColor("#FFFFFF")); thumbBg.setStroke(1, android.graphics.Color.parseColor("#33000000")); if (android.os.Build.VERSION.SDK_INT >= 21) { thumb.setElevation(2); } thumb.setBackground(thumbBg); container.addView(thumb);
var isChecked = !!checked;
function updateSwitch(on) { isChecked = !!on; var td = track.getBackground(); if (td instanceof android.graphics.drawable.GradientDrawable) { td.setColor(android.graphics.Color.parseColor(isChecked ? "#409EFF" : "#DCDFE6")); } var lp = thumb.getLayoutParams(); lp.leftMargin = isChecked ? thumbLeftOpened : thumbLeftClosed; thumb.setLayoutParams(lp); }
container.setOnClickListener(function(v) { var newState = !isChecked; updateSwitch(newState); if (onChange) onChange(newState); });
container.isSwitchOn = function() { return isChecked; }; container.setSwitchOn = function(on) { updateSwitch(on); };
return container; }
ui.layout( <vertical padding="16" gravity="center"> <linear gravity="center_vertical"> <text text="消息通知" textSize="16sp" textColor="#303133" layout_weight="1" /> <frame id="switchContainer" w="auto" h="auto" /> </linear> </vertical> );
var mySwitch = createElSwitch(false, function(checked) { toast("状态:" + (checked ? "开启" : "关闭")); }); ui.switchContainer.addView(mySwitch);
|