我正在为Android API v11开发。有一个较大的RelativeLayout区域(如画布),应该以编程方式填充多个按钮。每个按钮代表一个视频,我使用android.widget.Button
扩展了VideoViewButton
课程。
以下是我现在在主要活动中所做的事情:
private void addButtonForVideo(int videoId) {
Log.d(TAG, "Adding button for video " + videoId);
VideoButtonView button = new VideoButtonView(this, videoId);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout_napping);
layout.addView(button, params);
mVideoButtons.add(button);
}
在这里,mVideoButtons
只包含所有按钮,以便稍后引用它们。
然而,按钮本身位于RelativeLayout的左上角,一个位于另一个上方。我需要做的是将每个按钮放在前一个按钮的右侧,这样它们就会填满整个屏幕。
我试过这个,我检查视频ID是不是0(意味着,按钮已经存在)。然后我得到之前放置的按钮的ID,并说我希望下一个按钮放在前一个按钮的右边:
private void addButtonForVideo(int videoId) {
Log.d(TAG, "Adding button for video " + videoId);
VideoButtonView button = new VideoButtonView(this, videoId);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout_napping);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
// align to right of previous button
if (videoId != 0) {
VideoButtonView previousButton = mVideoButtons.get(videoId - 1);
params.addRule(RelativeLayout.RIGHT_OF, previousButton.getId());
}
layout.addView(button, params);
mVideoButtons.add(button);
}
然而,它不起作用 - 按钮仍然放在彼此的顶部。我怎样才能让它们显示在前一个旁边?
答案 0 :(得分:1)
您需要在setId
的构造函数中使用videoId
调用VideoButtonView
才能生效。
确保setId
包含正数,例如,如果videoId
以0开头,请使用:
public VideoButtonView(Context context, int videoId) {
super(context);
this.setId(videoId + 1);
// other code to set layout
}
答案 1 :(得分:0)
我建议不要使用相对布局以编程方式放置对象。请改用线性布局,并使用LinearLayout.LayoutParams
组织内容要使用LinearLayout执行此操作,请确保将方向设置为HORIZONTAL
private void addButtonForVideo(int videoId) {
Log.d(TAG, "Adding button for video " + videoId);
VideoButtonView button = new VideoButtonView(this, videoId);
LinearLayout layout = (LinearLayout) findViewById(R.id.layout_napping);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCHPARENT,
LinearLayout.LayoutParams.WRAP_CONTENT,
);
LinearLayout buttonWrapper = new LinearLayout();
buttonWrapper.setLayoutParams(params);
buttonWrapper.setOrientation(LinearLayout.HORIZONTAL);
// align to right of previous button
if (videoId != 0) {
VideoButtonView previousButton = mVideoButtons.get(videoId - 1);
}
buttonWrapper.addView(button);
layout.addView(buttonWrapper);
mVideoButtons.add(button);
}
请记住将第一个按钮放在ButtonWrapper中,然后再将第二个按钮放在那里。
使用线性布局,下一个孩子将显示在下一个孩子旁边,或者显示在前一个孩子旁边,具体取决于布局的方向和方向。在这里,每个按钮将彼此相邻,包装器将延伸其所在布局的整个长度。
祝你好运!