- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我无法将 subview 添加到以编程方式添加的 ViewGroup。
首先,我创建一个 GroupView (_view
) 并将其添加到背景 RelativeLayout (_root
) 中,如下所示...
_view = new ViewGroup(MainActivity.this) {
@Override
protected void onLayout(boolean b, int i, int i1, int i2, int i3) {
}
};
_view.setBackgroundColor(0xFF00FF00);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 200);
params.setMargins(10, 0, 10, 0);
_view.setLayoutParams(params);
_view.setTranslationX(0);
_view.setTranslationY(positionY - 80);
selectView(_view);
_root.addView(_view);
_view.setTag(R.string.viewID, "" + viewNum);
_view.setTag(R.string.viewSelected, "" + 0);
viewNum ++;
这很好用。然后我尝试像这样向新的 GroupView (_view
) 添加一个 View ...
ImageView dragIcon = new ImageView(MainActivity.this);
dragIcon.setImageResource(R.drawable.drabicon);
RelativeLayout.LayoutParams imgParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
imgParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
imgParams.setMargins(0,0,30,0);
dragIcon.setLayoutParams(imgParams);
dragIcon.setTranslationY(_view.getTranslationY());
_view.addView(dragIcon); // This Is What I Want, But This Doesn't Work.
//_root.addView(dragIcon); // Don't Want This, But This Works.
但是它没有被添加,或者它不可见等等。现在,如果我像这样使用 Background RelativeLayout (_root
) _root.addView(dragIcon);
它工作正常,添加了 ImageView。
那么为什么不能使用 _view
ViewGroup,_view.addView(dragIcon)
?
最佳答案
由于您正在使用 ViewGroup
,这是一个抽象类,您应该实现抽象方法 onLayout
,其中每个子项的每个 layout
方法必须调用 View 组。有关更多信息,请查看 this回答。
我认为您可以使用 FrameLayout,它是 ViewGroup 的子类。它实现了 onLayout
方法,因此您无需再次实现它。
这是 ViewGroup 的工作代码,我在其中明确调用了唯一一个子项 (dragIcon) 的 layout
方法。
ExampleActivity.java
public class ExampleActivity extends AppCompatActivity {
ViewGroup _view ;
RelativeLayout _root;
ImageView dragIcon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example);
_root = (RelativeLayout) findViewById(R.id.exampleLayout);
_view = new ViewGroup(ExampleActivity.this) {
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
dragIcon.layout(l, t, r, b); //CHECK THIS
}
};
_view .setBackgroundColor(0xFF00FF00);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 200);
params.setMargins(10, 0, 10, 0);
_view .setLayoutParams(params);
_view .setTranslationX(0);
_view .setTranslationY(80);
// selectView(_view);
_root.addView(_view );
_view .setTag(R.string.app_name, "" );
_view .setTag(R.string.app_name, "" + 0);
dragIcon = new ImageView(ExampleActivity.this);
dragIcon.setImageResource(R.drawable.heart1);
RelativeLayout.LayoutParams imgParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
imgParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
_view .addView(dragIcon); // This Is What I Want, But This Doesn't Work.
//sample_root.addView(dragIcon); // Don't Want This, But This Works.
}
}
activity_example.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/exampleLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.anil.raceorganizer.ExampleActivity">
</RelativeLayout>
关于android - 无法将 View 添加到以编程方式添加的 ViewGroups,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38730182/
我有一个名为 Customview 的 viewGroup。我需要在运行时将另一个具有多个 subview 的 viewGroup 分配给 Customview。如果以上一个是可能的,我没有正确获取
我有一个包含 N 个子项的自定义 ViewGroup。现在,我创建了另一组 ViewGroup。我想将第二个 ViewGroup 添加到第一个。我怎么做?谢谢.. 最佳答案 来自代码: firstVi
我遇到了一个奇怪的问题。例如,我们有这样的布局: 我们的屏幕将变黑。如果我将 LinearLayout 替换为 FrameLayout 或 ConstraintLayout,结果相同
我希望能够以编程方式将一个 View 组添加到另一个 View 组。两者都在 xml 中定义如下,连同我的 onCreate 方法: 主.xml: secondlayout.xml:
我不确定我的问题是否可以理解。我的布局中有一个 Image 和一个 ViewGroup。 ViewGroup 与 GridView 相当,我在其中有可以拖放的项目。现在我有兴趣将我的 ViewGrou
知道为什么会出现此崩溃吗?跟踪只有 native 代码,因此很难追踪到它。当我在 Fragment 中运行动画并且当动画结束时我为 FragmentStatePagerAdapter 调用 notif
在方法内部,我调用 addView和 removeView如下: public class EnclosingClass extends FrameLayout { ... void
如何检索以“llIndex”为 id 的 linearLayout 的索引。谢谢 最佳答案 非常简单 - 在 View 的父级上调用 indexOfChild 函数:
我有子元素(不是根)RelativeLayout 的布局,然后我创建 ViewPager 并将其作为我的相对布局的子元素插入,就像 +相对布局(根) | +-- 相对布局(子) | +-- -- 浏览
我有一个布局,其根 ViewGroup 有两个 child ,其中只有一个始终可见。如果不适用,另一个 child 的可见性将在运行时设置为 View.GONE。 当两个 child 都可见时,高度设
我的 XML 布局中有以下节点: TagLayout 是一个扩展 ViewGroup 的类,基本上包含一堆带有文本的按钮(一个自定义对象,充当标签,但它既不在这里也不在那里)。 问题是当按钮太多时,
如果我尝试使用 ViewGroup,我会收到此错误 “ViewHolder cannot be resolved to a type”。没有具体的import present,如何使用? 最佳答案 也
我的自定义 ViewGroup 有问题。我连续布置了 3 个 child ,并使用 Scroller 滚动到中间的 child 。根据用户的触摸输入,我更改了应该显示的子项并请求新布局。然后我按新顺序
我正在尝试在 Android 中制作简单的翻译动画。以下不起作用: public class MyView extends ViewGroup { ... TranslateAnima
为什么 android:clipChildren="false"不工作?我想实现与 CSS overflow: visible 相同的效果,这样即使 subview 位于其父布局之外,它们也是可见的。
假设有一个包含多个子项的 ViewGroup。至于这个 ViewGroup,我想让它管理所有子项的所有 MotionEvent,这表示 VG 将 1. 能够在事件被发送到目标( child )之前拦截
我有 CustomComponent 类,它扩展了 ViewGroup。 CustomComponent源代码: public class CustomComponent extends
我的 Android 应用程序中有几个具有相同基本结构的 Activity,我正试图让我的布局变干。重复的代码如下所示。它包含一个带有页脚的可滚动区域,该页脚具有“后退”和“仪表板”链接。还有一个 F
我有一个 Android TV 布局,如下图所示。 顶部一个PagerSlidingTabStrip,从服务器拉取数据; 底部有 Fragment 的 ViewPager,每个 Fragment 都有
我正在尝试创建带有内部包含文本的指示器的 fragment slider 。 我在网上找到了一些包含图像 slider 的教程,并将其编辑为文本 slider ,但我收到了此错误消息: android
我是一名优秀的程序员,十分优秀!