【问题标题】:Impossible to make Vertical ProgressBar bigger无法使 Vertical ProgressBar 更大
【发布时间】:2016-08-20 11:53:33
【问题描述】:

我正在尝试显示垂直 ProgressBar。 我已经开始使用这个 GitHub 上的 VerticalProgressBar:https://github.com/halzhang/Android-VerticalProgressBar

但此解决方案不适用于其中一种测试设备,只能在其中一种设备上使用。该栏不显示进度。

所以,我只是简单地创建了一个基本的 ProgressBar 并旋转它:

 <ProgressBar
    android:id="@+id/pb_time_remaining"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:max="1005"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_centerHorizontal="true"
    android:layout_alignParentTop="true"
    android:rotation="270"
    android:indeterminate="false"/>

这项工作非常完美......但我的需求非常精确。 当我这样做时,进度不会显示在组件的所有高度上,而只是显示在上面屏幕上的固定高度百分比。我发现这个 % 是由组件的宽度固定的,这就是组件设置为“match_parent”宽度的原因。

当它是水平的时候,这个条件并不烦人,因为宽度表示你想要的进度的大小.. 我需要它来适应整个屏幕,我不能设置更大的高度/宽度,因为它在“match_parent”中。

此外,如您所见,没有填充、边距或其他任何内容..

有人有什么技巧可以让 ProgressBar 正好适合屏幕的高度,所以让它比实际的大吗?

提前致谢

编辑:

ProgressBar 是 Activity 的主要 RelativeLayout 的直接子级。

【问题讨论】:

  • 您不应该在 xml 中使用 com.halzhang.android.verticalprogressbar.VerticalSeekBar 而不是 ProgressBar

标签: android android-progressbar


【解决方案1】:

我会在相应的 onCreate() 方法中尝试以下操作:

LayoutParams params = null;
ProgressBar progress = (ProgressBar)findViewById(R.id.progressBar);
Map<String, Integer> map = deriveMetrics2(this);
params = button.getLayoutParams();
params.height = 20; //use appropriate value here. 
params.width = map.get("screenHeight");
progress.setLayoutParams(params);

public Map<String, Integer> deriveMetrics(Activity activity) {
    try {
        DisplayMetrics metrics = new DisplayMetrics();

        if (activity != null) {
            activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
        }

        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("screenWidth", Integer.valueOf(metrics.widthPixels));
        map.put("screenHeight", Integer.valueOf(metrics.heightPixels));
        map.put("screenDensity", Integer.valueOf(metrics.densityDpi));

        return map;
    } catch (Exception err) {
        ; // just use zero values
        return null;
    }
}

希望对你有帮助。

附:当然在onCreate外面声明函数...

【讨论】:

  • 谢谢,但这不起作用。进度的高度又取决于宽度,所以唯一要做的就是修改 params.width 的值...
  • 是的,我已经测试过了。我用 params.width = map.get("screenHeight");并且使用 1500... 没有任何效果,进度高度固定在屏幕宽度的等效值上,无论我指定哪个宽度..
  • 当您在 xml 文件中设置 dp 的宽度时,它们的高度会改变吗?
  • 是的,它改变了,但是直到我指定的宽度达到屏幕的宽度,之后,它完全忽略了我设置的宽度,并且仍然被屏幕的宽度挡住了。例如,如果我设置 width=200dp,进度将为 200dp 高度。但是如果我设置 1500dp,高度会被阻止在 ~310dp(我的屏幕宽度)...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多