我正在尝试创建一个包含Button和ImageButton 的自定义 FrameLayout。它的xml是
<FrameLayout
android:id="@+id/frame_one"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<Button
android:id="@+id/tab_btn_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/viewed_sep_bg_border"
android:gravity="center"
android:text="Video"
android:textColor="@android:color/black"
android:textSize="14sp" />
<ImageButton
android:id="@+id/tab_tick_one"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_gravity="right"
android:layout_marginRight="-4dp"
android:layout_marginTop="-4dp"
android:background="@android:color/transparent"
android:src="@drawable/slanted_tick_green"
android:visibility="gone" />
</FrameLayout>
我想要一个包含此button
和ImageButton
的布局。所以我创建了一个自定义FrameLayout
,但它没有显示任何内容。只占空间。
public class TabFrameLayout extends FrameLayout {
private TabFrameLayout mTabFrameLayout;
private Button txtButton;
private ImageButton ibTick;
public TabFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public TabFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public TabFrameLayout(Context context) {
super(context);
init(context);
}
private void init(Context context) {
mTabFrameLayout = this;
FrameLayout.LayoutParams frageParams = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
mTabFrameLayout.setLayoutParams(frageParams);
setBackgroundColor(Color.RED);
txtButton = new Button(context);
txtButton.setGravity(Gravity.CENTER);
txtButton.setTextSize(24);
txtButton.setTextColor(Color.BLACK);
txtButton.setText("txtButton");
txtButton.setBackgroundResource(R.drawable.viewed_sep_bg_border);
LayoutParams buttonParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
txtButton.setLayoutParams(buttonParams);
ibTick = new ImageButton(context);
ibTick.setBackgroundColor(Color.TRANSPARENT);
ibTick.setImageResource(R.drawable.slanted_tick_green);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) ibTick.getLayoutParams();
//params.setLayoutDirection(L);
params.height = 50;
params.width = 50;
params.setMargins(0, -4, -4, 0);
params.gravity = Gravity.RIGHT | Gravity.TOP;
//params.weight = 1.0f;
//params.
ibTick.setLayoutParams(params);
mTabFrameLayout.addView(txtButton);
mTabFrameLayout.addView(ibTick);
mTabFrameLayout.invalidate();
/*RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)txtButton.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);*/
//params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of);
}
}
我已将ImageButton
和按钮添加到FrameLayout
但未显示。我怎样才能layout_weight = 1
给这个FrameLayout
。
答案 0 :(得分:0)
只需在框架布局中创建一个线性布局,并为其添加布局权重,这将解决您的问题。
答案 1 :(得分:0)
在设置属性之前,您需要setLayoutParams
。这是因为视图的父级需要知道要分配给视图的大小。
//Create Button
txtButton = new Button(context);
LayoutParams buttonParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
txtButton.setLayoutParams(buttonParams);
txtButton.setGravity(Gravity.CENTER);
txtButton.setTextSize(24);
......
//Create ImageView
ibTick = new ImageButton(context);
LayoutParams imageParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
ibTick.setLayoutParams(imageParams);
ibTick.setBackgroundColor(Color.TRANSPARENT);
.....
答案 2 :(得分:0)
layout_weight
仅在其父级为LinearLayout
时才有效。在您的情况下,重量不起作用,并且您已将宽度设置为0 dp
,这使视图不可见。
将android:layout_width
更改为wrap_content
将显示该视图。
希望这有帮助。