【问题标题】:Model follow/unfollow button in AndroidAndroid中的模型关注/取消关注按钮
【发布时间】:2014-07-04 16:10:32
【问题描述】:

如何在 Android 中为关注/取消关注按钮建模? State List Drawable 是我要找的吗?如何定义这两种不同的状态?

【问题讨论】:

  • StateListDrawable 仅具有对平台有意义的预定义逻辑状态(按下、聚焦)。您需要手动实现按钮状态。

标签: android button layout interface drawable


【解决方案1】:

这在很大程度上取决于您想要实现的视觉效果。

首先,基础知识(我假设您已经知道这一点):您需要一个ButtonsetOnClickListener() 用于切换状态的侦听器,以及保存它的地方(本地数据库、您自己的服务器或随便)。

最简单、最不吸引人的方法是,只要“关注”状态发生变化(在点击侦听器中使用setText()),就只切换按钮上的文本。

可能的改进是使用不同的按钮背景,这样外观也会发生变化(例如,从灰色星形变为黄色星形)。为此,您只需在点击监听器中调用setBackground()

要获得更出色的效果,您可以使用TransitionDrawable 交叉淡化此更改。然后startTransition()reverseTransition() 将用于两个状态更改。例如:

Drawable d1 = getResources().getDrawable(R.drawable.follow_button);
Drawable d2 = getResources().getDrawable(R.drawable.unfollow_button);
final TransitionDrawable followDrawable = new TransitionDrawable(new Drawable[] { d1, d2 });
final int transitionDuration = getResources().getInteger(android.R.integer.config_shortAnimTime);

button.setBackground(followDrawable);

button.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        if (!mFollowing)
        {
            mFollowing = true;
            followDrawable.startTransition(transitionDuration);
        }
        else
        {
            mFollowing = false;
            followDrawable.reverseTransition(transitionDuration);
        }
    }
});

【讨论】:

    【解决方案2】:

    首先,您需要保存您的状态。无论是“关注”还是“取消关注”。保存位置取决于您的应用程序逻辑。

    然后,根据当前状态,可以更新按钮的外观。 StateListDrawable 的作用是,它会根据按钮的“聚焦”、“选中”等状态来更新按钮的背景。

    您可以使用 State List Drawable 作为按钮的背景。然后,如果当前状态是“跟随”,则将按钮设置为选中(vis Button.setSelected(true))。如果当前状态为“取消关注”,则为正常。 (Button.setSelected(false).

    <item android:drawable="@drawable/bg_for_follow" android:state_selected="true" />
    <item android:drawable="@drawable/bg_for_unfollow" />
    

    类似的东西。在上面的例子中,如果你将那个drawable文件设置为你的按钮的背景,当按钮状态为“selected”时它会使用“bg_for_follow”,当按钮状态正常时它会使用“bg_for_unfollow”。

    希望能有所帮助。

    【讨论】:

    • 可绘制的状态列表似乎不适合这个。
    • @matiash,那么,你能推荐一个更好的吗?或者至少你能解释一下为什么它不合适吗?
    • 差不多是因为@Dadou 暗示的原因。这些状态标志(selected、pressed 和 c)对框架有意义,并且可以被它更改(例如,如果放在 ListView 中)。您不希望按钮自行更改关注-取消关注。
    • 哦。我知道了。是的。按钮的状态可能会受到框架本身(例如 ListView)或用户交互的干扰。谢谢。我没有检查@Dadou 的提示。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2021-10-04
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多