gpt4 book ai didi

android - 如何让 Switch 控件显示它是 "turning on"或 "turning off"?

转载 作者:行者123 更新时间:2023-11-30 00:14:47 26 4
gpt4 key购买 nike

假设我有一个控制 android 服务的开关:当Switch处于“on”状态时,表示服务正在运行,当开关处于“关闭”位置时,表示服务未运行。此外,当用户点击 Switch 时,它应该切换服务(因此切换 Switch 的显示状态,因为如前所述,Switch 的显示状态正在跟踪服务的状态)。

方法 #1:为 Switch 提供一个 onCheckedChanged 监听器来打开或关闭服务取决于新的选中状态。

我不喜欢方法#1,因为当用户通过点击开关打开服务时,在服务实际启动之前,我不希望它看起来像是打开的,这可能不是立即的(它可能根本无法成功启动,但为了简单起见,我将在这里忽略这种可能性)。同样,当用户关闭服务时,我不希望 Switch 看起来像是关闭了直到服务实际关闭。

方法#2:点击开关切换服务而不改变显示状态,并且仅在通知服务已成功启动或关闭时切换显示状态。

我也不喜欢方法 #2(即使我知道如何实现它),因为用户不明白立即反馈水龙头被识别,此外,如果服务没有成功更改状态,则根本没有反馈。我认为那很糟糕。

方法 #3:点击 Switch 会立即切换拇指位置但不会切换颜色并切换服务,并使 Switch 的颜色跟踪服务的实际状态。因此,颜色变化可能会相对于拇指位置变化有所延迟。

这意味着 Switch 将有 4 种可能的视觉状态,而不是 2 种:

  • “关闭”(拇指关闭,颜色关闭)off: thumb off, color off
  • “打开”(拇指打开,颜色关闭)turning on: thumb on, color off
  • “打开”(拇指打开,颜色打开)on: thumb on, color on
  • “关闭”(拇指关闭,颜色打开)turning off: thumb off, color on

我喜欢方法 3 的想法。最干净的实现方式是什么?

在我看来,我可能必须安装两个监听器:

  • 一个 onCheckedChanged 监听器,它允许拇指改变位置像往常一样,但将 Switch 的颜色设置为与通常情况相反的颜色(这样它就不会改变颜色),并切换服务
  • 一个用于通知服务启动或关闭的监听器,它独立于拇指位置设置开关的颜色(虽然它也可能改变拇指位置,如果服务因外力而上升或下降,因为我们希望 Switch 跟踪它)。

我确定我可以想出如何实现服务启动或关闭的通知。并且请注意,我不想更改默认的拇指位置 行为。所以我真的认为我需要知道的是:如何临时更改“打开”开关以具有“关闭”配色方案,反之亦然?

我的印象是这可能涉及调用 Switch 的一个或多个方法setTint()setTintList()setTintMode()。但我不确定这些电话到底是什么。

我也欢迎任何其他关于如何使 Switch 立即反馈“打开”或“关闭”而不立即显示为“打开”或“关闭”的好主意。

最佳答案

我有点喜欢你的想法。我认为 setTintList 将成为您的 friend 。

你想要做的是这样的:

int[][] states = new int[][] {
new int[] {-android.R.attr.state_checked},
new int[] {android.R.attr.state_checked},
};

int[] thumbColors = new int[] {
Color.LIGHTBLUE,
Color.BLUE,
};

int[] trackColors = new int[] {
Color.YELLOW,
Color.RED,
};

DrawableCompat.setTintList(DrawableCompat.wrap(yourSwitchCompatView.getThumbDrawable()), new ColorStateList(states, thumbColors));
DrawableCompat.setTintList(DrawableCompat.wrap(yourSwitchCompatView.getTrackDrawable()), new ColorStateList(states, trackColors));

使用此代码,您可以通过编程方式调整缩略图/轨道颜色。您需要为每个不同的状态设置不同的颜色(如您所述)。根据您收到的状态/回调,您想要相应地更改颜色。它应该像这样工作。

另一个想法可能是:

  • 开关已停用
  • 点击开关
  • 用加载指示器/微调器替换开关
  • 回调成功:显示 Activity 微调器

关于android - 如何让 Switch 控件显示它是 "turning on"或 "turning off"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47469451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com