gpt4 book ai didi

android - 覆盖安卓 :ellipsize on ActionBar subtitle

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:10 28 4
gpt4 key购买 nike

我的 Activity 使用 ActionBar.setSubtitle 函数来显示当前显示的文件系统位置的完整路径。这意味着接近字幕末尾的子字符串比开头更相关,所以我想我会覆盖 ActionBar 样式以在开头而不是结尾处省略文本,如下所示:

res/values/themes.xml

<style name="Theme.Holo" parent="android:Theme.Holo">
<!-- Action bar styles -->
<item name="android:actionBarStyle">@style/Widget.Holo.ActionBar</item>
</style>

res/values/styles.xml

<style name="Widget.Holo.ActionBar" parent="@android:style/Widget.Holo.ActionBar">
<item name="android:subtitleTextStyle">@style/TextAppearance.Holo.Widget.ActionBar.Subtitle</item>
</style>

<style name="TextAppearance.Holo.Widget.ActionBar.Subtitle"
parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle">
<item name="android:ellipsize">start</item>
</style>

当我将它安装到我的 ICS 设备 (Nexus S) 上时,文本最后仍然(错误地)省略了。如果我修改我的 TextAppearance.Holo.Widget.ActionBar.Subtitle 版本以包含 android:textSize 的项目,字幕的文本大小会相应地改变,所以它会似乎我正在以正确的方式四处寻找;我只是不明白为什么它不尊重我的 android:ellipsize 覆盖。

将所有这些转化为问题格式:如何使用样式/主题覆盖 ActionBar 中字幕 View 的 android:ellipsize 属性?

最佳答案

在我看来,使用主题和样式是不可能的,但我找到了一种在运行时设置 ellipsize 值的解决方法。

最难的是找到标题(或副标题)TextView,因为这个view的id在android内部包中。

所以你需要在你的项目中创建 stub 类

package com.android.internal;

public class R {

public static final class id {
public static int action_bar_title = 0;
public static int action_bar_subtitle = 0;
}

}

之后你需要在代码中找到这个 View (我用下面的代码来做到这一点,它适用于 sherlock 和默认操作栏)

public class ActionBarUtils {

public static TextView getActionbarTitle(Activity activity) {

TextView title = (TextView) activity.findViewById(R.id.abs__action_bar_title);// for ActionBarSerlock
if (title == null) title = (TextView) activity.findViewById(com.android.internal.R.id.action_bar_title);// for default action bar

return title;
}
}

现在您可以在 Activity 代码中设置椭圆值:

getActionBarTitle().setEllipsize(TextUtils.TruncateAt.MIDDLE)

附言:确保在标题可见时调用 getActionBarTitle(在调用 setDisplayShowTitleEnabled(true) 之后),否则您将获得 NullPointerException。

附:如果你使用proguard混淆,你应该在proguard.cfg中添加:

-keep class com.android.internal.R*{
*;
}

关于android - 覆盖安卓 :ellipsize on ActionBar subtitle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869444/

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