3

我使用类似的库github.com/bk138/LibSlideMenu

它在HTC device(ICS)andNexus 7(ICS)和其他Gingerbread设备中运行良好。

但有些设备喜欢Motorola atrix和另一种HTC设备。

所以我检查了代码。

View view  = act.findViewById(android.R.id.content);
Utils.Log("<SlideMenu> : VIEW : "+view);        
ViewParent viewParent = view.getParent();
Utils.Log("<SlideMenu> : VIEW : "+viewParent);  
LinearLayout linearLayout = (LinearLayout) viewParent;
Utils.Log("<SlideMenu> : VIEW : "+linearLayout);
content = linearLayout;

在这里,首先FrameLayout在所有设备上返回。

但是第二件事LinearLayoutICS设备和其他HTC 2.3设备上返回,有些设备返回DecorView

我参考这篇文章:DecorView Child FrameLayout

他们说这是我使用的问题NoTitleBar,所以我显示标题栏但它不起作用。

此外,即使我添加了NoTitleBar属性,有些设备确实工作得很好。

这真的很令人沮丧,因为设备有不同的结果。有人知道吗?

请帮助 :D 在此先感谢。

4

4 回答 4

6

我相信我们可以确定一些关于 PhoneWindow$DecorView 的事情(或者至少与为 android 开发的一样确定)。

首先,DecorView 扩展了 FrameLayout,因此,我们可以放心地将其转换为父类 ViewGroup。也就是说,其次,我们还可以确信 DecorView 包含父类 View(s)(否则它会是一个相当无聊的 ViewGroup,不是吗)。

这使我得出结论,应该从自上而下而不是自下而上攻击这个问题,因为有问题的库代码正在尝试。

例如这样的:

ViewGroup decorView = (ViewGroup) getWindow().getDecorView();
View oldScreen = decorView.getChildAt(0);
decorView.removeViewAt(0);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
SlidingPanel slidingPanel = (SlidingPanel) inflater.inflate(R.layout.screen_slider, null);
((ViewGroup) slidingPanel.findViewById(R.id.anterior)).addView(oldScreen);
decorView.addView(slidingPanel, 0);

我最近实现了一个类似的基本 SlidingPanel 小部件,并按照上面的方法使用它。你可以在这里找到它和进一步的示例用法https://github.com/mubeta06/android/tree/master/SlidingFrame

于 2012-10-09T16:05:29.913 回答
1

Android SDK 文档中没有任何内容指定 的布局类型android.R.id.content,更不用说它的父级了。这可能会因 Android 操作系统版本、设备制造商更改或修改后的 ROM 更改而有所不同。大多数SDK开发人员甚至不应该接触; android.R.id.content没有人应该假设任何具体的事情。

于 2012-08-24T12:56:49.970 回答
0

https://github.com/bk138/LibSlideMenu/commit/9b9ae22c8e463559324e377f6e89a430dd4fd7ca希望能解决这个问题。

于 2012-08-27T16:46:06.387 回答
0

检查我为LibSlideMenu做的这个链接:

private static ViewGroup parent;

全部转换FrameLayout.LayoutParams

LayoutParams  parent = (ViewGroup) act.getWindow().getDecorView();
于 2012-12-11T10:27:44.643 回答