我和其他一些用户正在为 Stack Exchange 聊天网络开发一个 Android 应用程序。我们为每个 Activity 添加了一个教程,以向用户解释 UI。但是,我们遇到了一些障碍。
教程库需要一个指向 View 的指针(无论是 TextView
还是 ImageView
,等等),以便在显示中获取 View 的坐标,以便它知道在哪里绘制阴影和其他东西。
我们有一个 Activity 使用 Android Studio 中的标准“选项卡式 Activity ”,因此 我们没有使用任何自定义工具栏 。
操作栏看起来像这样:
我们想在每个包含标签标题的标签上获取一个指向 TextView
的指针。
例如,我们希望能够访问这个 Textview
:
我们还没有真正成功地在互联网上找到任何关于如何做到这一点的信息。如果您使用自定义工具栏 似乎相对容易 ,但 我们不是 。
挖掘 AOSP 源代码,我们找到了一种可能的方法来做到这一点,但我们需要访问的字段要么是 private
,要么是无法从主 Activity 代码访问的。
所以问题是,我们如何获取指向该 TextView
的指针?甚至有可能吗?
最佳答案
好吧,它并不漂亮,但我们找到了一种方法。使用 Android Device Monitor 中的布局检查器查看 View 层次结构,我们能够通过以下方式获取指向它的指针。
请记住:
话虽如此,以下是适用于此特定用例的方法:
ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
LinearLayout testb = (LinearLayout) viewGroup.getChildAt(0);
FrameLayout testc = (FrameLayout) testb.getChildAt(1);
ActionBarOverlayLayout testd = (ActionBarOverlayLayout) testc.getChildAt(0);
ActionBarContainer teste = (ActionBarContainer) testd.getChildAt(1);
LinearLayoutCompat testg;
if (getResources().getConfiguration().orientation == ORIENTATION_PORTRAIT)
{
ScrollingTabContainerView testf = (ScrollingTabContainerView) teste.getChildAt(2);
testg = (LinearLayoutCompat) testf.getChildAt(0);
}
else //Landscape
{
Toolbar teste2 = (Toolbar) teste.getChildAt(0);
ScrollingTabContainerView testf = (ScrollingTabContainerView) teste2.getChildAt(0);
testg = (LinearLayoutCompat) testf.getChildAt(0);
}
testg.setId(android.R.id.tabcontent);
//String IdAsString = testg.getResources().getResourceName(testg.getId());
//Log.e("TestG", IdAsString);
TutorialStuff.chatsExplorationTutorial(this, testg);
这是最终结果:
关于android - 抓取指向操作栏上选项卡的 TextView 的指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46732114/