更改 Android 操作栏按钮样式

2024-02-08

我目前正在改变对我的看法ActionBar MenuItem像这样:

MenuItem menuItem = menu.add(title);

TextView tv = new TextView(context);
tv.setTypeface(myTypeface);
tv.setText("hello");

menuItem.setActionView(tv);

然而,这禁用了按钮的功能,我假设这是因为我已经更改了ActionView。无论如何,我可以在保留按钮功能的同时做到这一点吗?


这是创建自定义的示例MenuItem为了ActionBar.

First:创建View这将作为你的MenuItem.

ActionLayout示例

/**
 * A {@link RelativeLayout} that serves as a custom {@link MenuItem}
 */
public class ActionLayoutExample extends RelativeLayout {

    /** The MenuItem */
    private TextView mHello;

    /**
     * Constructor for <code>ActionLayoutExample</code>
     * 
     * @param context The {@link Context} to use
     * @param attrs The attributes of the XML tag that is inflating the view
     */
    public ActionLayoutExample(Context context, AttributeSet attrs) {
        super(context, attrs);
        // Ensure the MenuItem is accessible
        CheatSheet.setup(this);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        // Initialize the TextView
        mHello = (TextView) findViewById(android.R.id.text1);
        mHello.setTypeface(myTypeface);
        mHello.setText("Hello");
    }

}

Second:创建您将实际应用到的布局MenuItem.

动作布局示例

<your.package.name.ActionLayoutExample xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/actionButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="?android:attr/selectableItemBackground"
    android:clickable="true"
    android:contentDescription="@string/hello_world" >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</your.package.name.ActionLayoutExample>

包含风格很重要style="?android:attr/actionButtonStyle"确保布局正确反映ActionBar项目。包含一个也很重要android:contentDescription在你的布局中。通常当您长按 aMenuItem带有图标的工具提示会显示该内容MenuItem是为了.对于您的情况,您需要采取额外的步骤来确保此工具提示仍然可以访问。

一个很好的帮手是罗曼·努里克 (Roman Nurik) 的备忘单 https://gist.github.com/romannurik/3982005。您可以看到我如何在操作布局的构造函数中使用它。

您专门询问了MenuItem是可选择的。为此,请确保包含android:background="?android:attr/selectableItemBackground" and android:clickable="true"属性。

Third: 使用android:actionLayout属性来设置布局并正常在您的范围内扩展菜单Activity or Fragment.

你的菜单

<item
    android:id="@+id/action_typeface"
    android:actionLayout="@layout/action_layout_example"
    android:showAsAction="ifRoom"
    android:title="@string/hello_world"/>

使用MenuItem

In onCreateOptionsMenu call MenuItem.getActionView and on View.onClickListener。这是因为onOptionsItemSelected不会被要求定制View

final View example = menu.findItem(R.id.action_typeface).getActionView();
example .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do something
    }
});

