Not getting RelativeLayout's getHeight() after setting Visibility Visible from Visiblity GONE

后端 未结 4 885
醉话见心
醉话见心 2021-01-15 04:57

What i want is, when i click on Dashboard Button it will open like a SlidingDrawer and after it opened when clicked on it again it will close. i use this custom drawer becau

相关标签:
4条回答
  • 2021-01-15 05:26
    <RelativeLayout
            android:id="@+id/relLayTwo"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btnNEWCLICK"
            android:background="#000"
            android:visibility="gone" > //don't put gone in xml
    

    In OnViewCreated look for the height and after that make this view GONE

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
             relLayTwo = (RelativeLayout) findViewById(R.id.relLayTwo);
             mHeight = relLayTwo.getHeight();
             relLayTwo.setVisibility(View.GONE);}
    

    In this way you will get the height because on onViewCreated the view is already drawn, and after you have what you need, make the view GONE.

    0 讨论(0)
  • 2021-01-15 05:28

    Here's how i got solution for this problem.

    the actual problem with getting layout's height when we set it to wrap content is, it will not give height until it will actually draw on a screen. and in my case the custom layout got called first and then it will call remaining layout, so there is not a chance for layout to get draw.

    so what i did is i got actual height and width of the screen run time by using following code.

    DisplayMetrics metrics = new DisplayMetrics();
            ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metrics);
            height  =   metrics.heightPixels;
            width   =   metrics.widthPixels; 
    

    and after i got screens height and width, inflate view. after that got linearlayouts height and add new height to it using following code.

    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) relLayTwo.getLayoutParams();
        Log.d("test", "height "+params.height);
        params.height = height*40/100;
        relLayTwo.setLayoutParams(params);
        relLayTwo.setVisibility(View.GONE);
    

    and its worked!!

    0 讨论(0)
  • 2021-01-15 05:38

    When a View is first created, it's width and height are not available to you until onMeasure() has been called. Due to this, the first time you try to get the values, they have not been assigned yet.

    Since you're using a custom View, the solution is pretty simple. Simply move the code that gets the height and width into onMeasure() and use it after that.

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
        width = getWidth(); // Get View Width
        height = getHeight();// Get View Height
    } 
    
    0 讨论(0)
  • 2021-01-15 05:39

    simply use this to get the height and width of which visibility is GONE..

    myView.getMeasuredHeight();
    myView.getMeasuredWidth();
    
    0 讨论(0)
提交回复
热议问题