我在一个片段中有一个视图。此片段位于FrameLayout中。我想动画这个视图移动到片段边界之外。但是,当越过边界时,视图总是被剪裁。我已尝试将android:clipChildren="false"
和android:clipToPadding="false"
设置为所有内容,但我无法让它发挥作用。
这甚至可以吗?
答案 0 :(得分:7)
我遇到了与片段类似的问题,并将android:clipChildren="false"
和android:clipToPadding="false"
放在我的层次结构中的所有级别上,但它仍然无效。对我有用的技巧是在我的片段代码中添加这个覆盖:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewGroup vg = (ViewGroup) view;
vg.setClipChildren(false);
vg.setClipToPadding(false);
}
希望这会有所帮助......
P.S。积分应该转到answer
答案 1 :(得分:2)
frangulyan你错过了你的答案中的其他代码。以下解决方案对我有用。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
LinearLayout rootView = (LinearLayout) inflater.inflate(R.layout.fragment_main, container, false);
//This can be done in XML
rootView.setClipChildren(false);
rootView.setClipToPadding(false);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//This is the NoSaveStateFrameLayout - force it to not clip
FrameLayout frameLayout = (FrameLayout) getView();
frameLayout.setClipChildren(false);
frameLayout.setClipToPadding(false);
}
答案 2 :(得分:0)
@frangulyan和@Barrie Galitzky已经给出的答案都在正确的轨道上,但是我必须在层次结构中为所有父级的setClipping false添加此循环才能正常工作
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewGroup vg = (ViewGroup) view;
while(vg != null) {
vg.setClipChildren(false);
vg.setClipToPadding(false);
vg = vg.getParent() instanceof ViewGroup ? (ViewGroup) vg.getParent() : null;
}
}
答案 3 :(得分:0)
我知道这有点旧了,并给出了正确的答案,但我想补充一点,你可以使用onCreateView
在ViewGroup
内做frangulyan所做的事情。即:
@Override
public View onCreateView(LayoutInflater, ViewGroup container, Bundle savedInstanceState) {
container.setClipChildren(false);
container.setClipToPadding(false);
// Whatever other setup you like
return View;
}