结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 Android 操作栏按钮样式 的相关文章

  • JavaFX 中的 -fx-background-radius 和 -fx-background-insets

    我正在使用 JavaFX 我想自定义一个按钮 我看到了几个可以设计的特征 其中我发现了两个我不认识的人 button fx padding 5 22 5 22 fx border color 121212 fx border width 2
  • 视图无法解析为类型

    这里的视图似乎有什么问题 我该如何解决它 错误 视图无法解析为类型 public void onItemClick AdapterView
  • 在Android中使用RxJava2插入SQLiteDatabase

    我在学习RxJava2在安卓中 谁能解释一下我们如何使用将数据插入 SQLiteDatabaseRxJava2 这是我尝试使用的代码示例 但它将数据插入数据库六次 单击时 getCompletableObservable subscribe
  • 如何使 FirebaseAuth.AuthStateListener 在 Kotlin 中工作?

    class LoginActivity AppCompatActivity private val firebaseAuth FirebaseAuth getInstance private val firebaseAuthListener
  • Android 从 C++ 端播放原始音频

    我需要能够在 Android 系统的 C 端以自定义文件格式传输音频 我正在致力于移植自定义媒体播放器 并且需要能够打开自定义文件并从中传输音频 这很重要 因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的 并且通过 JNI
  • android ndk 多点触控?

    我正在编写一个仅使用本机代码的应用程序 那么ndk中是否可以获取多点触控事件呢 我感觉我已经搜索了整个网络 但什么也没找到 有谁知道如何做到这一点 是的 您可以检查名为native activity查看如何获取输入事件 寻找engine h
  • Auto-value-gson出现接口错误,注册一个InstanceCreator?

    我有一个如下所示的接口类 public interface Species String name And a Human实现的类 AutoValue使用类型适配器 AutoValue public abstract class Human
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 在 Android 中跨单元测试和仪器测试共享资源

    现在谷歌已经添加了实验单元测试支持 http tools android com tech docs unit testing support 如何在单元测试和仪器测试之间共享资源 例如 假设我有一个TestUtils java我希望在单元
  • Android NDK 支持区域设置吗?

    我真正想做的就是使用格式化日期strftime x 以正确的顺序 在大多数平台上调用setlocale 足够 在 Android 上 我不断收到 美国日期 那么 Android 不支持语言环境吗 No setlocale and strft
  • react-native android fontFamily 不生效

    问题一 我在index android js的欢迎样式中添加了fontFamily 但没有效果 fontFamily 真的可以在 Android 上使用吗 欢迎 字体大小 20 fontFamily roboto thin 文本对齐 居中
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • Android SHA1 发布密钥库无法与 Google 地图配合使用

    我正在使用 Google Maps Android API 但遇到了一些问题 我正在使用 android studio 签署我的 apk 在 android keystore jks 创建一个 另外 我选择 发布 作为其中的类型 我已经使用
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • Android 4.4 Kitkat 自定义视图操作栏未填充整个宽度

    我试图拥有一个带有自定义视图的简单操作栏 但我得到以下结果 为了演示 我创建了一个带有黄色背景颜色的简单 xml 它应该占据整个宽度 这是 XML
  • 找不到数据库路径是不可能的

    我对 android 开发很陌生 现在我正在尝试通过扩展 SQLiteOpenHelper 的类创建数据库 我确信数据存储在我的 Nexus 7 我用来测试应用程序的设备 上的某个位置 但是我找不到数据库的路径 我四处寻找其他类似的问题 所
  • Android:分配内存失败

    我正在尝试创建一个具有 2047 mb 内存的模拟器 当我运行它时 我收到此错误 2011 02 22 14 24 14 Emulator 2011 02 22 14 24 14 Emulator This application has
  • 如何解决 greenDAO 在执行 InsertOrReplace 时“不存在这样的表错误”?

    我正在使用 greenDAO 并且已成功生成所有必需的类和实体 并且我可以看到我的表已创建 但是在要替换的行上放置断点后 我收到一条错误消息 告诉我 不存在这样的表错误 try appTimeUsageDao insertOrReplace
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru

