【问题标题】:How can I find items from drawbale background file in an activity?如何在活动中从可绘制背景文件中找到项目?
【发布时间】:2019-03-13 11:55:08
【问题描述】:

我有一个 no 布局的活动。我直接在AndroidManifest中设置为主题:

android:theme="@style/MyTheme">

我的主题只包含一个背景:

<style name="MyTheme"
    <item name="android:windowBackground">@drawable/background</item>
</style>

这是只包含两个项目的背景文件:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@color/colorDarkGrey"/>

    <item
        android:id="@+id/ic_icon_red"
        android:drawable="@drawable/ic_icon_red"/>

    <item
        android:id="@+id/ic_icon_blue"
        android:drawable="@drawable/ic_icon_blue"/>
</layer-list>

如何在我的活动中找到(ic_icon_redic_icon_blue),以便执行我想要的逻辑。findViewById() 在这种情况下不起作用。谢谢!

【问题讨论】:

  • @AkashPatel 我想为background 文件中的项目应用逻辑。所以你说这根本不可能?
  • 嗨,试试这个。 ((LayerDrawable)getDrawable()).setDrawableByLayerId()

标签: android android-activity android-drawable android-theme android-background


【解决方案1】:

如果我理解正确的话应该是这样的。

@Test
public void testDrawable(){
    Context appContext = InstrumentationRegistry.getTargetContext();
    LayerDrawable backGroundLayer = (LayerDrawable) appContext.getResources().getDrawable(R.drawable.background);
    assertNotNull(backGroundLayer.findDrawableByLayerId(R.id. ic_icon_red));
}

以上只是要检查的测试用例,你可以这样使用。

LayerDrawable backGroundLayer = (LayerDrawable)getResources().getDrawable(R.drawable.background);
Drawable drawable = backGroundLayer.findDrawableByLayerId(R.id. ic_icon_red)

【讨论】:

  • getDrawable() 它已被弃用,但假设这不会成为问题。问题是,既然它是Drawable 而不是View,如何设置该项目的点击侦听器?谢谢!
猜你喜欢
  • 2013-09-18
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多