1) 纯色遮罩层: TvFocusStyler.install() 会把背景整体换成不透明的红→橙渐变作为
焦点/按下反馈, 而 prepareTvFocusableTree(window.decorView) 会遍历整棵树施加。
按钮/Tab/卡片需要该反馈, 但铺满屏幕或覆盖播放画面的「表面型」View 一旦被套上,
触摸一次(state_pressed)就会用纯色盖住整屏内容。
新增 TvFocusStyler.suppressFill(view, focusable) 显式排除:
- 播放触摸层 playerTouchOverlay(浮在播放画面上方, 主要元凶; 传 focusable=false
保持其 isFocusable=false, 不再抢遥控器焦点)
- 全屏播放容器 R.id.container、启动加载遮罩 databaseLoadingOverlay
- 手机点歌二维码浮层(首页右下 + 全屏右上)、全屏音量面板
- 原 preserveBackground 更名为 suppressFill(播放画面宿主/海报沿用)
同时 install() 对已标记的 View 直接跳过, 不再替调用方强制可聚焦。
2) App 音量默认 85%: 新增 KtvStore.DEFAULT_MUSIC_VOLUME 作为唯一来源,
KtvStore 字段默认值与 optInt 兜底、MainActivity.musicVolume 初值、
调音弹窗「默认」按钮(原 80)统一引用; 远程页面 assets/mobile 默认值同步为 85。
版本号 1.3.2 -> 1.3.3(versionCode 8 -> 9)。按约定本次不发布 Release, 仅本地打包测试。
76 lines
4.9 KiB
HTML
76 lines
4.9 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover">
|
||
<meta name="theme-color" content="#17052f">
|
||
<title>麦动 KTV 手机点歌</title>
|
||
<link rel="stylesheet" href="/mobile/app.css">
|
||
<link rel="stylesheet" href="/mobile/logo.css">
|
||
</head>
|
||
<body>
|
||
<div class="aurora aurora-one"></div><div class="aurora aurora-two"></div><div class="mesh"></div>
|
||
<div id="offline" class="offline hidden"><span></span>连接中断,正在重新连接…</div>
|
||
<div class="app-shell">
|
||
<header class="topbar">
|
||
<div class="brand">
|
||
<div class="brand-mark"><img src="/res/drawable-nodpi/ktv_logo.png" alt="麦动 KTV"></div>
|
||
<div><h1>麦动 <em>KTV</em></h1><p id="connection"><span></span>正在连接麦动 KTV…</p></div>
|
||
</div>
|
||
<button id="queueBadge" class="queue-badge" data-page="queue"><b>0</b><span>已点歌曲</span></button>
|
||
</header>
|
||
|
||
<main>
|
||
<section id="remote" class="page active">
|
||
<article class="hero-card">
|
||
<div class="hero-glow"></div><div class="album"><div class="disc"><span>♪</span></div></div>
|
||
<div class="hero-copy"><div class="eyebrow"><span class="playing-dot"></span>正在播放</div><h2 id="nowTitle">暂无歌曲</h2><p id="nowSinger">请先点一首喜欢的歌</p><div class="sound-wave"><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div></div>
|
||
</article>
|
||
|
||
<div class="controls">
|
||
<button data-action="replay"><span class="control-icon">↻</span><span>重唱</span></button>
|
||
<button id="playButton" class="primary" data-action="pause"><span class="control-icon">Ⅱ</span><span>暂停</span></button>
|
||
<button data-action="next"><span class="control-icon">›|</span><span>切歌</span></button>
|
||
</div>
|
||
|
||
<article class="glass-card audio-panel">
|
||
<div class="panel-title"><div><span class="tiny-icon">♪</span><b>声音控制</b></div><small>即时生效</small></div>
|
||
<div class="seg"><button id="accompany" data-vocal="accompany"><span>伴</span>伴唱</button><button id="original" data-vocal="original"><span>原</span>原唱</button></div>
|
||
<label><span><i class="volume-icon">♪</i>音乐音量</span><b><em id="musicValue">85</em>%</b><input id="musicVolume" type="range" min="0" max="100" value="85"></label>
|
||
<label class="mic-hw"><span><i class="volume-icon mic">●</i>麦克风音量</span><small>由功放/混音器硬件调节</small><input id="micVolume" type="range" min="0" max="100" value="70" disabled></label>
|
||
</article>
|
||
|
||
<article class="next-card"><div class="next-number">02</div><div><small>下一首</small><b id="nextSong">队列为空</b></div><button data-page="queue">查看队列 <span>›</span></button></article>
|
||
</section>
|
||
|
||
<section id="search" class="page">
|
||
<div class="page-heading"><div><p>SONG LIBRARY</p><h2>想唱什么?</h2></div><span>海量本地曲库</span></div>
|
||
<div class="search-mode" role="group" aria-label="搜索方式">
|
||
<button type="button" data-search-mode="singer" class="active">歌手</button>
|
||
<button type="button" data-search-mode="song">歌曲</button>
|
||
</div>
|
||
<form id="searchForm" class="search-box"><span class="search-icon"></span><input id="query" autocomplete="off" placeholder="输入歌手名或拼音"><button type="submit">搜索</button></form>
|
||
<div id="searchResultBlock" class="search-result-block hidden">
|
||
<div class="block-title"><h3 id="resultTitle">歌手搜索结果</h3><span id="resultSummary"></span></div>
|
||
<div id="results" class="list"></div><button id="more" class="more hidden">加载更多歌曲</button>
|
||
</div>
|
||
<div id="hot" class="hot-block">
|
||
<div class="block-title"><h3>热歌排行</h3><span id="hotSummary">正在加载…</span></div>
|
||
<div id="hotList" class="list ranking-list"></div>
|
||
<div class="rank-pager"><button id="hotPrev" type="button">上一页</button><b id="hotPage">第 1 页</b><button id="hotNext" type="button">下一页</button></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="queue" class="page">
|
||
<div class="page-heading queue-heading"><div><p>PLAY QUEUE</p><h2>已点歌单</h2></div><span id="queueCount">0 首</span></div>
|
||
<div class="queue-tip"><span>i</span>置顶歌曲将排在当前歌曲之后</div><div id="queueList" class="list"></div>
|
||
</section>
|
||
</main>
|
||
|
||
<nav><button data-page="remote" class="active"><i class="nav-remote"></i><span>遥控</span></button><button data-page="search"><i class="nav-search"></i><span>搜歌</span></button><button data-page="queue"><i class="nav-queue"></i><span>已点</span><b id="navCount" class="hidden">0</b></button></nav>
|
||
</div>
|
||
<div id="toast"></div>
|
||
<script src="/mobile/app.js"></script>
|
||
</body>
|
||
</html>
|