【问题标题】:View Height returns 0, I want to return View height from onGlobalLayoutView Height 返回 0,我想从 onGlobalLayout 返回 View 高度
【发布时间】:2015-09-02 09:03:24
【问题描述】:

这是我返回视图高度的代码:

int height = 0;
public int getViewHeight(final View v) {
        v.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {

                    @SuppressLint("NewApi")
                    @SuppressWarnings("deprecation")
                    @Override
                    public void onGlobalLayout() {
                        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                            v.getViewTreeObserver()
                                    .removeGlobalOnLayoutListener(this);
                        } else {
                            v.getViewTreeObserver()
                                    .removeOnGlobalLayoutListener(this);
                        }
                        height = v.getMeasuredHeight();
//
                        Log.v(" height", v.getMeasuredHeight() + "");
                    }
                });

        Log.v(" return height", v.getMeasuredHeight() + "");
        return height;


    }

首先它返回0。然后高度值改变。 任何人都可以让我知道如何在 onGlobalLayout 中测量时返回视图高度。 Return 语句在被覆盖的方法中不起作用。

有没有其他方法可以通过传递 View 实例来制作一个返回视图高度的静态方法。

【问题讨论】:

    标签: android layout view


    【解决方案1】:
    ***try this way* 
    i get View Height and Width as per View**
    
    public class Test extends Activity {
    
    private RelativeLayout layout;
    private int temp;
    ViewTreeObserver vto;
    SharedPreferences sharedPreferences;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        sharedPreferences = getSharedPreferences("savePref",
                Context.MODE_PRIVATE);
    
        layout = (RelativeLayout) findViewById(R.id.layout);
        temp = set(layout);
        Log.e("temp", "" + sharedPreferences.getInt("key", 0));
    }
    private int set(final RelativeLayout layout) {
        vto = layout.getViewTreeObserver();
        final Editor editor = sharedPreferences.edit();
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @SuppressWarnings("deprecation")
            @Override
            public void onGlobalLayout() {
                layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    
                temp = layout.getMeasuredHeight();
                editor.putInt("key", temp);
                editor.commit();
            }
        });
        if (sharedPreferences.contains("key")) {
            Log.e("contains", "" + sharedPreferences.getInt("key", 0));
        }
        return sharedPreferences.getInt("key", 0);
    }}
    

    【讨论】:

    • 我尝试这种方式,它会根据屏幕尺寸返回高度和宽度。您还可以使用 relativecontainer.getMeasuredWidth() 方法获得宽度
    • 我想把这个高度从 onGlobalLayout() 方法返回给调用者方法。就像 int height = getViewHeight(view);
    • 只需创建返回 int 的方法,或者您可以将其保存在 sharedpreferences 中并在需要时将其取回。
    • 我提出了返回高度的方法。但这不起作用,因为方法在 onGlobalLayout() 调用之前返回高度(即 0)。
    猜你喜欢
    • 2013-05-25
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2018-10-11
    • 2016-07-12
    • 2015-10-03
    • 1970-01-01
    相关资源
    最近更新 更多