android - Android 中的展开/折叠按钮(显示/隐藏可选 View )

标签 android android-ui

我需要一个 UI 元素,允许用户展开/折叠(显示/隐藏)包含可选/高级信息的 View 。

我将其设想为一个文本标签(例如“高级选项”、“更多/更少”)加上一个在打开和关闭之间切换的图标。我有一些可以达到目的的图标,并且该元素的功能与 ToggleButton 的功能非常匹配,因此我尝试使用样式化的 ToggleButton 来解决这个问题。

这个解决方案非常丑陋(从维护的角度来看)。我会将其添加为下面的答案。

我希望有人可以提出更好的解决方案,或者指出如何简化我的解决方案。

顺便说一句,在 this SO Q/A 中很好地解决了 View 展开/折叠的动画问题。 .

最佳答案

谢天谢地,我找到了一种更简单的方法。

我没有使用 ToggleButton(涉及 11 个资源文件来设置样式),而是使用带有 CompoundDrawable 的 TextView,然后自己管理状态。

这种方式代码量稍微多一点,但是省去了一大堆乱七八糟的资源文件。它还可以更轻松地处理多个主题,例如在这里,我根据主题为所需的图标设置了资源 ID:

final MainActivity ma = (MainActivity) getActivity();
if  (ma.isDarkTheme()) {
    icon_expand = getResources().getIdentifier( "ic_action_expand","drawable", ma.getPackageName() );       
    icon_collapse = getResources().getIdentifier( "ic_action_collapse","drawable", ma.getPackageName() );       
} else {
    icon_expand = getResources().getIdentifier( "ic_action_expand_light","drawable", ma.getPackageName() );     
    icon_collapse = getResources().getIdentifier( "ic_action_collapse_light","drawable", ma.getPackageName() );     
}

我在 fragment 的 onCreate 中执行此操作。不幸的是,我必须在运行时解析图标 ID,但这似乎是如何完成的。

我不知道为什么我的图标在这种情况下以正常大小显示,而当我将它们指定为 ToggleButton 的背景层时(这需要为我的所有图标提供 ScaledDrawable 资源)显示两倍大小。

这是我的 onClickListener(用于 TextView):

protected OnClickListener expandCtrlListener = new OnClickListener() {
    public void onClick(View v) {
        assertTrue( v == expandCtrl );
        isExpanded = !isExpanded;
        advancedView.setVisibility( isExpanded ?  View.VISIBLE : View.GONE );
        expandCtrl.setCompoundDrawablesWithIntrinsicBounds( isExpanded ? icon_collapse : icon_expand, 0, 0, 0 );
    }
};

请注意,这些都没有显示展开/折叠的动画。我在问题末尾提到的文章中提到了这一点。

关于android - Android 中的展开/折叠按钮(显示/隐藏可选 View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18772984/

相关文章:

c# - 在 Activity 中通过 Id 获取 Fragment

java - 在 android.widget.AbsListView.contentFits(AbsListView.java :722)

android - 是否可以对 Android 应用程序的应用程序名称进行两次对齐?

android 文件传输到 wifi 打印机

android - 如何从 View.getDrawableState() 中识别状态

java - Android 上的滑动导航示例?

android - 使用 Retrofit + Kotlin Flow 处理错误的优雅方式

android - 在单个作业中执行两个不同的操作

android - 如果 token 过期怎么办

android - 删除系列指示器/绘图图例 AndroidPlot