所以你可以通过设置自定义视图来实现。 假设您想要FrameLayout 。 你会有两个观点。 RoundFrameLayout.java和RectFrameLayout.java。 然后让他们都实现以下
public interface RoundAware {
boolean isRound();
}
RoundFrameLayout看起来像这样。
public class RoundFrameLayout extends FrameLayout implements RoundAware {
public RoundFrameLayout(Context context) {
super(context);
}
public RoundFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean isRound() {
return true;
}
}
RectFrameLayout将如下所示。
public class RectFrameLayout extends FrameLayout implements RoundAware {
public RoundFrameLayout(Context context) {
super(context);
}
public RoundFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public RoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean isRound() {
return false;
}
}
然后在RoundFrameLayout和RectFrameLayout xml文件中正确指向视图存根的圆形和矩形布局。 如果您希望它们具有相同的内容,请在每个文件中为所有视图的子项使用includes标记。