Articles of viewgroup

Activity.addContentView(View)== ViewGroup.addContentView(View)?

我对Android活动有疑问。 当ViewGroup具有(类似的?) addView(View)方法时,Activity具有方法addContentView(View) 。 不幸的是,它放置了来自addContentView未记录的“where”视图。 就像一个LinearLayout只是将View添加到底部? 它更像是FrameLayout ,它将其视图添加到“onTop”吗? 它是否依赖于setContentView设置的ViewGroup ? 如果我深入了解源代码,我会看到addContentView将调用Window的抽象方法addContentView 。 不幸的是我无法看到哪个类正在实现此方法。 那么Activitys addContentView的行为到底是什么?

根据父types生成LayoutParams

我发现自己需要完全用Java创建一个View而不知道父类的具体types。 例: public View getView(int position, View convertView, ViewGroup parent){ if(null == convertView){ convertView = new TextView(parent.getContext()); } ((TextView) convertView).setText(getItem(position).getName()); } 现在假设我想改变它,以便convertView在两个方向都是wrap_content。 由于这是一个适配器,我想避免将Adapter与父类的具体types耦合,但我在setLayoutParams()中给出的LayoutParams必须是正确的具体types,否则应用程序将崩溃(即如果父类是一个ListView它必须是ListView.LayoutParams,如果它是一个LinearLayout,它必须是一个LinearLayout.LayoutParams等)。 我不想使用switch语句,因为这只是一种更灵活的耦合forms,如果我将这个适配器连接到一个视图,我没想到我仍然以崩溃告终。 有没有通用的方法来做到这一点?

视图拖放更新时出现stackoverflow错误

我正在使用ondragListener进行视图拖动。 我的root是viewgroup ,在根目录中有更多的viewgroup容器,我在容器中添加了像imageview/textview这样的视图。 如果我使用像linearlayout这样的唯一容器( ViewGroup )来拖放它的工作正常但是如果我开始在这些容器中添加像imageview这样的视图并且仍然拖动点只是持有此视图的容器。 onActionDrop获取stackoverflow error : stack size 8MB 。 onActionDrop代码是: if (e.getAction()==DragEvent.ACTION_DROP) { final View view = (View) e.getLocalState(); final ViewGroup from = (ViewGroup) view.getParent(); from.removeView(view); final LinearLayout toView = (LinearLayout) v; toView.addView(view);} 错误日志: java.lang.StackOverflowError: stack size 8MB android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:6546) android.os.TransactionTooLargeException: data parcel size 26840220 bytes android.os.BinderProxy.transactNative(Native Method) android.os.BinderProxy.transact(Binder.java:503) android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4425) com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:90) java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) […]

使用dispatchDraw(Canvascanvas)

ViewGroup类中dispatchDraw(Canvas canvas)方法的用途是什么?

WindowManager中的全屏

这是我的代码: params = new WindowManager.LayoutParams( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT); wm = (WindowManager) getApplicationContext() .getSystemService(Context.WINDOW_SERVICE); inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); mTopView = (ViewGroup) inflater.inflate( R.layout.activity_invisible, null); params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_DIM_BEHIND | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |WindowManager.LayoutParams.FLAG_FULLSCREEN; if(keep==true){ int value = brightnessIntent.getExtras().getInt(“value”); float v=value/255.0f; params.dimAmount=0; params.alpha=v; rl = (RelativeLayout) mTopView.findViewById(R.id.window); getWindow().setAttributes(params); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); wm.addView(mTopView, params); } 视图仍显示状态栏, mTopView是一个叠加窗口。 […]

自定义ViewGroup焦点处理

假设我有一个可自由聚焦的自定义ViewGroup,并且有一些可以集中注意力的子视图(Android机顶盒的自定义垂直菜单应该在远程控制器上作出反应)。 每当自定义ViewGroup获得焦点时,我都需要将焦点传递给一些子视图。 我将descendantFocusability设置为OnFocusChangeListener并将OnFocusChangeListener设置为自定义ViewGroup,但从不调用OnFocusChangeListener.onFocusChanged() 。 它看起来像beforeDescendants没有像我预期的那样工作。 实际设置afterDescendants与设置afterDescendants工作方式相同 – 焦点由最近的子视图进行,自定义ViewGroup没有机会决定应该关注哪个子视图。 我怎样才能达到理想的行为? 在ViewGroup处理焦点的最佳实践是什么?

自定义ViewGroup示例?

我在这里搜索了SO,在Google上,在android文档上… 但我找不到一个自定义视图组示例的代码片段,我发现最多一些模糊的解释…… 有人可以提供吗? 如何创建一个视图组,您可以将其子项放在您想要的位置?

addView不起作用

我可能已阅读所有post和文档,但我仍然无法解决此问题。 我想使用addView()方法将视图添加到现有(运行)布局,但由于某种原因我不能。 我知道这应该是简单和基本但我仍然无法做到。 所以,请帮帮我。 这是一个代码: LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); TextView text=new TextView(this); text.setText(“test”); layout.addView(text); 这是一个代码,结果是我只显示了在xml文件中定义的视图。 我没有添加这个新视图。 当我调试时,我看到这个添加的视图是我添加它的父项的子项,但它没有显示。 这是main.xml: 请帮忙。 这会让我疯狂!

以编程方式将片段添加到视图组

基本上这是我的平板电脑横向的应用程序(想法):两个碎片,左边的片段是一个由resource.xml文件填充的列表片段(有工作)。 正确的片段应该根据用户点击的列表项dynamic地改变片段和布局。 谷歌search到目前为止告诉我,我需要编程添加和删除片段到一个视图组来做到这一点。 是对的吗? 基本上这个问题是: 如何创build视图组和哪里(Main.java或menufragment.java)? 我如何把dynamic的“用户点击ID 3列表,所以添加片段3到视图组” 我要添加到我的main.xml文件? 在那里得到了listfragment的片段,为dynamic视图组添加什么? 编辑: 所以这就是我的行为看起来像:Main.java public class Main extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 这是我的listFragment MenuFragment.java public class MenuFragment extends ListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { […]

ViewGroup.resetResolvedTextDirection中的Android StackOverflowError

我刚去Android市场发布更新到我的应用程序,并注意到从现有的安装报告了一些新的错误。 虽然我可以理解(并试图做些什么)大部分,但这个让我感到困惑: java.lang.StackOverflowError at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) at android.view.ViewGroup.resetResolvedTextDirection(ViewGroup.java:5131) … this line repeats about 200 times or so … 这是所有的 – 没有任何其他的信息。 我完全不知道从哪里开始调查。 任何想法,不胜感激。