【发布时间】:2014-07-04 16:10:32
【问题描述】:
如何在 Android 中为关注/取消关注按钮建模? State List Drawable 是我要找的吗?如何定义这两种不同的状态?
【问题讨论】:
-
StateListDrawable 仅具有对平台有意义的预定义逻辑状态(按下、聚焦)。您需要手动实现按钮状态。
标签: android button layout interface drawable
如何在 Android 中为关注/取消关注按钮建模? State List Drawable 是我要找的吗?如何定义这两种不同的状态?
【问题讨论】:
标签: android button layout interface drawable
这在很大程度上取决于您想要实现的视觉效果。
首先,基础知识(我假设您已经知道这一点):您需要一个Button、setOnClickListener() 用于切换状态的侦听器,以及保存它的地方(本地数据库、您自己的服务器或随便)。
最简单、最不吸引人的方法是,只要“关注”状态发生变化(在点击侦听器中使用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);
}
}
});
【讨论】:
首先,您需要保存您的状态。无论是“关注”还是“取消关注”。保存位置取决于您的应用程序逻辑。
然后,根据当前状态,可以更新按钮的外观。 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”。
希望能有所帮助。
【讨论】:
ListView 中)。您不希望按钮自行更改关注-取消关注。