如何获得工具栏上的“向上”按钮?

2023-12-21

这是一个简短的问题:

我试图强制操作栏(由工具栏使用)使用 LTR 对齐方式。我已经成功地使布局本身使用 LTR,但没有使用“向上”按钮(正如我所做的那样)here https://stackoverflow.com/q/22602453/878126, 前Toolbar http://developer.android.com/reference/android/support/v7/widget/Toolbar.html被介绍)。

看来这个视图没有 ID,我认为使用 getChildAt() 风险太大。

有人可以帮忙吗?


答案

这是我发现解决这个问题的一种方法,基于这个答案 https://stackoverflow.com/a/27180584/878126 .

我这样做是为了保证只找到“向上”按钮,无论它做什么,它都会恢复到之前的状态。

这是代码:

  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
  @Override
  public boolean onCreateOptionsMenu(final Menu menu)
    {
    // <= do the normal stuff of action bar menu preparetions
    if(VERSION.SDK_INT>=VERSION_CODES.JELLY_BEAN_MR1&&getResources().getConfiguration().getLayoutDirection()==View.LAYOUT_DIRECTION_RTL)
      {
      final ArrayList<View> outViews=new ArrayList<>();
      final CharSequence previousDesc=_toolbar.getNavigationContentDescription();
      for(int id=0;;++id)
        {
        final String uniqueContentDescription=Integer.toString(id);
        _toolbar.findViewsWithText(outViews,uniqueContentDescription,View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
        if(!outViews.isEmpty())
          continue;
        _toolbar.setNavigationContentDescription(uniqueContentDescription);
        _toolbar.findViewsWithText(outViews,uniqueContentDescription,View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
        if (outViews.isEmpty())
           if (BuildConfig.DEBUG)
                    throw new RuntimeException(
                            "You should call this function only when the toolbar already has views");
                else
                    break;
        outViews.get(0).setRotation(180f);
        break;
        }
      _toolbar.setNavigationContentDescription(previousDesc);
      }
    //
    return super.onCreateOptionsMenu(menu);
    }

该视图似乎没有 ID

你说得对,导航视图以编程方式创建 https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/Toolbar.java#L985并且从不设置 id。但您仍然可以通过使用找到它View.findViewsWithText https://developer.android.com/reference/android/view/View.html#findViewsWithText(java.util.ArrayList%3Candroid.view.View%3E,%20java.lang.CharSequence,%20int).

View.findViewsWithText有两个标志:

  • View.FIND_VIEWS_WITH_TEXT https://developer.android.com/reference/android/view/View.html#FIND_VIEWS_WITH_TEXT

  • View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION https://developer.android.com/reference/android/view/View.html#FIND_VIEWS_WITH_CONTENT_DESCRIPTION

导航视图的默认内容描述是“向上导航”或者资源 ID 是abc_action_bar_up_description对于 AppCompat 和action_bar_up_description对于框架的,但您可以轻松应用自己的使用Toolbar.setNavigationContentDescription https://developer.android.com/reference/android/widget/Toolbar.html#setNavigationContentDescription(java.lang.CharSequence).

这是一个示例实现:

final Toolbar toolbar = ...;
toolbar.setNavigationContentDescription("up");
setActionBar(toolbar);

final ArrayList<View> outViews = Lists.newArrayList();
toolbar.findViewsWithText(outViews, "up", View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);

outViews.get(0).setRotation(180f);

Results

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

如何获得工具栏上的“向上”按钮? 的相关文章

  • 如何获取之前的碎片?

    为了在我的应用程序中重用某些片段 我需要知道哪个片段是返回堆栈上的第二个片段 为了做到这一点 我正在使用getFragmentManager getFragments 显示以下错误 但有效 FragmentManager getFragme
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • 自定义选择器活动:SecurityException UID n 无权 content:// uri

    我正在构建一个选择器应用程序来替换本机 Android 共享对话框 它工作正常 除非我尝试通过长按图像 gt 共享图像从 Chrome 共享图像 我发现 Google 没有捕获异常 它崩溃了 所以我可以通过 Logcat 查看它 在 Goo
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • android EditText 输入类型用于 StreetNumber 字段

    我试图在地址对话框的 streetNumber 字段中选择正确的 inputType 我想先显示数字键盘 然后让用户输入字母字符 对于一些非常特殊的情况 更接近这个的是 inputType datetime 但这不允许输入字母字符 那么如何
  • AudioTrack、SoundPool 或 MediaPlayer,我应该使用哪个?

    如果我需要能够 播放多个音频文件 具有不同的持续时间 例如 5 到 30 秒 独立设置右 左声道的音量 应用声音效果 如混响 失真 那么 我应该使用哪个 API 另外 我在 AudioTrack API 上找不到太多文档 有谁知道在哪里可以
  • Camera.open()返回NULL Android开发

    我正在按照构建相机应用程序的教程进行操作http developer android com tools device html http developer android com tools device html我对 Camera o
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • 如何检查用户在EditText中输入自己的电话号码?

    用户将在我的 Android 应用程序的注册页面上的编辑文本中输入手机号码 如何检查用户输入的是他 她的手机号码而不是其他人的 我试过这个 TelephonyManager tMgr TelephonyManager mAppContext
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • Android:监听状态栏通知

    有没有办法在状态栏被下拉时监听通知 1 用于检测状态栏变化 您可以注册一个监听器来获取系统UI可见性变化的通知 因此 要在您的活动中注册侦听器 Detecting if the user swipe from the top down to
  • 在 KitKat 4.4.2 中获取 SDard 路径和大小

    我在 Google Play 上有一个设备信息应用程序 在该应用程序中我有存储信息 我知道 Android 4 4 在访问外部 SD 卡方面发生了一些变化 内部似乎没有给我带来问题 我的问题是 如何可靠地获取 KitKat 上 SD 卡的大
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • 如何在基本活动中使用 ViewBinding 的抽象?

    我正在创建一个基类 以便子级的所有绑定都将设置在基类中 我已经做到了这一点 abstract class BaseActivity2 b AppCompatActivity private var viewBinding B null pr
  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro
  • 单元测试时 Android Studio 2.0 中测试状态终止且没有任何失败消息

    Issue 我昨天在 Ubuntu 上从 1 5 升级到了 Android Studio 2 0 当我在 Android Studio 2 0 中进行单元测试时 即使所有测试都已通过 它也会显示 终止测试 状态 有时它只显示部分测试通过 我
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android

随机推荐

  • 一旦会话过期,Spring MVC 将用户重定向到登录页面

    我在会话中存储了一个用户 bean SessionAttributes UserBean 在我的控制器中 我的目标是在会话过期时将用户重定向到登录 错误页面 以下是我的代码片段 RequestMapping value searchOppo
  • 从 .CSV 文件中选择特定范围的列[重复]

    这个问题在这里已经有答案了 我有一个包含 78000 列的 CSV 文件 我正在尝试选择第 2 100 102 200 列和最后 300 列 其余列需要跳过 我使用 numpy loadtxt 来选择列范围 numpy loadtxt in
  • SignalR 和 .NET 客户端在 ASP.NET WebForms 页面上不起作用

    我尝试在 NET 4 下的 WebForms 应用程序中为仪表板构建通知 我已经下载了 SignalR 版本 1 2 net 客户端和服务器 并准备了一个简单的通知示例 不幸的是它不起作用 我不明白为什么 如果我输入http myserve
  • 如何使用 telnet 测试我的 LDAP 服务器 URL

    我的本地和远程都有一个 LDAP 服务器 我可以 telnet 到本地 ldap url 但无法 telnet 到远程 telnet www ilovebears com 389我得到一个空屏幕 光标闪烁 这是因为某些套接字配置还是端口不可
  • Android getIntent().getExtras() 返回 null

    我正在尝试在两个活动之间传递一个字符串 我已经在其他项目中使用相同的方法完成了此操作 但由于某种原因 当我调用intent getStringExtra String 时 我收到了NullPointerException 我还尝试通过以下方
  • 使用正则表达式验证十六进制字符串

    我正在使用正则表达式验证字符串是否为十六进制 我使用的表达是 A Fa f0 9 当我使用这个时 字符串AABB10被识别为有效的十六进制 但字符串10AABB被认定为无效 我该如何解决这个问题 您很可能需要一个 so regex a fA
  • ChartJs自定义工具提示位置

    那里 我使用 ChartJS 并自定义工具提示 但第一个和最后一个工具提示的位置有问题 看 I suppose that in order to fix the problem I need to use the https www cha
  • 有没有办法在 C++ 中延迟初始化成员变量(类)?

    我有 Java 背景 我有以下程序 include
  • 在 Java 中强制释放大缓存对象

    我使用一个大型 数百万 条目哈希图来缓存算法所需的值 键是两个对象的组合作为一个长 由于它不断增长 因为映射中的键发生变化 因此不再需要旧的键 因此能够强制擦除其中包含的所有数据并在执行期间重新开始会很好 有没有一种方法可以有效地做到这一点
  • 是否有元组的 zipWith 类似物?

    初步说明 这是SeanD 删除的问题 https stackoverflow com q 50020370 2751851 就像有一样zipWith对于列表 GHCi gt zipWith 1 2 3 4 4 6 感觉应该有一些类似于元组的
  • 如何在 lambda 中进行 sql 连接?

    有时 我会偶然发现这个问题 我使用了 lambda 连接的子集 鉴于我可以使用任何 LINQ 扩展 我应该如何实现以下连接 为了简单起见 表定义为 CREATE TABLE dbo TableA Key INT IDENTITY 1 1 N
  • 可可中的客户端到客户端消息传递?

    嗯 现在我尝试在两个客户端之间而不是客户端到服务器之间进行消息传递 因此 如果我没记错的话 我们无法单独启动服务 但如何查看是单独设置还是两者都连接到同一服务 我的启动服务的代码 void startService Start listen
  • 解析错误:语法错误,意外的 T_STRING 59 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 请修复这段
  • 使用 pywin32 获取 GUIThreadInfo()

    我正在尝试遵循这个答案 https stackoverflow com a 11901591 5510469我已经到了 a 应该打电话的地步 GetGUIThreadInfo 但我找不到pywin32 文档 http timgolden m
  • 读取解决方案 sln 的所有 csproj 项目的引用列表(以编程方式)

    我有解决方案 sln 其中有许多 csproj 项目 有人知道如何以编程方式读取 VS2008 的 sln 文件中所有 csproj 项目的引用列表吗 csproj 文件只是 XML 文件 为此 您可以使用 NET 框架中的 XDocume
  • setTimeout() 的 JavaScript 执行顺序

    假设我有以下代码 function testA setTimeout testB 1000 doLong function testB doSomething function doLong takes a few seconds to d
  • CMP 证书请求

    我使用下面的代码将 CMP 证书请求发送到端点 public static void main String args try System out println In final BigInteger certReqId BigInte
  • 如何使用flexbox调整div的宽度以适应内容

    我想适应 flexrowdiv 的宽度到内容 但我无法使用 flex 设置它 HTML div class fullwidth div class sidebar p sidebar p p sidebar p p sidebar p p
  • Android 使用数据绑定库动态包含布局

    我正在使用带有数据绑定库的 Android 应用程序的 MVVM 框架 我有一些可重用的组件 应该包含所有活动 FE工具栏 菜单 浮动操作按钮 我想创建一个通用活动 它将实现所有这些可重用功能 然后每个活动类都将从这个通用活动继承 我还有
  • 如何获得工具栏上的“向上”按钮?

    这是一个简短的问题 我试图强制操作栏 由工具栏使用 使用 LTR 对齐方式 我已经成功地使布局本身使用 LTR 但没有使用 向上 按钮 正如我所做的那样 here https stackoverflow com q 22602453 878