当 CheckboxPreference 摘要字段不够长时,显示首选项屏幕的额外信息?

发布于 2024-08-24 14:35:04 字数 346 浏览 4 评论 0原文

我有一个屏幕,您可以在其中启用/禁用我的 Android 应用程序的模块。

为此,我使用了 CheckboxPreference 屏幕。这一切都很好,但如果添加的描述超过 2 行,摘要字段就会被截断。

假设每个模块有 4-5 行可用的描述,我想在帮助器窗口中显示它。

我尝试将单击事件绑定到 CheckboxPreference,但该事件会针对整行触发,因此不仅在单击复选框时,而且无论您在何处单击该行,复选框都会切换。

所以现在我想知道这个问题是否可以解决。因此,如果用户需要更多信息,只需点击文本,助手就会打开,如果想要切换设置,则点击复选框。

你会怎么做?如果其他想法可行的话,我也愿意接受。

I have a screen where you can enable/disable modules for my Android application.

For this I use a CheckboxPreference screen. This is all good, but the summary field gets cut off if longer descriptions are added than 2 lines.

Suppose I have 4-5 lines of description available for each module, I would like to display this in a helper window.

I tried to bind a click event to the CheckboxPreference, but that fires for the whole line, so not only when the checkbox is clicked, and more, wherever you click on the line the checkbox is toggled.

So now I am wondering if this can be fixed. So if the user needs more info, just taps the text and the helper opens up, and if want to toggle the settings it taps the checkbox.

How would you do it? I am open to other ideas too, if they do work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风情万种。 2024-08-31 14:35:05

您也许可以创建自己的 CheckboxPreference 子类,为您提供更多空间。

You might be able to create your own subclass of CheckboxPreference that gives you more room.

调妓 2024-08-31 14:35:05

我找到了一个更适合我的情况的替代解决方案,因为我需要针对不同类型的首选项(而不仅仅是 CheckboxPreferences)提供更长的摘要。

  • 我将文件 data/res/layout/preference.xml 从 SDK 复制到我的应用中的 res/layout/preference_long_summary.xml。 (我从 API 级别 7 中选择了一个,因为它似乎也适用于更高级别)
  • @+android:id/summary TextView 中删除了 android:maxLines 属性
  • 从我的首选项中引用了此布局,以获取需要使用 android:layout="@layout/preference_long_summary" 进行更长摘要的首选项

I found an alternative solution that fits better in my case since I needed longer summaries for different types of preferences, not only CheckboxPreferences.

  • I copied the file data/res/layout/preference.xml from the SDK to res/layout/preference_long_summary.xml in my app. (I took the one from API level 7, since it seems to work also for higher levels)
  • removed the android:maxLines attribute from the @+android:id/summary TextView
  • referenced this layout from my preferences for the preferences where I needed longer summary with android:layout="@layout/preference_long_summary"
傲娇萝莉攻 2024-08-31 14:35:04

嗯今天也遇到了同样的问题。
我的替代解决方案是只允许在摘要中显示更多文本。

只需创建您自己的 CheckBoxPreference 子类,如下所示:

public class CheckBoxPreferenceWithLongSummary extends CheckBoxPreference{

    public CheckBoxPreferenceWithLongSummary(Context context) {
        super(context);
    }

    public CheckBoxPreferenceWithLongSummary(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public CheckBoxPreferenceWithLongSummary(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
        summaryView.setMaxLines(10);
    }
}

然后在您的 PreferenceScreen 中(我假设您使用 xml 来设置 Preference 布局 - 不确定它是否可以完全以编程方式实现)只需替换旧的 使用您的新实现,如

似乎对我来说工作得很好,尽管我不确定关于findViewById(android.R.id.summary),因为在parentClass中使用了com.android.internal.R.id.summary,这似乎无法从Java内部直接访问?希望这不仅仅是巧合:)

Hmn had the same problem today.
My alternative solution is to just allow to display more Text within the summary.

Just create your own subclass of CheckBoxPreference that looks something like this:

public class CheckBoxPreferenceWithLongSummary extends CheckBoxPreference{

    public CheckBoxPreferenceWithLongSummary(Context context) {
        super(context);
    }

    public CheckBoxPreferenceWithLongSummary(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public CheckBoxPreferenceWithLongSummary(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
        summaryView.setMaxLines(10);
    }
}

Then within your PreferenceScreen (i assume you use xml to set up the Preference layout - not sure if its even possible completely programmatically) just replace the old <CheckBoxPreference.../> with your new implementation like <com.example.whatever.CheckBoxPreferenceWithLongSummary ... />

Seems to work just fine for me, altough i'm not sure about the findViewById(android.R.id.summary) because in the parentClass com.android.internal.R.id.summary is used which seems to be not directly accessible from within Java? Hope its not just an coincidence :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文