6

RelativeLayout に新しい状態を追加する必要がありますが、onCreateDrawableState メソッドは呼び出されません。

私のクラスは:

public class UnreadableRelativeLayout extends RelativeLayout 
{
private static final int[] STATE_UNREADED = {R.attr.state_unreaded};
private boolean isUnreaded = false;

public UnreadableRelativeLayout(Context context) 
{
    super(context);
}

public UnreadableRelativeLayout(Context context, AttributeSet attrs) 
{
    super(context, attrs);
}

public UnreadableRelativeLayout(Context context, AttributeSet attrs, int defStyle) 
{
    super(context, attrs, defStyle);
}

public void setUnreaded(boolean isUnreaded) 
{
    if (this.isUnreaded != isUnreaded)
    {
        this.isUnreaded = isUnreaded;
        refreshDrawableState();
    }
}

@Override
protected int[] onCreateDrawableState(int extraSpace) 
{
    final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
    if (isUnreaded) mergeDrawableStates(drawableState, STATE_UNREADED);
    return drawableState;
}

}

onCreateDrawableState メソッドが呼び出されないのはなぜですか?

4

2 に答える 2

1

で別のレイアウトを作成android:duplicateParentState="true"し、クラスでそれを膨らませてみてください。Android 4.0.4で動作します:

unreadable_relative_layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:duplicateParentState="true" >
    ...
</RelativeLayout>

読み取り不能なRelativeLayout.java:

public class UnreadableRelativeLayout extends RelativeLayout {

    public UnreadableRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        LayoutInflater factory = LayoutInflater.from(context);
        factory.inflate(R.layout.unreadable_relative_layout, this);
    }

}
于 2013-06-20T23:00:28.983 に答える
0

私は同じ問題を抱えていて、最終的に問題が何であるかを見つけました...それはAndroid OSに関連していて、2.2を使用していましたが、2.3.Xに切り替えたときに機能しました...

于 2012-06-11T13:34:56.723 に答える