java - 计算 View 的宽度,以便它们始终适合屏幕

标签 java android dynamic view width

我需要动态计算我正在绘制的图表中的条形宽度。

最小宽度必须为 4 像素,最大宽度必须为 50 像素。

如何计算宽度,以便即使我需要更多条形,它们也会动态设置宽度并适合屏幕?

现在都是硬编码为 4 或 50 像素,因此如果您能提出建议,我将不胜感激。

提前致谢!

编辑 1

    public void drawBars(int numberOfRates) {
    this.removeAllViews();
    final ViewGroup nullParent = null;
    this.addView(mInflater.inflate(R.layout.layout_bar_diagram, nullParent));
    LinearLayout parentView = (LinearLayout) findViewById(R.id.parentView);

    int width, height, horizontalMargin, verticalMargin, textBottomMargin;

    verticalMargin = calculateDpi(16);

    if (((numberOfRates * calculateDpi(50)) + (numberOfRates * calculateDpi(5))) < displayMetrics.widthPixels) {
        width = calculateDpi(50);
        horizontalMargin = calculateDpi(5);
    } else {
        width = 0;
        horizontalMargin = 0;
    }

    for (int i = 0; i < numberOfRates; i++) {

        if (i == 0) {
            textBottomMargin = 0;
            height = calculateDpi(50);
        } else if (i == (numberOfRates - 1)) {
            textBottomMargin = calculateDpi(16);
            height = calculateDpi(150);
        } else {
            textBottomMargin = calculateDpi(16);
            height = calculateDpi(100);
        }

        TextBarView textBarView = new TextBarView(getContext());

        textBarView.drawBar(i + 1,
                width,
                height,
                horizontalMargin,
                verticalMargin,
                textBottomMargin);

        parentView.addView(textBarView);
    }

    invalidate();
}

Example 1

Example 2

Example 3

最佳答案

如果您有许多View,将它们添加到ViewGroup中并不是一个好主意。我建议您在 Canvas 上绘制小部件。

public class CustomDiagram extends View {

    private int numberOfItems;

    public CustomDiagram(Context context) {
        super(context);
    }

    public CustomDiagram(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomDiagram(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int width = getMeasuredWidth(); 
        // Here you have full width of your view
        // You also have numberOfItems here

    }
}

关于java - 计算 View 的宽度,以便它们始终适合屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38328445/

相关文章:

android - 更新设置后如何重新启动此壁纸引擎?

javascript - 动态创建并加载JS

java - 加密ios和android中的字符串并解密Web服务java

android - 在安全的 Android 锁定屏幕中使用 FLAG_SHOW_WHEN_LOCKED 和 disableKeyguard()

android - 按主页键并返回应用程序后显示对话框两次

delphi - 是否可以在没有 *.dfm 和 *.pas 文件的情况下动态创建表单?

css - 如何设置 jquery ui Dialog minwidth 但如果可能的话让它变大?

java - 如何在进一步处理之前关闭对话框?

java - Velocity:如何定义全局变量

java - 是否可以处理以 native 代码发起的 SEGFAULT?