Gee*_*ugs 5 java android android-layout android-progressbar android-gui
我有一个奇怪的问题,我无法弄清楚,需要一些其他的眼睛来看.我已经动态创建了一个ProgressBar视图,除了我的Motorola Xoom之外,它还适用于各种设备和AVD.
所有屏幕截图都有它们之上的设备名称,并且从它通过ADT获得的任何内容减少了大约50%,除了Nexus 10,因为它的超高分辨率是25%.添加了ProgressBar的红色背景以用于调试目的,以显示视图在那里并且可见.我添加了左边和顶部填充以使其居中.
下面的屏幕截图从Xoom开始,它不起作用,其次是Nexus 10(AVD),Nexus 7,Galaxy Nexus和HTC Droid Incredible,展示它在其他地方工作.拍摄后我会添加我的代码.
进度条不工作!但请注意视图是可见的(我们看到红色背景).

所有这些设备上都可以看到圆圈进度.
模拟三星Nexus 10

华硕Nexus 7

三星Galaxy Nexus

HTC Droid令人难以置信

这将创建包含它的父视图:
RelativeLayout discoverListLayout = new RelativeLayout(mContext);
discoverListLayout.setLayoutParams(params);
discoverListLayout.addView(mDiscoverList);
Run Code Online (Sandbox Code Playgroud)
mDiscoverList是最终显示的列表视图.ProgressBar加载在它之上,直到加载列表.
现在创建并设置进度条.我在onGlobalLayout上设置了填充,因为否则对象的宽度和高度为0.
mDiscoverLoading = new ProgressBar(mContext);
params.height = ViewPager.LayoutParams.WRAP_CONTENT;
params.width = ViewPager.LayoutParams.WRAP_CONTENT;
mDiscoverLoading.setLayoutParams(params);
mDiscoverLoading.setIndeterminate(true);
discoverListLayout.addView(mDiscoverLoading);
ViewTreeObserver vto = mDiscoverLoading.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
if (mDiscoverList.getCount() > 0) {
processLoadedList(true);
} else {
mDiscoverLoading.setBackgroundColor(getActivity().getResources().getColor(R.color.stitchoid_red));
mDiscoverLoading.setPadding((getView().getWidth() / 2) - (mDiscoverLoading.getWidth() / 2),(getView().getHeight() / 2) - (mDiscoverLoading.getHeight()), 0, 0);
}
ViewTreeObserver obs = mDiscoverLoading.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
});
Run Code Online (Sandbox Code Playgroud)
所以除了摩托罗拉Xoom之外,一切都像冠军一样!?我将不胜感激任何见解或建议,以帮助解决这个问题.如果我应该提供任何其他信息,请告诉我.
非常感谢你!
*附录:一个奇怪的事情可能不是很相关,但以防万一:如果我将ProgressBar宽度设置为match_parent(并且不添加宽度填充)它也可以在其他地方工作但是然后在Xoom上显示但是因为它被拉伸到宽度而变形(仅限xoom).
老实说,我不知道它会如何或为何有所作为.
但是尝试使用RelativeLayout.CENTER_IN_PARENT将ProgressBar放入屏幕的中心,而不是手动将顶部和左侧填充设置为屏幕大小的一半.
所以代替:
mDiscoverLoading.setPadding((getView().getWidth() / 2) - (mDiscoverLoading.getWidth() / 2),(getView().getHeight() / 2) - (mDiscoverLoading.getHeight()), 0, 0);
Run Code Online (Sandbox Code Playgroud)
使用
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
mDiscoverLoading.setLayoutParams(lp);
Run Code Online (Sandbox Code Playgroud)
请注意,LayoutParams对象有几个不同的"版本",您需要确保这RelativeLayout.LayoutParams是您导入的那个,因为在这种情况下,您的父级是RelativeLayout.
我无法真正告诉你是什么导致填充在Xoom上出现错误,但这是另一种方法,你可以将ProgressBar放到中心,这似乎不会受到导致问题的任何错误的影响. XOOM.