随机推荐

  • 在VBA中同时设置单元格左边框和右边框

    想知道是否有办法用一条语句设置单元格的左边框和右边框 类似的东西msgBox配置可以组合 添加在一起 例如vbYesNo vbQuestion 我试过 Cells j i Borders xlEdgeLeft xlEdgeRight 这给我
  • 如何使用 SQL Server 数据库中的值填充列表?

    该列表将根据我的数据库中有多少项目而增长和缩小 我需要填充列表而不是列表框 我知道我需要打开一个连接 using var conn new SqlConnection Properties Settings Default DBConnec
  • java bean如何将多个对象封装成一个

    在定义中说 java bean将许多对象封装成一个对象 Bean 这里的 许多对象 是什么意思以及java bean如何将它们封装成一个对象 None
  • 如何在 python 中使用 ipython 笔记本 Markdown 单元格的内容

    在 IPython 中 我们可以通过以下方式获取先前的输出和输入Out n and In n 变量 是否可以使用 Markdown 笔记本单元的内容并在 python 中使用它 我想在 Markdown 单元格中写入一些文本 This is
  • TouchsMoved 以不规则的间隔调用

    我正在为 iOS 制作一款游戏 您主要在屏幕上拖动大对象 当我在实际的 iPad iPhone 上运行游戏一段时间 连续在屏幕上画圈拖动对象 时 每隔 5 分钟左右拖动的对象会卡顿约 10 30 秒 然后 它又恢复如丝般光滑的移动状态 从视
  • Delphi中如何区分多个键盘?

    我的电脑上连接了两个键盘 一个用于输入 TMemo1 另一个用于输入 TMemo2 两者都可以同时打字 问题是我无法区分键盘一输入的内容和键盘二输入的内容 有没有办法区分某些输入来自哪个设备 Dian 你可以使用注册原始输入设备 http
  • struct.error:解包需要长度为 16 的字符串参数

    处理 PDF 时文件 2 pdf https yadi sk i 2vABlTaexZerg使用 pdfminer pdf2txt py 我收到以下错误 pdf2txt py 2 pdf Traceback most recent call
  • 以编程方式将产品添加到购物车并更改价格

    我想以编程方式将产品添加到购物车 另外 我想在添加到购物车时更改产品价格 假设我的产品价格是 100 美元 添加到购物车后我想将其更改为 90 美元 我将产品添加到购物车 但是 我无法更改产品价格 是否可以 以下是将产品添加到购物车的代码
  • 使用 nginx/gunicorn 进行 Django 文件上传 - 媒体权限

    我试图允许 django 站点的用户通过模型上的 FileField 将文件 主要是 PDF 上传到我的服务器 但是 当我尝试使用我的模型表单生成的上传字段时 我不断遇到 Errno 13 Permission Denied 我在四处寻找时
  • ConcurrentDictionary.GetOrAdd 真的是线程安全的吗?

    我有这段代码 如果该任务是为相同的输入创建的 我想等待正在进行的任务 这是我正在做的事情的最小再现 private static ConcurrentDictionary
  • Jetty SSL 配置 Apache karaf

    我正在尝试配置 Jetty 以在 Apache Karaf OSGI 容器中使用 SSL http 有效 但 https 无效 可能是什么问题呢 我的配置详细信息如下 等 jetty xml
  • 在 Weblogic 中配置容器管理的安全性

    有人知道这方面的任何指南吗 我是 weblogic 和容器管理安全性的新手 我已经做的是 在 Weblogic 中设置 LDAP 身份验证器 在 Eclipse 中创建一个简单的 Web 应用程序 配置 web xml 添加了 securi
  • 使用 ClassFileTransformer.transform 进行字节码检测

    我写了一个类premain方法并在该方法中我添加了一个ClassFileTransformer to Instrumentation Instrumentation addTransformer 我已经使用调用了一个应用程序 java ja
  • Django 中的对象所有权

    我想知道如何使用 django 模型完成一个简单的 对象所有权 系统 这样默认情况下 只有对象的所有者可以编辑它 我试图允许 管理 组代表对象所有者编辑所有对象 并且此时添加了自定义权限 class Meta permissions man
  • MS Excel 从上到下查找列

    我在寻找 LOOKUP 从上到下搜索列的方法时遇到问题 情况是这样的 我需要为 Excel 创建一个公式来搜索句子中的硬件部分 例子 句子 A1 客户电脑无法开机 检查主板 主板故障 更换主板 PSU 电量不足 更换电源 这是查找范围列 硬
  • 如何在角度组件 Angular 1.5 及以上版本中使用 $compile

    我正在从指令迁移到组件 但使用 compile As 时出现错误 compile ReturnDomElement scope 应该使用什么来代替 scope 因为我没有在我的组件中注入 scope None
  • 在docker环境中设置子域

    我在家里的 Ubuntu 服务器 14 04 Trusty Tahr 上的 Docker 容器中运行不同的服务 我目前的设置如下 詹金斯 jenkins slarti gitlab slarti 下的 Gitlab 和 Leanlabs i
  • 使用 scipy.sparse.csc_matrix.toarray() 将稀疏矩阵转换为数组时出错

    我有一个scipy sparse csc matrix http docs scipy org doc scipy reference generated scipy sparse csc matrix html我正在尝试将其转换为数组sc
  • 最小覆盖和功能依赖性

    考虑到以下功能依赖性 我将如何计算最小覆盖范围 A gt B ABCD gt E EF gt GH ACDF gt EG 在讲义中 它给出了最小覆盖率的推导 但我不明白它 例如为了摆脱ACDF gt E A gt B gt AACD gt
  • 更改 Android 操作栏按钮样式

    我目前正在改变对我的看法ActionBar MenuItem像这样 MenuItem menuItem menu add title TextView tv new TextView context tv setTypeface myTyp