getCompoundDrawables在onCreateView中返回null,但不是稍后

时间:2016-09-05 20:47:26

标签: android

我想运行下面的代码,以便在棒棒糖前设备上着色按钮,但是当片段内部调用时,button.getCompoundDrawables()为数组的所有4个元素返回null 39; s onCreateView方法。

如果我稍后检查相同的Drawable []数组 - 例如按钮点击事件 - 我可以看到已正确分配了可绘制值(3为空,1有效)。

是否有一些按钮生命周期或片段生命周期,我可以依赖复合drawables数组已经正确初始化了?

Drawable[] drawables = button.getCompoundDrawables();
        if( drawables[2] != null){
            Drawable wrapDrawable = DrawableCompat.wrap(drawables[2]);
            DrawableCompat.setTint(wrapDrawable, color);
            button.invalidate();
        }

这是我使用的lib版本:

compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:support-v4:24.1.1'
compile 'com.android.support:design:24.2.0'

根据要求,我还包括一些xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout        xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
 [...]  >

<Button
    android:id="@+id/bt1"
    android:background="@android:color/transparent"
    android:textAppearance="@style/ConfigButtonTheme"
    android:text="Sincronizar Música"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:drawableEnd="@drawable/ic_chevron_right_white_24dp"
    android:textAlignment="textStart"
    android:layout_width="match_parent"
    android:layout_height="60dp" />

</LinearLayout>

6 个答案:

答案 0 :(得分:20)

android:drawableEnd更改为android:drawableRight。不知道为什么但是drawableEnd在onCreate()方法中返回null并且drawableRight工作正常。

答案 1 :(得分:20)

对于android:drawableRight,您应该使用getCompoundDrawables(),对于android:drawableEnd,您应该使用getCompoundDrawablesRelative()

getCompouundDrawablesRelative()

答案 2 :(得分:0)

我的猜测是,尚未创建/膨胀drawable。尝试将该代码放入片段中的onActivityCreatedonStartonResume。这些是在生命周期内调用它们的时间顺序,理想情况下你想尽快这样做。

答案 3 :(得分:0)

您可以通过编程方式配置drawable,然后将其设置为文本视图。

 val textDrawable = resources.getDrawable(R.drawable.ic_arrow_upward_24dp, null)
 val color = ResourcesCompat.getColor(resources, R.color.colorAccent, null)
     textDrawable.setTint(color)

            //setCompoundDrawablesRelativeWithIntrinsicBounds(left, top, right, bottom)
     textView.setCompoundDrawablesRelativeWithIntrinsicBounds(null, textDrawable, null, null)

答案 4 :(得分:0)

android:drawableEnd更改为android:drawableRight。不知道为什么,但是drawableEndnull方法返回onCreate()并且drawableRight正常工作。

OR

另一种无需将android:drawableEnd更改为android:drawableRight的方法。 它将100%工作

只需编写您的代码,如下所示:

onCreate(){
    //your all statement
    //at the end
    findViewById(android.R.id.content).post(new Runnable() {
   @Override
   public void run() {
     //write your code here you will get all the drawables
   }
   });
}

答案 5 :(得分:0)

一开始它不会在TextView中加载您的可绘制对象。您应该使用

TextView.post({ 
    // get your drawables here.
})

此功能可在加载时获取绘图。