3

Intro:

I am attempting to add various Views to my custom RelativeLayout, i.e. Buttons, ImageViews, etc however none of them render/show.

Documentation:

As shown on numerous SO questions: here, here, here, here and many more,

I have the standard requirements for extending a layout, i.e. the 3 constructors, that being:

public RelativeLayout(Context context) {}

public RelativeLayout(Context context, AttributeSet attrs) {}

public RelativeLayout(Context context, AttributeSet attrs, int defStyleAttr){}

referred to here on Android Developer site.


Implementation:

My RelativeLayout named DiceRoller has the following implementation:

public class DiceRoller extends RelativeLayout {

    private DieContainer dieContainer;
    private Context mContext;
    private int speed;
    private Runnable moveDies;
    private Handler handler;
    private Timer timer;

    public DiceRoller(Context context) {
        super(context);
        mContext = context;
        init();
    }

    public DiceRoller(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    public DiceRoller(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        init();
    }

private void init() {

        //source : https://stackoverflow.com/questions/28265286/custom-relative-layout-not-showing-child-views

        setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

        setGravity(Gravity.CENTER);
        ImageView mainImage = new ImageView(mContext);
        mainImage.setId(1994);
        LayoutParams params = new LayoutParams(100, 100);

        mainImage.setImageResource(R.drawable.die1);
        mainImage.setLayoutParams(params);

        addView(mainImage);

        RelativeLayout.LayoutParams crossParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        crossParams.addRule(RelativeLayout.ALIGN_TOP | RelativeLayout.ALIGN_LEFT, mainImage.getId());
        ImageView crossImage = new ImageView(mContext);
        crossImage.setImageResource(R.drawable.die6);
        crossImage.setLayoutParams(crossParams);

        addView(crossImage);

        TextView tv = new TextView(mContext);

        tv.setText("hello world");

        addView(tv);
    }
}

Please Note: the contents of the init() method was purely to test if views were infact rendered. This was my last attempt at debugging the issue, previously I added views from my MainActivity aswell, obviously without success

With an associated layout file

<?xml version="1.0" encoding="utf-8"?>
<com.myapp.DiceRoller
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="1000px"
        android:layout_height="1000px"
        android:background="@color/colorAccent"
        android:id="@+id/rollerBack">
</com.myapp.DiceRoller>

What is the problem:

The problem is simple. No child of the layout is rendered/shown/visible.

I attempted adding a child in my MainActivity, programmatically. It did not render. I attempted adding a child within this RelativeLayout class, it did not render.

Additional Info:

note: When adding views, I always added text or some image, I also set the X, Y values, also included RelativeLayout.LayoutParams() with the wrap option set.

When debugging this issue, if I added a view (ImageView, Button, etc), the layout has each child stored, and each child's parent is this RelativeLayout. Each child has a width, height, X, Y value and some content (either an image or text), thus the problem does not lie with the children.

I am at a loss, I have no idea why it doesn't render, any help would be greatly appreciated!

CybeX
  • 2,060
  • 3
  • 48
  • 115
  • 1
    How are you instantiating `DiceRoller`? Are you doing a `setContentView()` or inflating it in some other way? Can you share that code? – Cheticamp Sep 13 '17 at 23:22

0 Answers0