说明:
我正在尝试向我的自定义View
添加各种RelativeLayout
,即Button
s,ImageView
等,但这些都不会呈现/显示。
文档
如众多SO问题所示:here,here,here,here等等,
我有扩展布局的标准要求,即3个构造函数,它们是:
public RelativeLayout(Context context) {}
public RelativeLayout(Context context, AttributeSet attrs) {}
public RelativeLayout(Context context, AttributeSet attrs, int defStyleAttr){}
在here网站上提及Android Developer。
实施
我的名为RelativeLayout
的{{1}}具有以下实施方式:
DiceRoller
请注意: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);
}
}
方法的内容纯粹是为了测试视图是否实际呈现。这是我调试此问题的最后一次尝试,之前我添加了init()
的观点,显然没有成功
使用关联的布局文件
MainActivity
有什么问题:
问题很简单。布局的子项不会呈现/显示/可见。
我尝试以编程方式在MainActivity中添加一个孩子。它没有渲染。我试图在这个RelativeLayout类中添加一个子节点,它没有渲染。
其他信息:
注意:添加视图时,我总是添加文字或某些图片,我还设置了<?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>
,X
值,还包括Y
并设置了wrap选项。
调试此问题时,如果我添加了视图(RelativeLayout.LayoutParams()
,ImageView
等),则布局会存储每个子项,并且每个子项的父项都是Button
。每个孩子都有RelativeLayout
,width
,height
,X
值和一些内容(图片或文字),因此问题不在于孩子们。< / p>
我不知所措,我不知道为什么它不呈现,任何帮助都将不胜感激!